diff --git a/bot.js b/bot.js index 480a717..04aa895 100644 --- a/bot.js +++ b/bot.js @@ -4,6 +4,9 @@ var Discordie = require('discordie'); // Require log4js for logging to files var log4js = require('log4js'); +// require moment-timezone for timezone conversion +var Moment = require('moment-timezone'); + // require custom settings var config = require('./config.json'); @@ -60,8 +63,19 @@ setInterval(function() { e.message.channel.sendMessage("*gives " + e.message.author.nickMention + " a strip of delicious bacon.* ") // !cookie - if (e.message.content == "!cookie") + // if (e.message.content.indexOf("!cookie") >=0) { + if (e.message.content == "!cookie") { e.message.channel.sendMessage("*gives " + e.message.author.nickMention + " a freshly made Oatmeal Raisin cookie.*") + // if (e.message.content !== "!cookie") { + // var input = e.message.content + // var fields = input.split(' ', 2) + // var user = client.Users.find(u => u.username == fields[1]); + // e.message.channel.sendMessage("*gives " + user.mention[fields[1] + " a freshly made Oatmeal Raisin cookie.*") + // } else { + // e.message.channel.sendMessage("*gives " + e.message.author.nickMention + " a freshly made Oatmeal Raisin cookie.*") + // } + } + // !help if (e.message.content == "!help") @@ -88,12 +102,12 @@ setInterval(function() { // fist bump if (e.message.content == "*fist bump*" || e.message.content == "*fistbump*") e.message.channel.sendMessage("Ba-la-la-la-la! \r\r\ - https://cdn.discordapp.com/attachments/265064665099403264/294327036388835328/giphy-3.gif") + https://cdn.discordapp.com/attachments/265064665099403264/294327036388835328/giphy-3.gif"); // !lollipop if (e.message.content == "I'm satisfied with my care.") e.message.channel.sendMessage("You have been good, have a lollipop! \r\r\ - https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif") + https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif"); // end Baymax easter eggs // begin misc chat triggers @@ -103,6 +117,28 @@ setInterval(function() { e.message.channel.sendMessage("*mic drop*"); // end misc chat triggers + + // begin mod-only command + if (e.message.channel.name == "mod" || e.message.channel.name == "helpers" ) { + + // !birthday + + if (e.message.content == "!birthday") + e.message.channel.sendMessage("List of Moderator Birthdays:\r\r\ + arielhasfins: 1992-07-21\r\ + Nanako: 1994-08-18\r\ + WARBIRD199: 1994-12-19\r\ + bluedinosaursocks: 1995-01-07\r\ + Meep: 1995-01-17"); + + // !time + if (e.message.content == "!time") + e.message.channel.sendMessage("List of Moderator Timezones:\r\r\ + America/Phoenix: " + Moment().tz('America/Phoenix').format('YYYY/MM/DD | HH:mm:ss zz') + "\r\ + America/Chicago: " + Moment().tz('America/Chicago').format('YYYY/MM/DD | HH:mm:ss zz') + "\r\ + America/New_York: " + Moment().tz('America/New_York').format('YYYY/MM/DD | HH:mm:ss zz') + "\r\ + Asia/Singapore: " + Moment().tz('Asia/Singapore').format('YYYY/MM/DD | HH:mm:ss zz')) + } } }); diff --git a/config.json b/config.json new file mode 100644 index 0000000..0822c03 --- /dev/null +++ b/config.json @@ -0,0 +1,6 @@ +{ + "bot_token": "MjI3Mjg0MjQxMjQ1OTI5NDcy.C7TLvA.mUGWHxjW0gG71kaL-F93VMzw95E", + "guild_id": "173239631867805703", + "guild_name": "/r/littlespace", + "reconnect": "3600000" +} diff --git a/logs/activeusers.log b/logs/activeusers.log new file mode 100644 index 0000000..7373a18 --- /dev/null +++ b/logs/activeusers.log @@ -0,0 +1,4945 @@ +[2017-03-21 20:25:11.757] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:26:02.934] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:26:32.940] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:27:02.948] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:27:32.968] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:28:02.978] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:28:32.993] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:29:02.993] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:29:33.020] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:30:03.040] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:30:33.051] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:31:03.052] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:31:33.076] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:32:03.095] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:32:33.101] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:33:03.130] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:33:33.156] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:34:03.172] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:34:33.176] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:35:03.207] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:35:33.226] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:36:03.236] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:36:33.237] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:37:03.266] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:37:33.286] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:38:03.294] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:38:33.314] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:39:03.340] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:39:33.355] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:40:03.357] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:40:33.386] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:41:03.396] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:41:33.398] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:42:03.398] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:42:33.426] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:43:03.443] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:43:33.450] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:44:03.480] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:44:33.498] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:45:03.505] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:45:33.506] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:46:03.536] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:46:33.537] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:47:03.550] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:47:33.550] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:48:03.573] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:48:33.586] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:49:03.594] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:49:33.623] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:50:03.649] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:50:33.662] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:51:03.666] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:51:33.688] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:52:03.703] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:52:33.713] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:53:03.713] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:53:33.743] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:54:03.756] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:54:33.763] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:55:03.789] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:55:33.817] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:56:03.825] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:56:33.830] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:57:03.851] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:57:33.870] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:58:03.880] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:58:33.880] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:59:03.910] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 20:59:33.913] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:00:03.919] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:00:33.949] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:01:03.966] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:01:33.981] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:02:03.983] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:02:34.010] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:03:04.033] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:03:34.042] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:04:04.043] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:04:34.073] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:05:04.093] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:05:34.101] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:06:04.113] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:06:34.136] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:07:04.149] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:07:34.153] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:08:04.164] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:08:34.187] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:09:04.190] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:09:34.191] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:10:04.199] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:10:34.216] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:11:04.224] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:11:34.237] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:12:04.239] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:12:34.255] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:13:04.259] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:13:34.290] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:14:04.313] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:14:34.320] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:15:04.321] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:15:34.342] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:16:04.356] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:16:34.363] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:17:04.393] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:17:34.405] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:18:04.417] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:18:34.422] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:19:04.447] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:19:34.470] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:20:04.481] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:20:34.482] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:21:04.512] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:21:34.529] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:22:04.536] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:22:34.553] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:23:04.579] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:23:34.594] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:24:04.598] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:24:34.621] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:25:04.643] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:25:34.653] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:26:04.653] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:26:34.656] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:27:04.673] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:27:34.681] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:28:04.711] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:28:34.734] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:29:04.749] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:29:34.753] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:30:04.780] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:30:34.809] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:31:04.817] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:31:34.818] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:32:04.847] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:32:34.859] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:33:04.864] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:33:34.893] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:34:04.920] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:34:34.937] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:35:04.942] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:35:34.969] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:36:04.981] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:36:34.983] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:37:04.984] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:37:35.000] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:38:05.009] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:38:35.016] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:39:05.043] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:39:35.064] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:40:05.079] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:40:35.084] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:41:05.114] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:41:35.116] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:42:05.126] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:42:35.127] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:43:05.157] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:43:35.169] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:44:05.173] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:44:35.196] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:45:05.197] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:45:35.200] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:46:05.202] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:46:35.205] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:47:05.229] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:47:35.238] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:48:05.239] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:48:35.263] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:49:05.277] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:49:35.285] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:50:05.309] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:50:35.335] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:51:05.335] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:51:35.339] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:52:05.351] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:52:35.371] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:53:05.380] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:53:35.380] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:54:05.411] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:54:35.431] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:55:05.437] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 21:55:35.450] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:56:05.476] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:56:35.479] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-21 21:57:05.484] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-21 21:57:35.501] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-21 21:58:05.522] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-21 21:58:35.525] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:59:05.526] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 21:59:35.556] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:00:05.577] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:00:35.583] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:01:05.610] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:01:35.618] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:02:05.635] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:02:35.639] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:03:05.670] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:03:35.685] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-21 22:04:05.698] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-21 22:04:35.699] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:05:05.719] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:05:35.730] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:06:05.735] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:06:35.743] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:07:05.771] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:07:35.786] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:08:05.789] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:08:35.816] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:09:05.839] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:09:35.849] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:10:05.849] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:10:35.879] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:11:05.899] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:11:35.902] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:12:05.932] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:12:35.959] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:13:05.976] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:13:35.981] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:14:06.009] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:14:36.028] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:15:06.040] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:15:36.042] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:16:06.066] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:16:36.086] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:17:06.096] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:17:36.126] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:18:06.147] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:18:36.162] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:19:06.167] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:19:36.187] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:20:06.209] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:20:36.217] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:21:06.218] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:21:36.232] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:22:06.235] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:22:36.236] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:23:06.238] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:23:36.238] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:24:06.252] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:24:36.255] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:25:06.282] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:25:36.306] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:26:06.318] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:26:36.319] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:27:06.347] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:27:36.364] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:28:06.372] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:28:36.402] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:29:06.429] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:29:36.442] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:30:06.446] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:30:36.473] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:31:06.481] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:31:36.491] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:32:06.492] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:32:36.495] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:33:06.516] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:33:36.522] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:34:06.540] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 22:34:36.547] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:35:06.564] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:35:36.570] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:36:06.582] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:36:36.590] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:37:06.597] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:37:36.599] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:38:06.628] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:38:36.641] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:39:06.650] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:39:36.656] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:40:06.684] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:40:36.697] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:41:06.703] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:41:36.714] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:42:06.723] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:42:36.733] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:43:06.735] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:43:36.767] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:44:06.785] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:44:36.794] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:45:06.808] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:45:36.829] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:46:06.842] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:46:36.845] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:47:06.865] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:47:36.885] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:48:06.891] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:48:36.893] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:49:06.922] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:49:36.936] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:50:06.945] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:50:36.951] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:51:06.955] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:51:36.970] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:52:06.976] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:52:36.981] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:53:07.006] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:53:37.011] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:54:07.012] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:54:37.038] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:55:07.058] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:55:37.065] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:56:07.095] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:56:37.105] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:57:07.122] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:57:37.127] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:58:07.155] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:58:37.177] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:59:07.189] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 22:59:37.190] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:00:07.199] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:00:37.219] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:01:07.227] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:01:37.239] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:02:07.266] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:02:37.282] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:03:07.285] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:03:37.306] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:04:07.325] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:04:37.336] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:05:07.338] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:05:37.365] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:06:07.379] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:06:37.389] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:07:07.407] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:07:37.408] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:08:07.411] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:08:37.417] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:09:07.427] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:09:37.449] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:10:07.460] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:10:37.461] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:11:07.490] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:11:37.510] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:12:07.512] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 23:12:37.535] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 23:13:07.549] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 23:13:37.558] [INFO] activeusers - LinuxRocker Active Users: 5 +[2017-03-21 23:14:07.563] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:14:37.592] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:15:07.613] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:15:37.625] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:16:07.627] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:16:37.653] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:17:07.672] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:17:37.678] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:18:07.708] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:18:37.735] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:19:07.752] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:19:37.758] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:20:07.786] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:20:37.809] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:21:07.822] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:21:37.823] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:22:07.828] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:22:37.847] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:23:07.855] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:23:37.876] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:24:07.902] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:24:37.919] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:25:07.922] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:25:37.950] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:26:07.955] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:26:37.968] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:27:07.969] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:27:37.999] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:28:08.004] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:28:38.013] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:29:08.037] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:29:38.056] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:30:08.071] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:30:38.075] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:31:08.105] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:31:38.129] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:32:08.136] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:32:38.137] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:33:08.165] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:33:38.168] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:34:08.176] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:34:38.206] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:35:08.230] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:35:38.247] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:36:08.253] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:36:38.256] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:37:08.280] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:37:38.286] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:38:08.289] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:38:38.317] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:39:08.339] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:39:38.349] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:40:08.379] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:40:38.383] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:41:08.400] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:41:38.406] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:42:08.422] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:42:38.442] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:43:08.455] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:43:38.456] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:44:08.479] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:44:38.495] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:45:08.502] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:45:38.527] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:46:08.555] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:46:38.572] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:47:08.577] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:47:38.592] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:48:08.617] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:48:38.628] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:49:08.631] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:49:38.658] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:50:08.678] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:50:38.681] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:51:08.701] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:51:38.728] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:52:08.744] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:52:38.750] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:53:08.775] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:53:38.789] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:54:08.798] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:54:38.800] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:55:08.828] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:55:38.836] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:56:08.845] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:56:38.858] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:57:08.882] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:57:38.898] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:58:08.904] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:58:38.925] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:59:08.942] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-21 23:59:38.955] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:00:08.957] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:00:38.960] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:01:08.973] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:01:38.980] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:02:09.010] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:02:39.037] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:03:33.909] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:04:03.927] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:04:33.932] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:05:37.196] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:06:07.212] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:06:48.372] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:07:18.392] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:07:48.395] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:08:18.422] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:08:48.443] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:10:56.282] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:11:26.300] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:12:35.463] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:13:05.473] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:13:35.481] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:14:05.508] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:14:35.533] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:15:05.549] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:15:35.553] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:16:05.571] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:16:35.577] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:17:05.584] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:17:35.585] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:18:05.612] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:18:35.630] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:19:05.638] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:19:35.668] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:20:05.695] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:20:35.711] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:21:05.715] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:21:35.745] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:22:05.768] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:22:35.778] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:23:05.779] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:23:35.781] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:24:05.792] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:24:35.800] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:25:05.827] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:25:35.853] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:26:05.861] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:26:35.862] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:27:05.877] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:27:35.884] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:28:05.895] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:28:35.895] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:29:05.923] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:29:35.928] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:30:05.933] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:30:35.962] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:31:05.983] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:31:35.985] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:32:05.990] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:32:36.019] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:33:06.022] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:33:36.025] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:34:06.026] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:34:36.043] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:35:06.044] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:35:36.051] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:36:06.083] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:36:36.108] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:37:06.120] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:37:36.125] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:38:06.155] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:38:36.175] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:39:06.185] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:39:36.185] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:40:06.206] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:40:36.215] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:41:06.217] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:41:36.248] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:42:06.271] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:42:36.287] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:43:06.291] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:43:36.321] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:44:06.343] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:44:36.352] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:45:06.352] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:45:36.380] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:46:06.392] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:46:36.401] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:47:06.429] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:47:36.438] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:48:06.444] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:48:36.449] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:49:06.453] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:49:36.456] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:50:06.467] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:50:36.467] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:51:06.496] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:51:36.515] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:52:06.519] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:52:36.527] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:53:06.545] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:53:36.548] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:54:06.552] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:54:36.578] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:55:06.593] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:55:36.605] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:56:06.605] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:56:36.631] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:57:06.651] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:57:36.655] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:58:06.674] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:58:36.701] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:59:06.717] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 00:59:36.721] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:00:06.735] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:00:36.758] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:01:06.771] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:01:36.771] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:02:06.801] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:02:36.819] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:03:06.825] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:03:36.839] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:04:06.848] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:04:36.864] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:05:06.868] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:05:36.870] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:06:06.891] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:06:36.900] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:07:06.901] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:07:36.926] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:08:06.945] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:08:36.952] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:09:06.981] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:09:37.008] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:10:07.022] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:10:37.027] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:11:07.055] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:11:37.078] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:12:07.086] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:12:37.086] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:13:07.117] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:33:39.632] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:34:09.650] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:34:39.658] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:35:09.688] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:35:39.691] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:36:09.702] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:36:39.702] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:37:09.702] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:37:39.710] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:38:09.714] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:38:39.714] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:39:09.741] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:39:39.758] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:40:09.761] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:40:39.767] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:41:09.783] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:41:39.798] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:42:09.803] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:42:39.831] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:43:09.851] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:43:39.859] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:44:09.859] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:44:39.888] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:45:09.901] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:45:39.902] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:46:09.932] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:46:39.956] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:47:09.961] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:47:39.964] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:48:09.994] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:48:40.000] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:49:10.007] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:49:40.007] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:50:10.036] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:50:40.045] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:51:10.051] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:52:10.595] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:52:40.615] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:53:10.616] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:53:40.646] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:54:10.670] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:54:40.671] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:55:10.676] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:55:40.705] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:56:10.728] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:56:40.739] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:57:10.739] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:57:40.768] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:58:10.782] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:58:40.783] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:59:10.812] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 01:59:40.839] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:00:10.851] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:00:40.854] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:01:10.878] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:01:40.899] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:02:10.909] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:02:40.910] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:03:10.940] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:03:40.944] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:04:10.946] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:04:40.953] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:05:10.977] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:05:40.979] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:06:10.980] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:06:41.005] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:07:11.028] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:07:41.036] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:08:11.036] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:08:41.054] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:09:11.070] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:09:41.074] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:10:11.104] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:10:41.130] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:11:11.132] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:11:41.132] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:12:11.163] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:12:41.184] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:13:11.196] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:13:41.196] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:14:11.224] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:14:41.243] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:15:11.251] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:15:41.281] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:16:11.304] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:16:41.314] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:17:11.316] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:17:41.346] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:18:11.370] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:18:41.376] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:19:11.376] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:19:41.404] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:20:11.423] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 02:20:41.428] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:21:11.458] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:21:41.484] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:22:11.495] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:22:41.495] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:23:11.507] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:23:41.520] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:24:11.530] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:24:41.531] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:25:11.560] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:25:41.581] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:26:11.587] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:26:41.614] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:27:11.639] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:27:41.640] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:28:11.644] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:28:41.664] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:29:11.687] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:29:41.697] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:30:11.698] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:30:41.714] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:31:11.731] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:31:41.737] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:32:11.741] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:32:41.763] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:33:11.777] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:33:41.782] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:34:11.808] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:34:41.817] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:35:11.818] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:35:41.818] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:36:11.844] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:36:41.860] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:37:11.862] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:37:41.889] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:38:11.915] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:38:41.930] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:39:11.933] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:39:41.940] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:40:11.943] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:40:41.954] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:41:11.955] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:41:41.986] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:42:12.006] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:42:42.014] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:43:12.039] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:43:42.061] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:44:12.075] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:44:42.079] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:45:12.107] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:45:42.112] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:46:12.120] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:46:42.121] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:47:12.144] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:47:42.158] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:48:12.163] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:48:42.193] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:49:12.219] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:49:42.227] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:50:12.230] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:50:42.232] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:51:12.255] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:51:42.263] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:52:12.263] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:52:42.288] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:53:12.307] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:53:42.310] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:54:12.320] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:54:42.326] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:55:12.341] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:55:42.341] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:56:12.368] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:56:42.391] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:57:12.392] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:57:42.395] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:58:12.413] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:58:42.432] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:59:12.440] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 02:59:42.449] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:00:12.475] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:00:42.482] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:01:12.484] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:01:42.513] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:02:12.536] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:02:42.548] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:03:12.549] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:03:42.580] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:04:12.591] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:04:42.599] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:05:12.627] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:05:42.654] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:06:12.666] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:06:42.670] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:07:12.677] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:07:42.683] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:08:12.696] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:08:42.697] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:09:12.700] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:09:42.706] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:10:12.710] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:10:42.722] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:11:12.736] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:11:42.751] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:12:12.753] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:12:42.755] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:13:12.778] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:13:42.790] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:14:12.792] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:14:42.821] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:15:12.834] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:15:42.837] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:16:12.866] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:16:42.894] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:17:12.911] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:17:42.915] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:18:12.945] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:18:42.961] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:19:12.971] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:19:42.972] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:20:13.001] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:20:43.005] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:21:13.011] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:21:43.039] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:22:13.067] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:22:43.083] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:23:13.088] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:23:43.113] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:24:13.136] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:24:43.147] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:25:13.149] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:25:43.167] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:26:13.185] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:26:43.193] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:27:13.222] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:27:43.241] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:28:13.242] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:28:43.245] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:29:13.274] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:29:43.285] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:30:13.287] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:30:43.289] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:31:13.294] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:31:43.300] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:32:13.307] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:32:43.332] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:33:13.359] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:33:43.374] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:34:13.378] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:34:43.401] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:35:13.402] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:35:43.414] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:36:13.415] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 03:36:43.444] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 03:37:13.458] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 03:37:43.465] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 03:38:13.495] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 03:38:43.520] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 03:39:13.535] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 03:39:43.539] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:40:13.559] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:40:43.562] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:41:13.575] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:41:43.577] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:42:13.601] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:42:43.609] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:43:13.616] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:43:43.643] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:44:13.669] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:44:43.670] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:45:13.675] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:45:43.693] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:46:13.708] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:46:43.713] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:47:13.714] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:47:43.745] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:48:13.751] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:48:43.753] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:49:13.777] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:49:43.803] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:50:13.817] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:50:43.818] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:51:13.843] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:51:43.858] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:52:13.869] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:52:43.870] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:53:13.881] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:53:43.900] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:54:13.907] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:54:43.937] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:55:13.956] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:55:43.960] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:56:13.964] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:56:43.981] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:57:14.004] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:57:44.016] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:58:14.017] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:58:44.036] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:59:14.055] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 03:59:44.064] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:00:14.094] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:00:44.114] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:01:14.115] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:01:44.116] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:02:14.142] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:02:44.144] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:03:14.157] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:03:44.158] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:04:14.190] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:04:44.206] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:05:14.213] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:05:44.241] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:06:14.267] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:06:44.280] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:07:14.284] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:07:44.313] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:08:14.334] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:08:44.346] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:09:14.347] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:09:44.372] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:10:14.384] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:10:44.394] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:11:14.419] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:11:44.446] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:12:14.457] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:12:44.462] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:13:14.488] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:13:44.497] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:14:14.509] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:14:44.510] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:15:14.515] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:15:44.532] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:16:14.537] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:16:44.540] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:17:14.565] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:17:44.573] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:18:14.578] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:18:44.605] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:19:14.627] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:19:44.640] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:20:14.643] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:20:44.670] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:21:14.691] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:21:44.697] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:22:14.697] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:22:44.723] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:23:14.740] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:23:44.746] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:24:14.774] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:24:44.799] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:25:14.805] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:25:44.808] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:26:14.828] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:26:44.845] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:27:14.855] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:27:44.885] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:28:14.907] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:28:44.917] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:29:14.922] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:29:44.950] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:30:14.974] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:30:44.987] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:31:14.989] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:31:45.019] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:32:15.040] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:32:45.040] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:33:15.063] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:33:45.067] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:34:15.069] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:34:45.075] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:35:15.096] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:35:45.113] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:36:15.121] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:36:45.122] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:37:15.146] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:37:45.167] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:38:15.174] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:38:45.203] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:39:15.227] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:39:45.243] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:40:15.249] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:40:45.277] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:41:15.300] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:41:45.305] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:42:15.306] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:42:45.335] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:43:15.355] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:43:45.361] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:44:15.376] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:44:45.397] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:45:15.413] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:45:45.419] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:46:15.448] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:46:45.450] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:47:15.462] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:47:45.465] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:48:15.484] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:48:45.500] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:49:15.504] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:49:45.532] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:50:15.539] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:50:45.555] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:51:15.560] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:51:45.568] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:52:15.590] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:52:45.599] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:53:15.601] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:53:45.622] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:54:15.640] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:54:45.647] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:55:15.677] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:55:45.697] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:56:15.715] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:56:45.716] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:57:15.746] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:57:45.770] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:58:15.777] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:58:45.779] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:59:15.809] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 04:59:45.828] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:00:15.833] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:00:45.841] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:01:15.867] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:01:45.884] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:02:15.890] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:02:45.920] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:03:15.943] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:03:45.950] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:04:15.951] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:04:45.980] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:05:15.996] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:05:46.001] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:06:16.030] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:06:46.051] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:07:16.066] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:07:46.072] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:08:16.073] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:08:46.078] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:09:16.091] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:09:46.093] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:10:16.123] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:10:46.139] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:11:16.146] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:11:46.176] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:12:16.187] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:12:46.203] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:13:16.210] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:13:46.216] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:14:16.235] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:14:46.240] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:15:16.241] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:15:46.255] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:16:16.265] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:16:46.269] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:17:16.272] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:17:46.296] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:18:16.312] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:18:46.319] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:19:16.348] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:19:46.367] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:20:16.368] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:20:46.370] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:21:16.396] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:21:46.413] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:22:16.417] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:22:46.434] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:23:16.458] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:23:46.475] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:24:16.482] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:24:46.508] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:25:16.512] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:25:46.516] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:26:16.519] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:26:46.546] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:27:16.566] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:27:46.575] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:28:16.578] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:28:46.606] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:29:16.617] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:29:46.620] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:30:16.643] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:30:46.659] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:31:16.673] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:31:46.676] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:32:16.699] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:32:46.703] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:33:16.710] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:33:46.714] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:34:16.743] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:34:46.757] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:35:16.764] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:35:46.771] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:36:16.797] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:36:46.811] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:37:16.814] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:37:46.838] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:38:16.844] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:38:46.849] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:39:16.854] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:39:46.883] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:40:16.884] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:40:46.890] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:41:16.913] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:41:46.936] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:42:16.946] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:42:46.948] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:43:16.976] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:43:46.998] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:44:17.006] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:44:47.036] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:45:17.063] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:45:47.072] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:46:17.074] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:46:47.086] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:47:17.088] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:47:47.093] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:48:17.096] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:48:47.116] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:49:17.127] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:49:47.137] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:50:17.151] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:50:47.160] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:51:17.173] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:51:47.175] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:52:17.190] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:52:47.200] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:53:17.209] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:53:47.212] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:54:17.242] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:54:47.263] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:55:17.266] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:55:47.295] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:56:17.316] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:56:47.335] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:57:17.340] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:57:47.370] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:58:17.381] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:58:47.392] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:59:17.396] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 05:59:47.423] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:00:17.444] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:00:47.446] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:01:17.448] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:01:47.476] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:02:17.493] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:02:47.499] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:03:17.529] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:03:47.535] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:04:17.544] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:04:47.548] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:05:17.572] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:05:47.590] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:06:17.598] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:06:47.626] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:07:17.640] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:07:47.642] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:08:17.648] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:08:47.664] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:09:17.669] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:09:47.683] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:10:17.686] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:10:47.716] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:11:17.734] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:11:47.744] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:12:17.753] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:12:47.781] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:13:17.782] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:13:47.789] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:14:17.816] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:14:47.836] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:15:17.838] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:15:47.841] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:16:17.871] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:16:47.892] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:17:17.904] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:17:47.912] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:18:17.934] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:18:47.953] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:19:17.959] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:19:47.990] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:20:18.015] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:20:48.025] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:21:18.027] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:21:48.057] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:22:18.079] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:22:48.081] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:23:18.106] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:23:48.134] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:24:18.153] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:24:48.159] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:25:18.190] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:25:48.213] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:26:18.224] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:26:48.227] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:27:18.248] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:27:48.258] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:28:18.269] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:28:48.293] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:29:18.318] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:29:48.325] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:30:18.329] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:30:48.354] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:31:18.375] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:31:48.390] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:32:18.393] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:32:48.416] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:33:18.423] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:33:48.433] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:34:18.463] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:34:48.492] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:35:18.509] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:35:48.517] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:36:18.544] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:36:48.551] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:37:18.554] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:37:48.557] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:38:18.586] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:38:48.605] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:39:18.615] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:39:48.640] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:40:18.669] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:40:48.675] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:41:18.681] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:41:48.707] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:42:18.729] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:42:48.743] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:43:18.746] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:43:48.750] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 06:44:18.772] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 06:44:48.776] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 06:45:18.796] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 06:45:48.815] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 06:46:18.831] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 06:46:48.839] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 06:47:18.849] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:47:48.876] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:48:18.890] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:48:48.894] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:49:18.923] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:49:48.943] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:50:18.951] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:50:48.979] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:51:19.009] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:51:49.018] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:52:19.025] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:52:49.032] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:53:19.040] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:53:49.042] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:54:19.047] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:54:49.053] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:55:19.071] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:55:49.077] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:56:19.080] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:56:49.108] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:57:19.112] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:57:49.116] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:58:19.146] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:58:49.169] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:59:19.182] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 06:59:49.186] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:00:19.216] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:00:49.235] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:01:19.247] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:01:49.248] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:02:19.271] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:02:49.281] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:03:19.283] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:03:49.312] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:04:19.336] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:04:49.341] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:05:19.343] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 07:05:49.356] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 07:06:19.374] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 07:06:49.378] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 07:07:19.378] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:07:49.398] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:08:19.414] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:08:49.420] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:09:19.445] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:09:49.465] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:10:19.472] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:10:49.475] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:11:19.476] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:11:49.492] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:12:19.502] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:12:49.503] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:13:19.525] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:13:49.545] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:14:19.549] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:14:49.552] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:15:19.576] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:15:49.583] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:16:19.586] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:16:49.585] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:17:19.592] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:17:49.603] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:18:19.603] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:18:49.623] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:19:19.641] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:19:49.662] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:20:19.674] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:20:49.702] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:21:19.732] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:21:49.758] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:22:19.767] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:22:49.796] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:23:19.814] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:23:49.815] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:24:19.845] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:24:49.870] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:25:19.898] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:25:49.902] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:26:19.923] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:26:49.935] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:27:19.944] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:27:49.973] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:28:19.988] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:28:50.008] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:29:20.035] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:29:50.065] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:30:20.069] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:30:50.070] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:31:20.075] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:31:50.078] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:32:20.094] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:32:50.113] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:33:20.129] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:33:50.142] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:34:20.142] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:34:50.159] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:35:20.189] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:35:50.191] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:36:20.200] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:36:50.208] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:37:20.236] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:37:50.265] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:38:20.265] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:38:50.295] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:39:20.300] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:39:50.330] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:40:20.358] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:40:50.363] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:41:20.385] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:41:50.411] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:42:20.432] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:42:50.435] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:43:20.461] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:43:50.480] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:44:20.488] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:44:50.489] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:45:20.512] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:45:50.542] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:46:20.572] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:46:50.594] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:47:20.607] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:47:50.636] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:48:20.664] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:48:50.693] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:49:20.722] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:49:50.744] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:50:20.769] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:50:50.781] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:51:20.803] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:51:50.827] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:52:20.856] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:52:50.886] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:53:20.915] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:53:50.945] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:54:20.975] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:54:50.978] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:55:20.987] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:55:50.987] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:56:21.013] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:56:51.041] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:57:21.044] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:57:51.065] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:58:21.094] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:58:51.119] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:59:21.147] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 07:59:51.156] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:00:21.165] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:00:51.181] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:01:21.207] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:01:51.227] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:02:21.238] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:02:51.246] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:03:21.273] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:03:51.303] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:04:21.322] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:04:51.345] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:05:21.375] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:05:51.400] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:06:21.400] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:06:51.420] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:07:21.443] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:07:51.464] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:08:21.492] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:08:51.520] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:09:21.535] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:09:51.536] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:10:21.542] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:10:51.547] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:11:21.577] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:11:51.605] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:12:21.635] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:12:51.662] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:13:21.678] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:13:51.700] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:14:21.730] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:14:51.740] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:15:21.752] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:15:51.779] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:16:21.808] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:16:51.836] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:17:21.849] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:17:51.875] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:18:21.902] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:18:51.913] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:19:21.938] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:19:51.967] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:20:21.974] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:20:51.997] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:21:22.003] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:21:52.007] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:22:22.034] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:22:52.049] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:23:22.066] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:23:52.096] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:24:22.108] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:24:52.138] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:25:22.166] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:25:52.182] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:26:22.212] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:26:52.242] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:27:22.272] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:27:52.277] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:28:22.305] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:28:52.323] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:29:22.352] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:29:52.382] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:30:22.412] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:30:52.434] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:31:22.439] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:31:52.440] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:32:22.457] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:32:52.479] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:33:22.509] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:33:52.513] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:34:22.527] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:34:52.533] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:35:22.544] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:35:52.574] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:36:22.604] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:36:52.631] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:37:22.654] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:37:52.664] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:38:22.686] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:38:52.697] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:39:22.705] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:39:52.718] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:40:22.745] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:40:52.758] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:41:22.763] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:41:52.768] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:42:22.798] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:42:52.825] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:43:22.852] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:43:52.861] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:44:22.878] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:44:52.897] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:45:22.900] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:45:52.912] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:46:22.922] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:46:52.951] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:47:22.980] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:47:52.999] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:48:23.001] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:48:53.020] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:49:23.050] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:49:53.081] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:50:23.111] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:50:53.138] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:51:23.163] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:51:53.181] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:52:23.200] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:52:53.206] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:53:23.216] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:53:53.239] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:54:23.266] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:54:53.293] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:55:23.306] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:55:53.335] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:56:23.345] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:56:53.375] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:57:23.405] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:57:53.435] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:58:23.441] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:58:53.457] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:59:23.481] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 08:59:53.508] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:00:23.538] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:00:53.566] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:01:23.583] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:01:53.589] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:02:23.595] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:02:53.616] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:03:23.646] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:03:53.676] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:04:23.700] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:04:53.725] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:05:23.755] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:05:53.785] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:06:23.815] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:06:53.845] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:07:23.872] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:07:53.901] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:08:23.904] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:08:53.927] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:09:23.953] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:09:53.978] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:10:23.990] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:10:53.993] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:11:24.022] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:11:54.046] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:12:24.077] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:12:54.102] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:13:24.132] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:13:54.137] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:14:24.166] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:14:54.168] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:15:24.176] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:15:54.206] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:16:24.212] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:16:54.242] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:17:24.272] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:17:54.284] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:18:24.285] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:18:54.314] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:19:24.343] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:19:54.354] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:20:24.364] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:20:54.389] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:21:24.399] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:21:54.410] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:22:24.436] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:22:54.464] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:23:24.490] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:23:54.518] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:24:24.521] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:24:54.531] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:25:24.551] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:25:54.577] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:26:24.607] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:26:54.638] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:27:24.668] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:27:54.688] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:28:24.718] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:28:54.735] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:29:24.747] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:29:54.774] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:30:24.793] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:30:54.802] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:31:24.831] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:31:54.848] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:32:24.878] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:32:54.895] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:33:24.925] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:33:54.931] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:34:24.950] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:34:54.970] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:35:24.993] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:35:55.016] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:36:25.017] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:36:55.035] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:37:25.046] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:37:55.062] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:38:25.089] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:38:55.117] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:39:25.135] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:39:55.145] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:40:25.166] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:40:55.195] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:41:25.225] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:41:55.251] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:42:25.281] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:42:55.312] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:43:25.335] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:43:55.361] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:44:25.388] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:44:55.418] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:45:25.449] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:45:55.475] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:46:25.505] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:46:55.535] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:47:25.560] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:47:55.590] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:48:25.615] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:48:55.640] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:49:25.667] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:49:55.670] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:50:25.678] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:50:55.680] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:51:25.711] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:51:55.735] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:52:25.748] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:52:55.766] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:53:25.795] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:53:55.821] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:54:25.836] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:54:55.853] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:55:25.866] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:55:55.895] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:56:25.917] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:56:55.946] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:57:25.975] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:57:56.001] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:58:26.031] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:58:56.059] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:59:26.089] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 09:59:56.119] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:00:26.142] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:00:56.153] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:01:26.183] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:01:56.204] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:02:26.205] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:02:56.233] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:03:26.259] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:03:56.279] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:04:26.308] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:04:56.310] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:05:26.320] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:05:56.325] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:06:26.326] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:06:56.351] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:07:26.372] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:07:56.397] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:08:26.423] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:08:56.439] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:09:26.441] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:09:56.471] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:10:26.499] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:10:56.528] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:11:26.558] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:11:56.588] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:12:26.595] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:12:56.624] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:13:26.629] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:13:56.640] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:14:26.669] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:14:56.698] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:15:26.728] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:15:56.743] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:16:26.743] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:16:56.774] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:17:26.798] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:17:56.802] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:18:26.811] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:18:56.831] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:19:26.856] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:19:56.861] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:20:26.888] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:20:56.912] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:21:26.941] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:21:56.971] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:22:26.977] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:22:56.997] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:23:27.020] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:23:57.028] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:24:27.045] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:24:57.075] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:25:27.105] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:25:57.114] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:26:27.121] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:26:57.151] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:27:27.162] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:27:57.191] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:28:27.220] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:28:57.246] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:29:27.276] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:29:57.284] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:30:27.314] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:30:57.344] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:31:27.366] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:31:57.389] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:32:27.413] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:32:57.436] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:33:27.444] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:33:57.475] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:34:27.484] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:34:57.511] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:35:27.541] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:35:57.571] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:36:27.601] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:36:57.622] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:37:27.651] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:37:57.665] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:38:27.681] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:38:57.708] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:39:27.735] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:39:57.758] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:40:27.764] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:40:57.771] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:41:27.793] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:41:57.821] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:42:27.847] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:42:57.867] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:43:27.885] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:43:57.904] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:44:27.933] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:44:57.961] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:45:27.983] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:45:58.006] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:46:28.035] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:46:58.056] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:47:28.061] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:47:58.091] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:48:28.103] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:48:58.131] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:49:28.161] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:49:58.191] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:50:28.221] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:50:58.251] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:51:28.280] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:51:58.297] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:52:28.318] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:52:58.348] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:53:28.373] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:53:58.374] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:54:28.378] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:54:58.388] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:55:28.402] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:55:58.428] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:56:28.458] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:56:58.488] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:57:28.496] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:57:58.500] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:58:28.512] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:58:58.514] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:59:28.523] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 10:59:58.527] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:00:28.544] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:00:58.569] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:01:28.575] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:01:58.594] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:02:28.596] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:02:58.625] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:03:28.626] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:03:58.643] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:04:28.671] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:04:58.696] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:05:28.726] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:05:58.748] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:06:28.778] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:06:58.808] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:07:28.813] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:07:58.825] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:08:28.832] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:08:58.857] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:09:28.863] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:09:58.893] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:10:28.921] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:10:58.926] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:11:28.936] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:11:58.962] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:12:28.984] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:12:58.992] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:13:29.004] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:13:59.029] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:14:29.058] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:14:59.076] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:15:29.097] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:15:59.104] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:16:29.117] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:16:59.118] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:17:29.143] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:17:59.153] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:18:29.155] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:18:59.162] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:19:29.169] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:19:59.170] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:20:29.177] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:20:59.188] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:21:29.216] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:21:59.238] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:22:29.257] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:22:59.287] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:23:29.315] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:23:59.325] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:24:29.353] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:24:59.381] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:25:29.405] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:25:59.434] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:26:29.464] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:26:59.471] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:27:29.481] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:27:59.511] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:28:29.534] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:28:59.561] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:29:29.589] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:29:59.612] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:30:29.635] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:30:59.662] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:31:29.671] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:31:59.689] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:32:29.695] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:32:59.724] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:33:29.746] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:33:59.752] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:34:29.771] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:34:59.801] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:35:29.831] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:35:59.858] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:36:29.867] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:36:59.868] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:37:29.888] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:37:59.913] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:38:29.940] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:38:59.967] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:39:29.984] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:40:00.015] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:40:30.044] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:41:00.074] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:41:30.104] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:42:00.134] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:42:30.158] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:43:00.174] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:43:30.204] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:44:00.208] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:44:30.227] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:45:00.237] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:45:30.242] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:46:00.266] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:46:30.289] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:47:00.292] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:47:30.309] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:48:00.334] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:48:30.352] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:49:00.378] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:49:30.407] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:50:00.410] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:50:30.437] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:51:00.465] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:51:30.494] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:52:00.522] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:52:30.553] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:53:00.582] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:53:30.590] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:54:00.605] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:54:30.622] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:55:00.651] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:55:30.681] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:56:00.711] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:56:30.741] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:57:00.755] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:57:30.784] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:58:00.785] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:58:30.799] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:59:00.819] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 11:59:30.847] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:00:00.864] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:00:30.883] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:01:00.898] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:01:30.923] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:02:00.928] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:02:30.957] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:03:00.986] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:03:31.004] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:04:01.005] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:04:31.024] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:05:01.032] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:05:31.061] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:06:01.061] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:06:31.067] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:07:01.097] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:07:31.128] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:08:01.157] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:08:31.180] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:09:01.207] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:09:31.210] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:10:01.214] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:10:31.244] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:11:01.274] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:11:31.304] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:12:01.314] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:12:31.327] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:13:01.357] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:13:31.367] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:14:01.387] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:14:31.407] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:15:01.437] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:15:31.447] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:16:01.476] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:16:31.502] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:17:01.528] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:17:31.543] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:18:01.571] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:18:31.583] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:19:01.604] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:19:31.634] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:20:01.637] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:20:31.643] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:21:01.673] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:21:31.703] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:22:01.717] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:22:31.722] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:23:01.749] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:23:31.778] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:24:01.796] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:24:31.825] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:25:01.841] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:25:31.860] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:26:01.891] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:26:31.899] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:27:01.926] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:27:31.948] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:28:01.976] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:28:32.004] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:29:02.034] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:29:32.035] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:30:02.062] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:30:32.086] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:31:02.109] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:31:32.129] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:32:02.148] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:32:32.156] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:33:02.186] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:33:32.200] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:34:02.219] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:34:32.249] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:35:02.263] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:35:32.284] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:36:02.314] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:36:32.344] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:37:02.375] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:37:32.404] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:38:02.434] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:38:32.464] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:39:02.484] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:39:32.485] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:40:02.510] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:40:32.530] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:41:02.549] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:41:32.579] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:42:02.609] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:42:32.637] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:43:02.666] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:43:32.686] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:44:02.694] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:44:32.704] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:45:02.734] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:45:32.762] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:46:02.790] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:46:32.796] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:47:02.799] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:47:32.827] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:48:02.849] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:48:32.850] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:49:02.869] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:49:32.895] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:50:02.923] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:50:32.933] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:51:02.941] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:51:32.971] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:52:02.976] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:52:32.989] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:53:02.999] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:53:33.028] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:54:03.035] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:54:33.065] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:55:03.091] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:55:33.109] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:56:03.137] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:56:33.149] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:57:03.178] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:57:33.192] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:58:03.201] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:58:33.214] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:59:03.238] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 12:59:33.267] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:00:03.297] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:00:33.327] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:01:03.355] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:01:33.356] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:02:03.377] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:02:33.390] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:03:03.409] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:03:33.416] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:04:03.439] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:04:33.467] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:05:03.478] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:05:33.502] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:06:03.514] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:06:33.523] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:07:03.543] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:07:33.559] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:08:03.560] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:08:33.566] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:09:03.594] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:09:33.624] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:10:03.653] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:10:33.680] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:11:03.707] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:11:33.731] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:12:03.757] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:12:33.778] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:13:03.807] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:13:33.835] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:14:03.865] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:14:33.893] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:15:03.923] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:15:33.950] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:16:03.974] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:16:34.000] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:17:04.030] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:17:34.056] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:18:04.083] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:18:34.091] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:19:04.120] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:19:34.150] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:20:04.180] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:20:34.205] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:21:04.229] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:21:34.256] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:22:04.287] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:22:34.296] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:23:04.323] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:23:34.331] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:24:04.349] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:24:34.375] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:25:04.405] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:25:34.409] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:26:04.435] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:26:34.462] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:27:04.490] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:27:34.507] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:28:04.519] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:28:34.535] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:29:04.561] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:29:34.586] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:30:04.596] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:30:34.611] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:31:04.640] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:31:34.670] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:32:04.672] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:32:34.679] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:33:04.697] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:33:34.708] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:34:04.720] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:34:34.728] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:35:04.736] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:35:34.744] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:36:04.754] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:36:34.781] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:37:04.812] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:37:34.820] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:38:04.842] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:38:34.871] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:39:04.882] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:39:34.885] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:40:04.901] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:40:34.927] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:41:04.958] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:41:34.970] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:42:04.980] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:42:35.009] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:43:05.010] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:43:35.020] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:44:05.050] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:44:35.075] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:45:05.105] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:45:35.111] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:46:05.123] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:46:35.141] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:47:05.167] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:47:35.174] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:48:05.205] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:48:35.227] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:49:05.254] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:49:35.259] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:50:05.286] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:50:35.287] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:51:05.298] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:51:35.328] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:52:05.357] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:52:35.383] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:53:05.413] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:53:35.443] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:54:05.457] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:54:35.485] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:55:05.509] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:55:35.526] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:56:05.549] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:56:35.577] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:57:05.583] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:57:35.606] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:58:05.626] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:58:35.648] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:59:05.675] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 13:59:35.677] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:00:05.688] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:00:35.709] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:01:05.730] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:01:35.739] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:02:05.744] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:02:35.746] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:03:05.774] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:03:35.799] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:04:05.820] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:04:35.850] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:05:05.858] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:05:35.873] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:06:05.888] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:06:35.916] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:07:05.939] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:07:35.970] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:08:05.997] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:08:36.019] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:09:06.049] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:09:36.074] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:10:06.085] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:10:36.113] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:11:06.114] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:11:36.142] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:12:06.154] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:12:36.172] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:13:06.200] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:13:36.230] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:14:06.260] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:14:36.290] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:15:06.320] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:15:36.350] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:16:06.355] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:16:36.385] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:17:06.399] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:17:36.427] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:18:06.452] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:18:36.481] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:19:06.484] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:19:36.491] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:20:06.499] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:20:36.520] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:21:06.535] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:21:36.563] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:22:06.593] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:22:36.623] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:23:06.653] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:23:36.669] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:24:06.699] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:24:36.708] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:25:06.733] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:25:36.738] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:26:06.767] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:26:36.792] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:27:06.819] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:27:36.824] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:28:06.826] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:28:36.854] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:29:06.881] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:29:36.911] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:30:06.926] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:30:36.957] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:31:06.978] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:31:37.004] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:32:07.028] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:32:37.058] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:33:07.081] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:33:37.102] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:34:07.125] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:34:37.151] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:35:07.152] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:35:37.166] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:36:07.190] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:36:37.219] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:37:07.240] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:37:37.264] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:38:07.266] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:38:37.295] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:39:07.305] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:39:37.323] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:40:07.352] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:40:37.353] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:41:07.354] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:41:37.368] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:42:07.373] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:42:37.398] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:43:07.424] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:43:37.453] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:44:07.480] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:44:37.483] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:45:07.510] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:45:37.520] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:46:07.550] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:46:37.574] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:47:07.598] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:47:37.626] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:48:07.656] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:48:37.674] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:49:07.696] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:49:37.720] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:50:07.729] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:50:37.760] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:51:07.790] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:51:37.797] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:52:07.802] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:52:37.820] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:53:07.845] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:53:37.863] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:54:07.869] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:54:37.874] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:55:07.904] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:55:37.922] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:56:07.935] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:56:37.955] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:57:07.969] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:57:37.996] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:58:08.027] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:58:38.053] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:59:08.076] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 14:59:38.078] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:00:08.109] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:00:38.131] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:01:08.160] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:01:38.185] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:02:08.198] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:02:38.208] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:03:08.238] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:03:38.241] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:04:08.256] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:04:38.284] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:05:08.313] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:05:38.338] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:06:08.347] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:06:38.377] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:07:08.383] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:07:38.412] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:08:08.419] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:08:38.427] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:09:08.442] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:09:38.464] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:10:08.491] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:10:38.514] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:11:08.543] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:11:38.572] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:12:08.600] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:12:38.622] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:13:08.633] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:13:38.642] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:14:08.664] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:14:38.689] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:15:08.716] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:15:38.734] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:16:08.765] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:16:38.768] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:17:08.796] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:17:38.826] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:18:08.850] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:18:38.859] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:19:08.883] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:19:38.903] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:20:08.921] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:20:38.936] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:21:08.963] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:21:38.966] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:22:08.993] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:22:38.999] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:23:09.001] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:23:39.024] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:24:09.049] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:24:39.079] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:25:09.105] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:25:39.135] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:26:09.153] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:26:39.158] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:27:09.186] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:27:39.213] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:28:09.243] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:28:39.273] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:29:09.287] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:29:39.316] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:30:09.327] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:30:39.356] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:31:09.386] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:31:39.416] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:32:09.442] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:32:39.464] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:33:09.488] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:33:39.519] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:34:09.546] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:34:39.569] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:35:09.594] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:35:39.619] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:36:09.645] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:36:39.650] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:37:09.663] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:37:39.692] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:38:09.722] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:38:39.753] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:39:09.753] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:39:39.780] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:40:09.810] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:40:39.840] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:41:09.850] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:41:39.879] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:42:09.884] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:42:39.914] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:43:09.943] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:43:39.969] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:44:09.993] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:44:40.023] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:45:10.053] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:45:40.083] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:46:10.113] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:46:40.142] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:47:10.172] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:47:40.175] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:48:10.203] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:48:40.232] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:49:10.259] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:49:40.289] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:50:10.290] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:50:40.320] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:51:10.350] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:51:40.379] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:52:10.409] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:52:40.413] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:53:10.438] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:53:40.466] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:54:10.485] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:54:40.505] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:55:10.535] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:55:40.544] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:56:10.560] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:56:40.590] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:57:10.619] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:57:40.644] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:58:10.673] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:58:40.695] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:59:10.723] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 15:59:40.753] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:00:10.779] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:00:40.809] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:01:10.839] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:01:40.867] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:02:10.892] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:02:40.922] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:03:10.949] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:03:40.979] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:04:11.005] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:04:41.018] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:05:11.046] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:05:41.076] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:06:11.105] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:06:41.128] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:07:11.156] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:07:41.175] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:08:11.198] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:08:41.223] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:09:11.249] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:09:41.277] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:10:11.302] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:10:41.332] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:11:11.361] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:11:41.364] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:12:11.390] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:12:41.419] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:13:11.423] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:13:41.449] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:14:11.476] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:14:41.505] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:15:11.532] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:15:41.562] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:16:11.586] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:16:41.605] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:17:11.632] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:17:41.662] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:18:11.678] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:18:41.696] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:19:11.726] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:19:41.756] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:20:11.786] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:20:41.816] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:21:11.830] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:21:41.861] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:22:11.865] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:22:41.895] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:23:11.922] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:23:41.953] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:24:11.980] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:24:42.009] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:25:12.027] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:25:42.056] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:26:12.086] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:26:42.114] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:27:12.143] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:27:42.172] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:28:27.959] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:28:57.977] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:29:41.735] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:30:11.750] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:30:41.758] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:31:11.786] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:31:41.803] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:32:11.819] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:32:41.824] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:33:11.851] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:33:41.874] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:34:11.879] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:34:41.880] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:35:11.908] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:35:41.920] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:36:11.928] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:36:41.957] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:37:11.982] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:37:41.994] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:38:11.999] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:38:42.029] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:39:12.041] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:39:42.052] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:40:12.054] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:40:42.083] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:41:12.099] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:41:42.104] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:42:12.104] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:42:42.110] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:43:12.118] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:43:42.119] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:44:12.145] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:44:42.166] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:45:12.169] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:45:42.170] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:46:12.171] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:46:42.181] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:47:12.190] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:47:42.197] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:48:12.220] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:48:42.233] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:49:12.238] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:49:42.253] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:50:12.276] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 16:50:42.287] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:51:12.289] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:51:42.319] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:52:12.324] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:52:42.331] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:53:12.362] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:53:42.387] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:54:12.392] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:54:42.396] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:55:12.424] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:55:42.434] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:56:12.442] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:56:42.443] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:57:12.473] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:57:42.486] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:58:12.494] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:58:42.516] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:59:12.529] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 16:59:42.542] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:00:12.543] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:00:42.561] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:01:12.582] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:01:42.592] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:02:12.594] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:02:42.604] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:03:12.608] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:03:42.616] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:04:12.626] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:04:42.653] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:05:12.668] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:05:42.672] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:06:12.680] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:06:42.690] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:07:12.698] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:07:42.699] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:08:12.729] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:08:42.748] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:09:12.750] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:09:42.778] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:10:12.779] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:10:42.790] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:11:12.792] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:11:42.819] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:12:12.819] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:12:42.830] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:13:12.830] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:13:42.838] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:14:12.856] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:14:42.858] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:15:12.864] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:15:42.878] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:16:12.893] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:16:42.897] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:17:12.928] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:17:42.949] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:18:12.953] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:18:42.953] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:19:12.982] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:19:43.002] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:20:13.011] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:20:43.019] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:21:13.045] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:21:43.050] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:22:13.052] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:22:43.082] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:23:13.105] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:23:43.114] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:24:13.115] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:24:43.129] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:25:13.137] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:25:43.143] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:26:13.170] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:26:43.197] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:27:13.210] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:27:43.211] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:28:13.238] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:28:43.259] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:29:13.271] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:29:43.273] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:30:13.301] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:30:43.320] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:31:13.329] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:31:43.355] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:32:13.372] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:32:43.388] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:33:13.390] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:33:43.421] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:34:13.443] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:34:43.455] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:35:13.462] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:35:43.492] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:36:13.508] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:36:43.518] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:37:13.548] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:37:43.574] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:38:13.578] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:38:43.582] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:39:13.603] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:39:43.624] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:40:13.634] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:40:43.636] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:41:13.656] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:41:43.669] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:42:13.677] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:42:43.703] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:43:13.730] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:43:43.741] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:44:13.742] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:44:43.749] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:45:13.772] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:45:43.778] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:46:13.780] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:46:43.800] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:47:13.819] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:47:43.828] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:48:13.850] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:48:43.878] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:49:13.879] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:49:43.884] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:50:13.884] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:50:43.905] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:51:13.916] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:51:43.918] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:52:13.935] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:52:43.952] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:53:13.960] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:53:43.989] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:54:14.010] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:54:44.020] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:55:14.025] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:55:44.037] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:56:14.059] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:56:44.061] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:57:14.062] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:57:44.089] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 17:58:14.102] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:58:44.109] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:59:14.109] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 17:59:44.122] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:00:14.135] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:00:44.141] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:01:14.162] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:01:44.185] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:02:14.188] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:02:44.190] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:03:14.191] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:03:44.192] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:04:14.200] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:04:44.210] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:05:14.237] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:05:44.239] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:06:14.242] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:06:44.272] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 18:07:14.273] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:07:44.285] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:08:14.287] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:08:44.315] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:09:14.333] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:09:44.338] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:10:14.348] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:10:44.360] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:11:14.375] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:11:44.380] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:12:14.407] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:12:44.429] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:13:14.436] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:13:44.438] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:14:14.456] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:14:44.475] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:15:14.480] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:15:44.495] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:16:14.514] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:16:44.520] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:17:14.525] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:17:44.555] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:18:14.579] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:18:44.580] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:19:14.582] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:19:44.607] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:20:14.623] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:20:44.630] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:21:14.660] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:21:44.661] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:22:14.675] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:22:44.681] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:23:14.708] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:23:44.716] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:24:14.729] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:24:44.731] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:25:14.755] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:25:44.772] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:26:14.778] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:26:44.808] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:27:14.836] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:27:44.852] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:28:14.857] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:28:44.885] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:29:14.899] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:29:44.905] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:30:14.906] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:30:44.926] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:31:14.945] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:31:44.953] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:32:14.954] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:32:44.956] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:33:14.961] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:33:44.965] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:34:14.991] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:34:45.005] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:35:15.015] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:35:45.017] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:36:15.045] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:36:45.049] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:37:15.057] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:37:45.075] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:38:15.079] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:38:45.095] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:39:15.097] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:39:45.125] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:40:15.148] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:40:45.158] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:41:15.160] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:41:45.188] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:42:15.192] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:42:45.196] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:43:15.218] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:43:45.245] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:44:15.258] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:44:45.260] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:45:15.290] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:45:45.298] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:46:15.307] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:46:45.308] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:47:15.329] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:47:45.336] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:48:15.340] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:48:45.364] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:49:15.385] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:49:45.387] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:50:15.390] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:50:45.406] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:51:15.428] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:51:45.436] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:52:15.437] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:52:45.440] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:53:15.454] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:53:45.463] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:54:15.490] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:54:45.515] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:55:15.522] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:55:45.525] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:56:15.535] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:56:45.558] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:57:15.571] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:57:45.574] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:58:15.594] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:58:45.615] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:59:15.622] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 18:59:45.624] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:00:15.652] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:00:45.654] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:01:15.658] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:01:45.672] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:02:15.694] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:02:45.702] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:03:15.704] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:03:45.724] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:04:15.739] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:04:45.742] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:05:15.773] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:05:45.773] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:06:15.789] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:06:45.794] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:07:15.822] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:07:45.845] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:08:15.851] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:08:45.853] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:09:15.879] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:09:45.890] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:10:15.899] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:10:45.929] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:11:15.955] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:11:45.971] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:12:15.978] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:12:46.003] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:13:16.025] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:13:46.038] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:14:16.041] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:14:46.064] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:15:16.081] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:15:46.088] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:16:16.114] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:16:46.139] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:17:16.155] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:17:46.157] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:18:16.180] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:18:46.193] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:19:16.206] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:19:46.207] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:20:16.225] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:20:46.245] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:21:16.251] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:21:46.280] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:22:16.289] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:22:46.295] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:23:16.300] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:23:46.321] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:24:16.331] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:24:46.345] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:25:16.347] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:25:46.369] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:26:16.390] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:26:46.398] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:27:16.421] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:27:46.447] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:28:16.460] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:28:46.465] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:29:16.496] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:29:46.515] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:30:16.525] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:30:46.525] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:31:16.549] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:31:46.550] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:32:16.559] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:32:46.560] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:33:16.575] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:33:46.591] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:34:16.597] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:34:46.602] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:35:16.612] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:35:46.625] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:36:16.628] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:36:46.644] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:37:16.665] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:37:46.671] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:38:16.678] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:38:46.700] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:39:16.716] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:39:46.721] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:40:16.749] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:40:46.757] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:41:16.764] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:41:46.766] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:42:16.783] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:42:46.801] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:43:16.808] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:43:46.838] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:44:16.866] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:44:46.882] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:45:16.884] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:45:46.911] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:46:16.935] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:46:46.944] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:47:16.947] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:47:46.972] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:48:16.992] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:48:47.001] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:49:17.028] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:49:47.054] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:50:17.063] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:50:47.068] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:51:17.098] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:51:47.106] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:52:17.115] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:52:47.116] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:53:17.128] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:53:47.133] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:54:17.136] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:54:47.158] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:55:17.187] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:55:47.188] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:56:17.195] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:56:47.210] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:57:17.230] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:57:47.242] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:58:17.245] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:58:47.274] [INFO] activeusers - LinuxRocker Active Users: 3 +[2017-03-22 19:59:17.280] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 19:59:47.288] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:00:17.318] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:00:47.337] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:01:17.354] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:01:47.361] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:02:17.387] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:02:47.398] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:03:17.412] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:03:47.415] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:04:17.441] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:04:47.463] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:05:17.474] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:05:47.493] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:06:17.517] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:06:47.533] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:07:17.533] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:07:47.556] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:08:17.577] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:08:47.586] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:09:17.588] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:09:47.592] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:10:17.608] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:10:47.611] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:11:17.639] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:11:47.661] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:12:17.678] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:12:47.684] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:13:17.705] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:13:47.729] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:14:17.740] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:14:47.741] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:15:17.755] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:15:47.774] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:16:17.785] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:16:47.815] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:17:17.841] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:17:47.858] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:18:17.864] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:18:47.894] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:19:17.910] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:19:47.911] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:20:17.911] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:20:47.941] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:21:17.957] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:21:47.961] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:22:17.985] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:22:48.003] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:23:18.021] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:23:48.025] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:24:18.055] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:24:48.081] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:25:18.094] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:25:48.097] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:26:18.125] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:26:48.135] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:27:18.146] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:27:48.172] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:28:18.201] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:28:48.218] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:29:18.224] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:29:48.234] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:30:18.249] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:30:48.260] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:31:18.261] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:31:48.291] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:32:18.311] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:32:48.321] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:33:18.348] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:33:48.373] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:34:18.391] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:34:48.398] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:35:18.419] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:35:48.441] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:36:18.447] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:36:48.448] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:37:18.455] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:37:48.477] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:38:18.488] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:38:48.515] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:39:18.544] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:39:48.563] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:40:18.568] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:40:48.571] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:41:18.584] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:41:48.587] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:42:18.589] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:42:48.618] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:43:18.635] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:43:48.641] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:44:18.672] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:45:12.963] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:45:42.983] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:46:12.988] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:46:43.018] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:47:13.044] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:47:43.046] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:48:13.048] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:48:43.078] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:49:43.772] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:50:13.791] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:50:43.799] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:51:13.825] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:51:43.853] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:52:13.859] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:52:43.863] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:53:13.871] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:53:43.894] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:54:13.908] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:56:26.492] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:56:56.511] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:58:08.748] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:58:38.764] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:59:08.772] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 20:59:38.801] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:00:08.801] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:00:38.814] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:01:08.818] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:01:38.847] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:02:08.860] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:02:38.872] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:03:08.873] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:03:38.901] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:04:08.913] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:04:38.921] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:05:08.951] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:05:38.975] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:06:08.989] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:06:38.993] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:07:09.018] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:07:39.041] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:08:09.041] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:08:39.042] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:09:09.049] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:09:39.067] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:10:09.074] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:10:39.101] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:11:09.127] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:11:39.144] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:12:09.148] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:12:39.174] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:13:09.189] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:13:39.193] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:14:09.194] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:14:39.200] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:15:09.217] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:15:39.224] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:16:09.246] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:16:39.270] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:17:09.284] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:17:39.289] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:18:09.290] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:18:39.310] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:19:09.316] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:19:39.316] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:20:09.346] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:20:39.364] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:21:09.371] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:21:39.401] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:22:09.421] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:22:39.434] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:23:09.437] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:23:39.441] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:24:09.464] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:24:39.474] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:25:09.475] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:25:39.492] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:26:09.511] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:26:39.519] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:27:09.541] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:27:39.541] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:28:09.541] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:28:39.542] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:29:09.572] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:29:39.594] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:30:09.594] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:30:39.596] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:31:09.624] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:31:39.626] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:32:09.634] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:32:39.637] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:33:09.661] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:33:39.674] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:34:09.678] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:34:39.709] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:35:09.727] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:35:39.732] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:36:09.732] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:36:39.734] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:37:09.751] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:37:39.757] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:38:09.786] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:38:39.812] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:39:09.814] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:39:39.818] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:40:09.847] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:40:39.871] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:41:09.874] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:41:39.875] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:42:09.889] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:42:39.907] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:43:09.914] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:43:39.930] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:44:09.953] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:44:39.967] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:45:09.971] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:45:40.001] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:46:10.019] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:46:40.023] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:47:10.023] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:47:40.051] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:48:10.067] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:48:40.071] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:49:10.080] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:49:40.089] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:50:10.104] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:50:40.107] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:51:10.134] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:51:40.154] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:52:10.163] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:52:40.163] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:53:10.190] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:53:40.202] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:54:10.211] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:54:40.241] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:55:10.267] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:55:40.281] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:56:10.281] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:56:40.305] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:57:10.318] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:57:40.320] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:58:08.781] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:58:10.322] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:58:38.799] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:58:40.323] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:59:08.804] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 21:59:39.563] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 22:00:09.581] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 22:00:39.589] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 22:01:09.615] [INFO] activeusers - LinuxRocker Active Users: 4 +[2017-03-22 22:01:45.240] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:02:15.242] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:02:45.244] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:03:22.822] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:03:56.955] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:04:26.957] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:05:46.166] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:06:16.166] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:06:46.167] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:07:18.437] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:07:48.439] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:08:18.441] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:08:48.448] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:09:18.450] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:09:48.451] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:11:15.446] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:12:34.740] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:13:04.753] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:13:34.755] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:14:04.757] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:14:34.758] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:15:04.758] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:15:34.759] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:16:13.231] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:16:43.234] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:17:13.237] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:17:43.237] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:18:13.238] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:18:43.238] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:19:13.239] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:19:50.068] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:20:20.070] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:20:50.070] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:21:20.074] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:22:04.151] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:22:34.155] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:23:04.158] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:23:34.164] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:24:04.167] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:24:34.172] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:25:04.172] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:25:44.800] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:26:14.802] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:27:05.651] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:27:35.652] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:28:05.654] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:29:26.104] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:29:56.117] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:30:26.118] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:30:56.138] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:31:26.139] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:31:56.140] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:32:26.141] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:32:56.144] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:33:26.145] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:33:56.146] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:34:26.146] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:34:56.176] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:36:01.972] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:36:31.974] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:37:01.974] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:39:04.579] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:39:34.585] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:40:04.585] [INFO] activeusers - LinuxRocker Active Users: 0 +[2017-03-22 22:41:15.527] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:41:45.536] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:42:15.543] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:42:45.546] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 22:43:15.548] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:43:45.549] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 22:44:15.549] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 22:44:45.557] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 22:45:15.563] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:45:45.574] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:46:15.576] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:46:45.576] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:47:15.579] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 22:47:45.581] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:48:15.598] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:48:45.608] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:49:15.610] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:49:45.612] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:50:15.634] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:50:45.636] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:51:15.637] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:51:45.639] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:52:15.639] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 22:52:45.640] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 22:53:15.648] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:53:45.651] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 22:54:15.652] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:54:45.654] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 22:55:15.658] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 22:55:45.664] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 22:56:15.672] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 22:56:45.674] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 22:57:15.675] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 22:57:45.675] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 22:58:15.681] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 22:58:45.687] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 22:59:15.689] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 22:59:45.693] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 23:00:15.696] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-22 23:00:45.697] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 23:01:15.699] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:01:45.700] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:02:15.704] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:02:45.704] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:03:15.706] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 23:03:45.707] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 23:04:15.710] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 23:04:45.712] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 23:05:15.716] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 23:05:45.719] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:06:15.723] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:06:45.726] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:07:15.727] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:07:45.736] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:08:15.736] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:08:45.758] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:09:15.769] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:09:45.774] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 23:11:15.414] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:11:45.417] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-22 23:12:15.420] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:12:45.424] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:13:37.246] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:14:07.248] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:14:37.250] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:15:07.254] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:15:37.255] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:16:07.256] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:16:37.258] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:17:07.260] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-22 23:17:37.264] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-22 23:18:07.265] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-22 23:18:37.266] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-22 23:19:07.268] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:19:37.269] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:20:07.277] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:20:37.279] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:21:43.509] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:22:13.512] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:22:43.512] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:23:13.514] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:23:43.515] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:24:13.517] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:24:43.521] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:25:28.939] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:25:58.942] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:26:28.945] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:26:58.948] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:27:28.950] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:27:58.952] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:28:28.955] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:28:58.957] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:29:28.957] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:30:17.489] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:30:47.497] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:31:25.468] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:31:55.472] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:32:25.473] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:32:55.474] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:33:25.476] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:33:55.477] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:34:25.479] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:34:55.480] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:35:25.481] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:35:55.484] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:36:25.487] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:36:55.489] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:37:25.489] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-22 23:37:55.490] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:38:56.229] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:39:26.233] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:39:56.234] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:40:26.234] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:40:56.236] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:41:26.238] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:41:56.241] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:42:26.243] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:42:56.245] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:43:26.247] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:43:56.247] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:44:26.250] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:44:56.251] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:45:26.257] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:45:56.265] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:46:26.267] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:46:56.270] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:47:26.271] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:47:56.271] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:48:26.277] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-22 23:49:21.846] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:49:51.850] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:50:21.850] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-22 23:50:53.600] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:51:56.000] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:52:26.004] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-22 23:52:56.004] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:53:26.005] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:53:56.006] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:54:26.006] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:54:56.008] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:55:26.009] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:55:56.013] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:56:26.013] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:56:56.014] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:58:24.003] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-22 23:58:54.017] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-22 23:59:24.019] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-22 23:59:54.023] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:00:24.027] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:00:54.028] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 00:01:24.029] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 00:01:54.030] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:02:24.037] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:02:54.043] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:03:54.800] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:04:24.804] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:04:54.807] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:05:24.824] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 00:05:54.825] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 00:06:24.830] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 00:06:54.832] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:07:24.837] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:07:54.838] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:08:24.844] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:08:54.846] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:09:24.858] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:09:54.863] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:10:24.866] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:10:54.868] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:11:24.873] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:11:54.889] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:12:24.893] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:12:54.896] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:13:24.916] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:13:54.922] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:14:24.922] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:14:54.930] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:15:24.931] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:15:54.931] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:16:24.933] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:16:54.935] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:17:24.937] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:17:54.940] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:18:24.946] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 00:18:54.948] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:19:24.953] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:19:54.954] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:20:24.956] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:20:54.958] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:21:24.958] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:21:54.962] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:22:24.963] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:22:54.966] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:23:24.967] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:23:54.970] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:24:24.973] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:24:54.975] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:25:24.975] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:25:54.980] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:26:24.980] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:26:54.981] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:27:24.982] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:27:54.989] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:28:24.990] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:28:54.990] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:29:24.993] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:29:54.996] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 00:30:24.997] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 00:30:54.997] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:31:24.997] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 00:31:55.000] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:32:25.000] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 00:32:55.003] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:33:25.004] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:33:55.008] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:34:25.013] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:34:55.016] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:35:25.023] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:35:55.034] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:36:25.035] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:36:55.043] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 00:37:25.046] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:37:55.053] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 00:38:25.056] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:38:55.057] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:39:25.060] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:39:55.061] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 00:40:25.064] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:40:55.065] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:41:25.073] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:41:55.073] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 00:42:25.081] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:42:55.083] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:43:25.091] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 00:43:55.097] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 00:44:25.116] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 00:44:55.118] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 00:45:25.121] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 00:45:55.125] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 00:46:25.138] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:46:55.139] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:47:25.141] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:47:55.142] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:48:25.142] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:48:55.145] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:49:25.146] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:49:55.147] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:50:25.149] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 00:50:55.150] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:51:25.152] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:51:55.154] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 00:52:25.159] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:52:55.159] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 00:53:25.160] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 00:53:55.160] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:54:25.162] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 00:54:55.162] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 00:55:25.166] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 00:55:55.167] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:56:25.170] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:56:55.171] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:57:25.171] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:57:55.172] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 00:58:25.172] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:58:55.172] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 00:59:25.176] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 00:59:55.178] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:00:25.179] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:00:55.180] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:01:25.181] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:01:55.183] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:02:25.184] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:02:55.186] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:03:25.190] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:03:54.892] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:03:55.191] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:04:24.894] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:04:25.192] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:04:54.895] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:04:55.193] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:05:24.895] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:05:25.193] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:05:54.896] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:05:55.194] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:06:24.898] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:06:25.194] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:06:54.902] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:06:55.196] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:07:24.902] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:07:25.197] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:07:54.904] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:07:55.197] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:08:24.905] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:08:25.199] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:08:54.905] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:08:55.199] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:09:24.905] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:09:25.200] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:09:54.906] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:09:55.202] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:10:24.906] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:10:25.202] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:10:54.907] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:10:55.203] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:11:24.909] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:11:25.203] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:11:54.910] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:11:55.203] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:12:24.913] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:12:25.203] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:12:54.914] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:12:55.203] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:13:24.918] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:13:25.203] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:13:54.919] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:13:55.204] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:14:24.919] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:14:25.205] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:14:54.922] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:14:55.207] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:15:24.925] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:15:25.208] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:15:54.932] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:15:55.208] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:16:24.933] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:16:25.209] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 01:16:54.935] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:16:55.210] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:17:24.938] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:17:25.211] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:17:54.941] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:17:55.212] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:18:24.943] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:18:25.213] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:18:54.944] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:18:55.213] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:19:24.948] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:19:25.215] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:19:54.948] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:19:55.217] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:20:24.950] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:20:25.217] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:20:54.951] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:20:55.218] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:21:24.953] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:21:25.219] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:21:54.953] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:21:55.220] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:22:24.955] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:22:25.221] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:22:54.957] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:22:55.222] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:23:24.960] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:23:25.222] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:23:54.963] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:23:55.223] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:24:24.963] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:24:25.224] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:24:54.966] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:24:55.225] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:25:24.966] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:25:25.226] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:25:54.970] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:25:55.226] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:26:24.975] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:26:25.227] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:26:54.978] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:26:55.228] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:27:24.978] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:27:25.228] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:27:54.979] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:27:55.229] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:28:24.980] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:28:25.230] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:28:54.982] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:28:55.230] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:29:24.983] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:29:25.231] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:29:54.990] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:29:55.232] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:30:24.990] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:30:25.232] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:30:54.991] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:30:55.232] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:31:24.993] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:31:25.233] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:31:54.995] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:31:55.234] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:32:24.999] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:32:25.234] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:32:55.000] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:32:55.234] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:33:25.001] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:33:25.235] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:33:55.002] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:33:55.236] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:34:25.002] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:34:25.237] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:34:55.005] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:34:55.238] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:35:25.006] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:35:25.238] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:35:55.007] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:35:55.239] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 01:36:25.008] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:36:25.241] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 01:36:55.009] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:36:55.241] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:37:25.012] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:37:25.241] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:37:55.017] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:37:55.242] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:38:25.017] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:38:25.243] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:38:55.023] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:38:55.244] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:39:25.025] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:39:25.245] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:39:55.027] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:39:55.247] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 01:40:25.028] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:40:25.247] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:40:55.029] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:40:55.249] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:41:25.036] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:41:25.249] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 01:41:55.037] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:41:55.249] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:42:25.040] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:42:25.251] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:42:55.044] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:42:55.251] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:43:25.046] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:43:25.252] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:43:55.047] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:43:55.253] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:44:25.048] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:44:25.254] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:44:55.049] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:44:55.254] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:45:25.051] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:45:25.254] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:45:55.052] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:45:55.255] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:46:25.052] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:46:25.256] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:46:55.053] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:46:55.256] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:47:25.053] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:47:25.257] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:47:55.054] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:47:55.257] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:48:25.056] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:48:25.259] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:48:55.057] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:48:55.259] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:49:25.059] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:49:25.260] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:49:55.059] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:49:55.261] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:50:25.061] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:50:25.262] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:50:55.063] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:50:55.262] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:51:25.066] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:51:25.262] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:51:55.067] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:51:55.264] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:52:25.075] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:52:25.264] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:52:55.075] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:52:55.265] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:53:25.080] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:53:25.266] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:53:55.082] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:53:55.267] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:54:25.083] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:54:25.268] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:54:55.084] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:54:55.269] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:55:25.085] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:55:25.270] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:55:55.088] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:55:55.271] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:56:25.089] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:56:25.273] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:56:55.090] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:56:55.273] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:57:25.091] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:57:25.274] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 01:57:55.093] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:57:55.275] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:58:25.094] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:58:25.276] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:58:55.095] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:58:55.277] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 01:59:25.099] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:59:25.277] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:59:55.099] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 01:59:55.278] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:00:25.101] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:00:25.279] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:00:55.102] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:00:55.279] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:01:25.109] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:01:25.280] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:01:55.110] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:01:55.280] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:02:25.110] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:02:25.281] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:02:55.112] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:02:55.282] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:03:25.114] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:03:25.284] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:03:54.809] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:03:55.115] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:03:55.284] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:04:24.811] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:04:25.115] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:04:25.285] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:04:54.814] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:04:55.117] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:04:55.285] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:05:24.814] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:05:25.118] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:05:25.286] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:05:54.815] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 02:05:55.120] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 02:05:55.286] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 02:06:24.820] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 02:06:25.120] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 02:06:25.287] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 02:06:54.824] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:06:55.121] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:06:55.287] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:07:24.826] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:07:25.122] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:07:25.288] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:07:54.826] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:07:55.124] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:07:55.288] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:08:24.827] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:08:25.125] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:08:25.289] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:08:54.827] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:08:55.126] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:08:55.290] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:09:24.833] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:09:25.126] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:09:25.291] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:09:54.835] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:09:55.127] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:09:55.292] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:10:24.840] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:10:25.129] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:10:25.292] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:10:54.841] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:10:55.130] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:10:55.293] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:11:24.843] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:11:25.130] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:11:25.294] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:12:10.013] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:12:40.017] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:13:10.019] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:13:40.023] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:14:10.025] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:14:40.028] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:15:10.031] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:15:40.037] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:16:10.046] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:16:40.048] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:17:10.049] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:18:05.474] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:18:35.478] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:19:05.481] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:19:35.488] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:20:05.490] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:20:35.495] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:21:05.499] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:21:35.499] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:22:05.503] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:22:35.509] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:23:05.512] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:23:35.518] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:24:05.519] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:24:35.524] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 02:25:05.528] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:25:35.532] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:26:05.534] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:26:35.534] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:27:05.534] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:27:35.536] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:28:05.539] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:28:35.544] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:29:05.547] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:29:35.551] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:30:05.556] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 02:30:35.559] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:31:05.559] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:31:35.572] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:32:05.576] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:32:35.607] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:33:05.608] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:33:35.612] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:34:05.614] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:34:35.615] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:35:05.615] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:35:35.622] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:36:05.626] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:36:35.627] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:37:05.627] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:37:35.632] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:38:05.646] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:38:35.655] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:39:05.666] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:39:35.685] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:40:05.696] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:40:35.712] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:41:05.714] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:41:35.720] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 02:42:05.734] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:42:35.735] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:43:05.736] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:43:35.746] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:44:05.756] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:44:35.757] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 02:45:05.782] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:45:35.785] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:46:05.793] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:46:35.799] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:47:05.821] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:47:35.827] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:48:05.829] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:48:35.832] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:49:05.835] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:49:35.849] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:50:05.852] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:50:35.854] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:51:05.856] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:51:35.861] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:52:05.868] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:52:35.894] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:53:05.897] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 02:53:35.913] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:54:05.916] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:54:35.919] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:55:05.922] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 02:55:35.922] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:56:05.952] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:56:35.955] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:57:05.972] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:57:35.973] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:58:06.002] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 02:58:36.018] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:59:06.026] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 02:59:36.031] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:00:06.042] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:00:36.062] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:01:06.065] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:01:36.065] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:02:06.068] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:02:36.068] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:03:06.073] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:03:36.103] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:04:06.103] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:04:36.119] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:05:06.122] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:05:36.125] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:06:06.146] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:06:36.148] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:07:06.150] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:07:36.154] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:08:06.173] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 03:08:36.179] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:09:06.183] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 03:09:36.208] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 03:10:06.220] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:10:36.221] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:11:06.248] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:11:36.271] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:12:06.274] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 03:12:36.283] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:13:06.284] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:13:36.285] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:14:06.293] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:14:36.299] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:15:06.323] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:15:36.337] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:16:06.338] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:16:36.342] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:17:06.345] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:17:36.350] [INFO] activeusers - /r/littlespace Active Users: 90 +[2017-03-23 03:18:06.352] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:18:36.354] [INFO] activeusers - /r/littlespace Active Users: 88 +[2017-03-23 03:19:06.357] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:19:36.359] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:20:06.370] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:20:36.385] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:21:06.390] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:21:36.397] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:22:06.414] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:22:36.425] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:23:06.426] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:23:36.440] [INFO] activeusers - /r/littlespace Active Users: 88 +[2017-03-23 03:24:06.460] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 03:24:36.466] [INFO] activeusers - /r/littlespace Active Users: 89 +[2017-03-23 13:23:55.970] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:24:25.973] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:24:55.977] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:25:25.984] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:25:55.985] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:26:33.789] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 13:27:03.795] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 13:27:33.797] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 13:28:03.798] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:28:33.799] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:29:03.802] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 13:29:33.803] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 13:30:03.806] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 13:30:33.810] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 13:31:03.822] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 13:31:33.822] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:32:03.825] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:32:33.828] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:33:03.831] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:33:33.838] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:34:03.840] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:34:33.841] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:35:03.845] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:35:33.870] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:36:03.882] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:36:33.888] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:37:03.892] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:37:33.917] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:38:03.919] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:38:33.924] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:39:03.925] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:39:33.932] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:40:03.932] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:40:33.934] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:41:03.936] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:41:33.937] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:42:03.940] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:42:33.940] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:43:03.961] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:43:33.963] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:44:03.965] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 13:44:33.974] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 13:45:03.994] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:45:33.999] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 13:46:04.000] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:46:34.028] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:47:04.033] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 13:47:34.038] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 13:48:04.040] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 13:48:34.041] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 13:49:04.050] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:49:34.054] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:50:04.084] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:50:34.102] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:51:04.113] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:51:34.116] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:52:04.122] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:52:34.124] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:53:04.135] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:53:34.145] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 13:54:04.149] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 13:54:34.153] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 13:55:04.158] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 13:55:34.176] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:56:04.178] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 13:56:34.183] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 13:57:04.185] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:57:34.187] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 13:58:04.193] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 13:58:34.202] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 13:59:04.207] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 13:59:34.209] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 14:00:04.225] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 14:00:34.229] [INFO] activeusers - /r/littlespace Active Users: 120 +[2017-03-23 14:01:04.236] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 14:01:34.238] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 14:02:04.243] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 14:02:34.247] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 14:03:04.250] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 14:03:34.252] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:04:04.253] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:04:34.255] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:05:04.272] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:05:34.276] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 14:06:04.282] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 14:06:34.284] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:07:04.286] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:07:34.290] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:08:04.295] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:08:34.298] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:09:04.302] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:09:34.309] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 14:10:04.311] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 14:10:34.316] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 14:11:04.319] [INFO] activeusers - /r/littlespace Active Users: 119 +[2017-03-23 14:11:34.322] [INFO] activeusers - /r/littlespace Active Users: 119 +[2017-03-23 14:12:04.335] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 14:12:34.339] [INFO] activeusers - /r/littlespace Active Users: 119 +[2017-03-23 14:13:04.344] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 14:13:34.344] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 14:14:04.356] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:14:34.360] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:15:04.371] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 14:15:34.373] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 14:16:04.374] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 14:16:34.376] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 14:17:04.380] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:17:34.382] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:18:04.386] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:18:34.387] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:19:04.390] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:19:34.392] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:20:04.401] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:20:34.402] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:21:04.403] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:21:34.415] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:22:04.431] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:22:34.438] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:23:04.448] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:23:34.455] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:24:04.459] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:24:34.460] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:25:04.460] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:25:34.461] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:26:04.463] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:26:34.469] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:27:04.472] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:27:34.474] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:28:04.475] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:28:34.497] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:29:04.501] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:29:34.506] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:30:04.508] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:30:34.513] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:31:04.515] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:31:34.516] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:32:04.521] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:32:34.525] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:33:04.531] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:33:34.561] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:34:04.563] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:34:34.568] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:35:04.572] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:35:34.574] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:36:04.576] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:36:34.581] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:37:04.582] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:37:34.585] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 14:38:04.587] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 14:38:34.591] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 14:39:04.595] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 14:39:34.595] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:40:04.599] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:40:34.603] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:41:04.604] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:41:34.606] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:42:04.609] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:42:34.609] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:43:04.622] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:43:34.628] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:44:04.630] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 14:44:34.633] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:45:04.634] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 14:45:34.635] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 14:46:04.640] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:46:34.641] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:47:04.655] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 14:47:34.656] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:48:04.656] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:48:34.656] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 14:49:04.662] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 14:49:34.666] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 14:50:04.672] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 14:50:34.678] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 14:51:04.683] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 14:51:34.685] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 14:52:04.687] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 14:52:34.689] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 14:53:04.693] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 14:53:34.693] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 14:54:04.694] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 14:54:34.695] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 14:55:04.697] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 14:55:34.698] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 14:56:04.699] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 14:56:34.702] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 14:57:04.704] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 14:57:34.706] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 14:58:04.714] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 14:58:34.716] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 14:59:04.717] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 14:59:34.732] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 15:00:04.733] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 15:00:34.734] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 15:01:04.740] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 15:01:34.741] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 15:02:04.751] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 15:02:34.753] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 15:03:04.755] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 15:03:34.761] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:04:04.771] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 15:04:34.771] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:05:04.774] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:05:34.778] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 15:06:04.781] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 15:06:34.786] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 15:07:04.793] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 15:07:34.793] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 15:08:04.794] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:08:34.801] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:09:04.805] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:09:34.807] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:10:04.808] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:10:34.810] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:11:04.815] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:11:34.815] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:12:04.817] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:12:34.820] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:13:04.834] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:13:34.836] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:14:04.838] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 15:14:34.841] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:15:04.853] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:15:34.853] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:16:04.859] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 15:16:34.861] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:17:04.867] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:17:34.874] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:18:04.881] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:18:34.881] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:19:04.885] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:19:34.895] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:20:04.898] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:20:34.900] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:21:04.900] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:21:34.901] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:22:04.904] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:22:34.905] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:23:04.911] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:23:34.914] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:24:04.916] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:24:34.918] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:25:04.931] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:25:34.934] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:26:04.935] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:26:34.945] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 15:27:04.948] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 15:27:34.950] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:28:04.955] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:28:34.956] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:29:04.957] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:29:34.959] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:30:04.968] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:30:34.971] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:31:04.981] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:31:34.983] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:32:04.992] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:32:35.001] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:33:05.002] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:33:35.006] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:34:05.008] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:34:35.010] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:35:05.011] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:35:35.012] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:36:05.016] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:36:35.019] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:37:05.020] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:37:35.024] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:38:05.028] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:38:35.028] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:39:05.035] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:39:35.038] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:40:05.040] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:40:35.041] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:41:05.041] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:41:35.041] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:42:05.044] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:42:35.046] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:43:05.046] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 15:43:35.049] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 15:44:05.054] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 15:44:35.056] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:45:05.056] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:45:35.063] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:46:05.063] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 15:46:35.065] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 15:47:05.067] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:47:35.069] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:48:05.069] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:48:35.069] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:49:05.071] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 15:49:35.071] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 15:50:05.079] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 15:50:35.081] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 15:51:05.082] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 15:51:35.084] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 15:52:05.089] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 15:52:35.093] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 15:53:05.095] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 15:53:35.096] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 15:54:05.098] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:54:35.104] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:55:05.111] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:55:35.113] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 15:56:05.115] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:56:35.121] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:57:05.125] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 15:57:35.131] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:58:05.136] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:58:35.138] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:59:05.140] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 15:59:35.141] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:00:05.144] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:00:35.151] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:01:05.154] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:01:35.161] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:02:05.171] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:02:35.172] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:03:05.175] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:03:35.178] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:04:05.179] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:04:35.180] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:05:05.181] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:05:35.184] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:06:05.189] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:06:35.206] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:07:05.207] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:07:35.211] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 16:08:05.216] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:08:35.227] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:09:05.231] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 16:09:35.237] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 16:10:05.238] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:10:35.240] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:11:05.252] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:11:35.260] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:12:05.263] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 16:12:35.268] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:13:05.269] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:13:35.271] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 16:14:05.278] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:14:35.301] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:15:05.303] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:15:35.304] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:16:05.305] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:16:35.312] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:17:05.317] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:17:35.321] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:18:05.328] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:18:35.334] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:19:05.337] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:19:35.339] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:20:05.346] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:20:35.358] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:21:05.359] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:21:35.364] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:22:05.370] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:22:35.378] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:23:05.381] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:23:35.396] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:24:05.405] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:24:35.407] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:25:05.411] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:25:35.414] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:26:05.417] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:26:35.422] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:27:05.424] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:27:35.426] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:28:05.427] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:28:35.429] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:29:05.443] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:29:35.444] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:30:05.444] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:30:35.446] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:31:05.447] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:31:35.449] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:32:05.452] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:32:35.454] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:33:05.459] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:33:35.461] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:34:05.464] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:34:35.467] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:35:05.469] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:35:35.472] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:36:05.474] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:36:35.477] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:37:05.478] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:37:35.481] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:38:05.486] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:38:35.488] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:39:05.489] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:39:35.489] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:40:05.494] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:40:35.497] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:41:05.505] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:41:35.510] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:42:05.511] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:42:35.512] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:43:05.514] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:43:35.527] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:44:05.536] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:44:35.541] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:45:05.543] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 16:45:35.557] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 16:46:05.563] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 16:46:35.574] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:47:05.575] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:47:35.578] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:48:05.579] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:48:35.591] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:49:05.594] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:49:35.601] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:50:05.604] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:50:35.615] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:51:05.621] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:51:35.625] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:52:05.626] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:52:35.630] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:53:05.634] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:53:35.636] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:54:05.642] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:54:35.643] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:55:05.645] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:55:35.649] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:56:05.650] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 16:56:35.650] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:57:05.656] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 16:57:35.664] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:58:05.670] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 16:58:35.675] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 16:59:05.676] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 16:59:35.686] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:00:05.688] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:00:35.689] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:01:05.703] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:01:35.717] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:02:05.721] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:02:35.725] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:03:05.727] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:03:35.730] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:04:05.732] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:04:35.733] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:05:05.744] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:05:35.746] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:06:05.747] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:06:35.750] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:07:05.751] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:07:35.753] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:08:05.756] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:08:35.759] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:09:05.760] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:09:35.760] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:10:05.762] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:10:35.763] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:11:05.767] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:11:35.767] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:12:05.769] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:12:35.776] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:13:05.785] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:13:35.790] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:14:05.791] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:14:35.797] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:15:05.802] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:15:35.803] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:16:05.804] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:16:35.805] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 17:17:05.806] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 17:17:35.811] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 17:18:05.814] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 17:18:35.819] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 17:19:05.820] [INFO] activeusers - /r/littlespace Active Users: 116 +[2017-03-23 17:19:35.822] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 17:20:05.823] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 17:20:35.825] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 17:21:05.826] [INFO] activeusers - /r/littlespace Active Users: 119 +[2017-03-23 17:21:35.827] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:22:05.830] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:22:35.837] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 17:23:05.844] [INFO] activeusers - /r/littlespace Active Users: 118 +[2017-03-23 17:23:35.845] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:24:05.848] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:24:35.849] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 17:25:05.853] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:31:21.292] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:32:06.952] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 17:32:36.955] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:33:06.957] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:33:36.961] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:34:06.964] [INFO] activeusers - /r/littlespace Active Users: 117 +[2017-03-23 17:34:36.965] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:35:06.965] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:35:36.975] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:36:06.997] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:36:37.000] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:37:07.008] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:37:37.009] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:38:07.010] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:38:37.012] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:39:07.018] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:39:37.023] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:40:07.031] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:40:37.033] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:41:07.042] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:41:37.047] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:42:07.049] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:42:37.050] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:43:07.068] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:43:37.080] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:44:07.087] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:44:37.103] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:45:07.104] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:45:37.118] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:46:07.121] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:46:37.138] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:47:07.143] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:47:37.147] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:48:07.152] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:48:37.158] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:49:07.162] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:49:37.167] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:50:07.174] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 17:50:37.189] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:51:07.197] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:51:37.200] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:52:07.202] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:52:37.204] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:53:07.207] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 17:53:44.057] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 17:54:14.066] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 17:54:44.070] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:55:14.076] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:55:44.084] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:56:14.086] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:56:44.088] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 17:57:14.089] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:58:41.434] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:59:11.449] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 17:59:47.381] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 18:00:17.385] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 18:00:47.393] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 18:01:17.400] [INFO] activeusers - /r/littlespace Active Users: 115 +[2017-03-23 18:01:47.403] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 18:02:17.418] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 18:02:47.420] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 18:03:17.423] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 18:03:47.444] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 18:04:17.448] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 18:04:47.452] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 18:05:17.456] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:05:47.457] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 18:06:17.459] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:06:47.461] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 18:07:17.469] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 18:07:47.478] [INFO] activeusers - /r/littlespace Active Users: 113 +[2017-03-23 18:08:17.481] [INFO] activeusers - /r/littlespace Active Users: 114 +[2017-03-23 18:08:47.482] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 18:09:17.484] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 18:09:47.495] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:10:17.497] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:10:47.504] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:11:17.520] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:11:49.148] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:12:19.154] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:12:49.156] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:13:19.157] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:13:49.157] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:14:19.162] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:14:49.163] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:15:19.177] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:15:49.189] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:16:19.192] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:16:49.192] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:17:19.203] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:17:49.212] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:18:19.217] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:18:49.221] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:19:19.232] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:19:49.234] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:20:19.239] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:20:49.243] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:21:19.244] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:21:49.255] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:22:19.255] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 18:22:49.256] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:23:19.257] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 18:23:49.264] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:24:19.264] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:24:49.266] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:25:19.273] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:25:49.278] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:26:19.280] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:26:49.281] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:27:19.290] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:27:49.309] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:28:19.311] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:28:49.316] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:29:19.318] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:29:49.320] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:30:19.325] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:30:49.326] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:31:19.329] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:31:49.330] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:32:19.337] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:32:49.344] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:33:19.352] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:33:49.353] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:34:19.354] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:34:49.356] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:35:19.360] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:35:49.366] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 18:36:19.369] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:36:49.370] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:37:19.372] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 18:37:49.375] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 18:38:19.375] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 18:38:49.376] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 18:39:19.379] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 18:39:49.383] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 18:40:19.384] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 18:40:49.386] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 18:41:19.390] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 18:41:49.391] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:42:19.392] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:42:49.392] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:43:19.394] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 18:43:49.398] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:44:19.402] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:44:49.413] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:45:19.426] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:45:49.434] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:46:19.435] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:46:49.442] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:47:19.444] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:47:49.447] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:48:19.455] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:48:49.457] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:49:19.457] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:49:49.458] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:50:19.469] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 18:50:49.476] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:51:19.481] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:51:49.483] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:52:19.496] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 18:52:49.501] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:53:19.506] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:53:49.506] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:54:19.507] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 18:54:49.509] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:55:19.510] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 18:55:49.512] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:56:19.513] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:56:49.514] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:57:19.516] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:57:49.517] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 18:58:19.519] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:58:49.520] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 18:59:19.522] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 18:59:49.523] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:00:19.528] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:00:49.530] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:01:19.532] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:01:49.539] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:02:19.541] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:02:49.544] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:03:19.544] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:03:49.546] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:04:19.548] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:04:49.549] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 19:05:19.553] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:05:49.555] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:06:19.556] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:06:49.556] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:07:19.557] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:07:49.560] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:08:19.561] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:08:49.562] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:09:19.563] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:09:49.563] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:10:19.569] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:10:49.576] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:11:19.577] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:11:49.578] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:12:19.581] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:12:49.584] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:13:19.585] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:13:49.590] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:14:19.592] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:14:49.593] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:15:19.595] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:15:49.596] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:16:19.599] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:16:49.600] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:17:19.603] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:17:49.605] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:18:19.607] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:18:49.609] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:19:19.610] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:19:49.612] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:20:19.614] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:20:49.615] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:21:19.621] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:21:49.626] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:22:19.626] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:22:49.628] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:23:19.628] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:23:49.631] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:24:19.631] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:24:49.632] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:25:19.632] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:25:49.633] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:26:19.635] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 19:26:49.636] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:27:19.643] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:27:49.644] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:28:19.649] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:28:49.650] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 19:29:19.652] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 19:29:49.653] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 19:30:19.655] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 19:30:49.657] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:31:19.660] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:31:49.660] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:32:19.661] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:32:49.663] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:33:19.663] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:33:49.667] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:34:19.670] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:34:49.671] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:35:19.673] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:35:49.675] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:36:19.679] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:36:49.685] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:37:19.686] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:37:49.690] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:38:19.695] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:38:49.696] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 19:39:19.698] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 19:39:49.699] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:40:19.705] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:40:49.706] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:41:19.713] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:41:49.713] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:42:19.713] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:42:49.716] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 19:43:19.719] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 19:43:49.720] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:44:19.720] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:44:49.723] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:45:19.726] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 19:45:49.727] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 19:46:19.727] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:46:49.729] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 19:47:19.730] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 19:47:49.731] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:48:19.733] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:48:49.735] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:49:19.735] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:49:49.736] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:50:19.740] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:50:49.742] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 19:51:19.748] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:51:49.749] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:52:19.749] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:52:49.750] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:53:19.750] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:53:49.753] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:54:19.753] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 19:54:49.754] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:55:19.754] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:55:49.756] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:56:19.756] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:56:49.759] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 19:57:19.779] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 19:57:49.783] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:58:19.786] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 19:58:49.789] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:59:19.800] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 19:59:49.806] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:00:19.813] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:00:49.813] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:01:19.823] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:01:49.839] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:02:19.846] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:02:49.847] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:03:19.853] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:03:49.856] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 20:04:19.857] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:04:49.858] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:05:19.861] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:05:49.865] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:06:19.866] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:06:49.867] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:07:19.868] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:07:49.870] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:08:19.872] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:08:49.874] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 20:09:19.876] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:09:49.879] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:10:19.882] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:10:49.885] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:11:19.885] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:11:49.888] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:12:19.890] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:12:49.893] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:13:19.896] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:13:49.897] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 20:14:19.899] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 20:14:49.903] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 20:15:19.911] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 20:15:49.913] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 20:16:19.914] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 20:16:49.915] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 20:17:19.918] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 20:17:49.920] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 20:18:19.921] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 20:18:49.923] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 20:19:19.930] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:19:49.933] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 20:20:19.936] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:20:49.950] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:21:19.951] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:21:49.954] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:22:19.955] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 20:22:49.969] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:23:19.970] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:24:06.340] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:24:36.342] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 20:25:06.344] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 20:27:34.447] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 20:28:04.466] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 20:38:06.337] [INFO] activeusers - /r/littlespace Active Users: 112 +[2017-03-23 20:42:17.622] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 20:44:19.412] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 20:44:49.425] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 20:45:19.427] [INFO] activeusers - /r/littlespace Active Users: 111 +[2017-03-23 20:45:49.430] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 20:46:19.431] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 20:46:49.445] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 20:50:57.068] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 20:51:58.158] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 21:14:03.482] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:14:33.485] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:15:03.486] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:15:33.495] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:16:03.499] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:16:33.500] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:17:03.501] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:17:33.507] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:18:03.509] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:18:33.512] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:19:03.513] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:19:33.514] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:20:03.515] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:20:33.515] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:21:03.517] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:21:33.518] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:22:03.519] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:22:33.519] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:23:03.520] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:23:33.521] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:24:03.526] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:24:33.530] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:25:03.531] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:25:33.533] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:26:03.534] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:26:33.536] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:27:03.540] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:27:33.544] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:28:03.546] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:28:33.548] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:29:03.549] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:29:33.551] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:30:03.553] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:30:33.554] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:31:03.555] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:31:33.556] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:32:03.557] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:32:33.560] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 21:33:03.561] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 21:33:33.563] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:34:03.563] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:34:33.565] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 21:35:03.566] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:35:33.567] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 21:36:03.571] [INFO] activeusers - /r/littlespace Active Users: 110 +[2017-03-23 21:36:33.572] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 21:37:03.573] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 21:37:33.576] [INFO] activeusers - /r/littlespace Active Users: 109 +[2017-03-23 21:38:03.579] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 21:38:33.581] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 21:39:03.583] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:39:33.585] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:40:03.587] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:40:33.589] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:41:03.590] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 21:41:33.591] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:42:03.592] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:42:33.593] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:43:03.599] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:43:33.602] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:44:03.603] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:44:33.607] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:45:03.607] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:45:33.609] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 21:46:03.614] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 21:46:33.616] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:47:03.617] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:47:33.619] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:48:03.619] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:48:33.620] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 21:49:03.622] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:49:33.623] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:50:03.624] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:50:33.625] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:51:03.627] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:51:33.628] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:52:03.632] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:52:33.632] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 21:53:03.633] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:53:33.635] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:54:03.635] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 21:54:33.637] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:55:03.642] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 21:55:33.644] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:56:03.646] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 21:56:33.647] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:57:03.650] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:57:33.651] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 21:58:03.651] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:58:33.652] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 21:59:03.652] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 21:59:33.656] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:00:03.670] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:00:33.674] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:01:03.676] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:01:33.678] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:02:03.681] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:02:33.682] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:03:03.684] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:03:33.686] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:04:03.691] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:04:33.691] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:05:03.696] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 22:05:33.696] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 22:06:03.698] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:06:33.698] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:07:03.699] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:07:33.701] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:08:03.702] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:08:33.703] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:09:03.704] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:09:33.706] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 22:10:03.712] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:10:33.712] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:11:03.713] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:11:33.716] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:12:03.718] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:12:33.721] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:13:03.722] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:13:33.722] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:14:03.727] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:14:33.727] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:15:03.730] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:15:33.732] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:16:03.738] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:16:33.740] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:17:03.745] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 22:17:33.750] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:18:03.752] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:18:33.753] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:19:03.757] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:19:33.775] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:20:03.779] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:20:33.781] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:21:03.789] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:21:33.791] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:22:03.795] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:22:33.798] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:23:03.799] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:23:33.800] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:24:03.802] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:24:33.804] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:25:03.804] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:25:33.806] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:26:03.809] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:26:33.811] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:27:03.812] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:27:33.814] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:28:03.817] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:28:33.819] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:29:03.821] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 22:29:33.824] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 22:30:03.826] [INFO] activeusers - /r/littlespace Active Users: 108 +[2017-03-23 22:30:33.829] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:31:03.830] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:31:33.832] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:32:03.833] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:32:33.834] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:33:03.834] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:33:33.835] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:34:03.838] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:34:33.838] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:35:03.844] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:35:33.844] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:36:03.848] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:36:33.852] [INFO] activeusers - /r/littlespace Active Users: 107 +[2017-03-23 22:37:03.853] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:37:33.863] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:38:03.870] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:38:33.873] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:39:03.874] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:39:33.881] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:40:03.892] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:40:33.896] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:41:03.898] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:41:33.907] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:42:03.912] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:42:33.915] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:43:03.918] [INFO] activeusers - /r/littlespace Active Users: 102 +[2017-03-23 22:43:33.920] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:44:03.935] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:44:33.937] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:45:03.949] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:45:33.954] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:46:03.956] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:46:33.957] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:47:03.958] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:47:33.961] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:48:03.963] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:48:33.963] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:49:03.984] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:49:33.985] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:50:03.987] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:50:33.990] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:51:03.992] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:51:33.993] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:52:03.996] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:52:33.997] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:53:03.998] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:53:33.998] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:54:03.998] [INFO] activeusers - /r/littlespace Active Users: 105 +[2017-03-23 22:54:34.000] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:55:04.007] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:55:34.008] [INFO] activeusers - /r/littlespace Active Users: 106 +[2017-03-23 22:56:04.016] [INFO] activeusers - /r/littlespace Active Users: 104 +[2017-03-23 22:56:34.018] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:57:04.023] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:57:34.035] [INFO] activeusers - /r/littlespace Active Users: 103 +[2017-03-23 22:58:04.038] [INFO] activeusers - /r/littlespace Active Users: 101 +[2017-03-23 22:58:34.048] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 22:59:04.055] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 22:59:34.057] [INFO] activeusers - /r/littlespace Active Users: 100 +[2017-03-23 23:00:04.070] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 23:00:34.072] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:01:04.073] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:01:34.078] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:02:04.098] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:02:34.101] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:03:04.103] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 23:03:34.108] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:04:04.128] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:04:34.133] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:05:04.141] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:05:34.151] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:06:04.152] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:06:34.155] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:07:04.156] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:07:34.157] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:08:04.158] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:08:34.163] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:09:04.174] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:09:34.190] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 23:10:04.191] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:10:34.193] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:11:04.196] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:11:34.199] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:12:04.204] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:12:34.207] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:13:04.210] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:13:34.211] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:14:04.218] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:14:34.223] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:15:04.232] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:15:34.262] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:16:04.266] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:16:34.268] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:17:04.272] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:17:34.275] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:18:04.281] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:18:34.292] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 23:19:04.292] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:19:34.305] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:20:04.308] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:20:34.315] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:21:04.345] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:21:34.349] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:22:04.349] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:22:34.353] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:23:04.364] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:23:34.377] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:24:04.388] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:24:34.389] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:25:04.398] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:25:34.410] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:26:04.418] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:26:34.422] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:27:04.423] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:27:34.429] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:28:04.433] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 23:28:34.442] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:29:04.448] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:29:34.452] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:30:04.452] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:30:34.461] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:31:04.468] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:31:34.474] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:32:04.483] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:32:34.510] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:33:04.518] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:33:34.522] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:34:04.523] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:34:34.530] [INFO] activeusers - /r/littlespace Active Users: 92 +[2017-03-23 23:35:04.538] [INFO] activeusers - /r/littlespace Active Users: 91 +[2017-03-23 23:35:34.540] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 23:36:04.544] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:36:34.549] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:37:04.552] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:37:34.555] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:38:04.557] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:38:34.560] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:39:04.564] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:39:34.594] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:40:04.599] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:40:34.601] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:41:04.602] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:41:34.604] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:42:04.624] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:42:34.627] [INFO] activeusers - /r/littlespace Active Users: 98 +[2017-03-23 23:43:04.627] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 23:43:34.630] [INFO] activeusers - /r/littlespace Active Users: 99 +[2017-03-23 23:44:04.641] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:44:34.645] [INFO] activeusers - /r/littlespace Active Users: 97 +[2017-03-23 23:45:04.650] [INFO] activeusers - /r/littlespace Active Users: 96 +[2017-03-23 23:45:34.658] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:46:04.668] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:46:34.669] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 23:47:04.679] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 23:47:34.685] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 23:48:04.692] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 23:48:34.699] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 23:49:04.727] [INFO] activeusers - /r/littlespace Active Users: 93 +[2017-03-23 23:49:34.741] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:50:04.745] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:50:34.749] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:51:04.764] [INFO] activeusers - /r/littlespace Active Users: 95 +[2017-03-23 23:51:34.776] [INFO] activeusers - /r/littlespace Active Users: 94 +[2017-03-23 23:52:04.778] [INFO] activeusers - /r/littlespace Active Users: 93 diff --git a/logs/channels.log b/logs/channels.log new file mode 100644 index 0000000..c815f5a --- /dev/null +++ b/logs/channels.log @@ -0,0 +1,4627 @@ +[2017-03-21 20:25:49.523] [INFO] channels - LinuxRocker: #general: : .w 63088 +[2017-03-21 20:25:50.137] [INFO] channels - LinuxRocker: #general: : Partly Cloudy, 57F (14C) (287.15K) | Humidity: 51% | Wind: N @ 4.33mph (7km/h) | 0% chance of precipitation (63088 - Valley Park, MO (US)) +[2017-03-22 01:37:31.223] [INFO] channels - LinuxRocker: #general: : blah test +[2017-03-22 01:37:32.715] [INFO] channels - LinuxRocker: #general: : .w 63088 +[2017-03-22 01:37:33.280] [INFO] channels - LinuxRocker: #general: : Mostly Cloudy, 44F (6C) (279.15K) / feels like 39F (4C) (277.15K) | Humidity: 61% | Wind: N @ 8.5mph (13.7km/h) | 0% chance of precipitation (63088 - Valley Park, MO (US)) +[2017-03-22 01:38:28.934] [INFO] channels - LinuxRocker: #mod: : Test. +[2017-03-22 21:59:15.640] [INFO] channels - LinuxRocker: #mod: : ping +[2017-03-22 21:59:15.860] [INFO] channels - LinuxRocker: #mod: : pong +[2017-03-22 21:59:20.945] [INFO] channels - LinuxRocker: #mod: : i ping +[2017-03-22 22:01:20.883] [INFO] channels - /r/littlespace: #helpers: : yes +[2017-03-22 22:01:21.814] [INFO] channels - /r/littlespace: #helpers: : i read it as both +[2017-03-22 22:01:35.378] [INFO] channels - /r/littlespace: #vent: : They are. Can confirm this. +[2017-03-22 22:01:48.649] [INFO] channels - /r/littlespace: #vent: : I mean, you get to meet your little +[2017-03-22 22:01:53.947] [INFO] channels - /r/littlespace: #vent: : Shouldn't you be pleased +[2017-03-22 22:02:00.922] [INFO] channels - /r/littlespace: #vent: : Look at the silver lining +[2017-03-22 22:02:05.480] [INFO] channels - /r/littlespace: #vent: : I WILL be pleased +[2017-03-22 22:02:10.723] [INFO] channels - /r/littlespace: #vent: : Its just that ONE thing wrong with it +[2017-03-22 22:02:11.127] [INFO] channels - /r/littlespace: #helpers: : ping +[2017-03-22 22:02:11.301] [INFO] channels - /r/littlespace: #helpers: : pong +[2017-03-22 22:02:14.446] [INFO] channels - /r/littlespace: #helpers: : Aha! +[2017-03-22 22:02:26.168] [INFO] channels - /r/littlespace: #vent: : ¯\_(ツ)_/¯ +[2017-03-22 22:02:41.565] [INFO] channels - /r/littlespace: #vent: : I'd just be happy to meet, fuck the technicalities +[2017-03-22 22:02:49.452] [INFO] channels - /r/littlespace: #helpers: : Mic drop +[2017-03-22 22:02:55.806] [INFO] channels - /r/littlespace: #helpers: : !ping +[2017-03-22 22:02:55.979] [INFO] channels - /r/littlespace: #helpers: : pong +[2017-03-22 22:02:57.091] [INFO] channels - /r/littlespace: #helpers: : ping +[2017-03-22 22:02:59.809] [INFO] channels - /r/littlespace: #helpers: : okay. +[2017-03-22 22:03:29.674] [INFO] channels - /r/littlespace: #helpers: : !help +[2017-03-22 22:03:29.843] [INFO] channels - /r/littlespace: #helpers: : Sorry. +[2017-03-22 22:03:32.462] [INFO] channels - /r/littlespace: #helpers: : can you set up the bot to respond with a mic emoji when i send the shruggie +[2017-03-22 22:03:40.584] [INFO] channels - /r/littlespace: #helpers: : Hang on. +[2017-03-22 22:03:57.255] [INFO] channels - /r/littlespace: #helpers: : i'm not scorlling back +[2017-03-22 22:03:58.091] [INFO] channels - /r/littlespace: #helpers: : send one +[2017-03-22 22:04:05.848] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> what's happening between bae and you? +[2017-03-22 22:04:10.585] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-22 22:04:17.393] [INFO] channels - /r/littlespace: #vent: : ^ this +[2017-03-22 22:04:19.978] [INFO] channels - /r/littlespace: #helpers: : His grandpa had a stroke +[2017-03-22 22:04:29.265] [INFO] channels - /r/littlespace: #helpers: : And hes just not in a good place right now +[2017-03-22 22:04:35.571] [INFO] channels - /r/littlespace: #helpers: : And wanted some space +[2017-03-22 22:04:56.651] [INFO] channels - /r/littlespace: #helpers: : : ¯\_(ツ)_/¯ +[2017-03-22 22:05:00.762] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-22 22:05:01.690] [INFO] channels - /r/littlespace: #helpers: : I was talking about it earlier. Lol Forgot to send you a message +[2017-03-22 22:05:04.043] [INFO] channels - /r/littlespace: #helpers: : fucking thor +[2017-03-22 22:05:07.582] [INFO] channels - /r/littlespace: #vent: : i'm generally disgruntled over things that don't go my way, but when and if i don't see my big for ages, i honestly wouldn't be nitpicking over things that shouldn't matter (i'm big on food, and bad food is a pet peeve for me) when i can see someone i love wholeheartedly after a long while +[2017-03-22 22:05:08.353] [INFO] channels - /r/littlespace: #helpers: : thor pls +[2017-03-22 22:05:16.159] [INFO] channels - /r/littlespace: #helpers: : ah, right +[2017-03-22 22:05:18.049] [INFO] channels - /r/littlespace: #helpers: : sorry, don't worry +[2017-03-22 22:05:18.885] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-22 22:05:19.243] [INFO] channels - /r/littlespace: #helpers: : *hugs* +[2017-03-22 22:05:21.660] [INFO] channels - /r/littlespace: #helpers: : he's trying hard, though! +[2017-03-22 22:05:27.284] [INFO] channels - /r/littlespace: #helpers: : argh bman pisses me off +[2017-03-22 22:05:29.532] [INFO] channels - /r/littlespace: #helpers: : Come on thor this is important to me +[2017-03-22 22:05:40.538] [INFO] channels - /r/littlespace: #helpers: : of all things to be disgruntled about lol +[2017-03-22 22:05:44.327] [INFO] channels - /r/littlespace: #vent: : I agree +[2017-03-22 22:05:54.790] [INFO] channels - /r/littlespace: #vent: : Just get dessert! +[2017-03-22 22:06:06.820] [INFO] channels - /r/littlespace: #general: : NO GIGGLES +[2017-03-22 22:06:09.265] [INFO] channels - /r/littlespace: #general: : NO CAPES +[2017-03-22 22:06:16.840] [INFO] channels - /r/littlespace: #helpers: : and when i saw i'm big on food, i'm insanely picky and fussy and i love food a lot +[2017-03-22 22:06:25.722] [INFO] channels - /r/littlespace: #general: : beep boop +[2017-03-22 22:06:28.188] [INFO] channels - /r/littlespace: #helpers: : i will eat anything +[2017-03-22 22:06:31.864] [INFO] channels - /r/littlespace: #helpers: : not meat +[2017-03-22 22:06:35.330] [INFO] channels - /r/littlespace: #helpers: : but yeah anything +[2017-03-22 22:06:50.551] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-22 22:06:50.662] [INFO] channels - /r/littlespace: #helpers: : oh, i don't eat a lot of things tbh, but i love to eat. singapore's a sin city when it comes for food +[2017-03-22 22:06:50.729] [INFO] channels - /r/littlespace: #helpers: : *mic drop* +[2017-03-22 22:06:52.727] [INFO] channels - /r/littlespace: #helpers: : SUCK IT +[2017-03-22 22:06:54.858] [INFO] channels - /r/littlespace: #helpers: : OH YES +[2017-03-22 22:06:56.309] [INFO] channels - /r/littlespace: #helpers: : FUCK YES +[2017-03-22 22:07:05.507] [INFO] channels - /r/littlespace: #general: : 🤖 🤖 🤖 🤖 🤖 +[2017-03-22 22:07:18.533] [INFO] channels - /r/littlespace: #helpers: : OH MY GOODNES +[2017-03-22 22:07:20.092] [INFO] channels - /r/littlespace: #helpers: : S +[2017-03-22 22:07:21.479] [INFO] channels - /r/littlespace: #helpers: : SSSSS +[2017-03-22 22:07:22.166] [INFO] channels - /r/littlespace: #media_sharing: : ooo I like it! Although I do prefer the Black Mages verion along with the original +[2017-03-22 22:07:23.751] [INFO] channels - /r/littlespace: #helpers: : ❤ +[2017-03-22 22:07:26.271] [INFO] channels - /r/littlespace: #helpers: : YOU'RE THE BEST +[2017-03-22 22:07:37.049] [INFO] channels - /r/littlespace: #general: : i'm gonna watch umaru chan now!! +[2017-03-22 22:07:38.196] [INFO] channels - /r/littlespace: #helpers: : Like I said, it's our bot, Ariel. We can do whatever we want. +[2017-03-22 22:07:40.977] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-22 22:07:41.140] [INFO] channels - /r/littlespace: #helpers: : *mic drop* +[2017-03-22 22:07:48.705] [INFO] channels - /r/littlespace: #helpers: : I AM SO PLEASED +[2017-03-22 22:07:52.259] [INFO] channels - /r/littlespace: #vent: : Guys Im not gonna throw a fit about going to a buffet, lol +[2017-03-22 22:07:57.835] [INFO] channels - /r/littlespace: #vent: : Im just saying I dont like them +[2017-03-22 22:08:00.665] [INFO] channels - /r/littlespace: #helpers: : thank you based mod +[2017-03-22 22:08:07.938] [INFO] channels - /r/littlespace: #helpers: : but he *is throwing a fucking fit* +[2017-03-22 22:08:13.463] [INFO] channels - /r/littlespace: #helpers: : HE IS +[2017-03-22 22:08:15.098] [INFO] channels - /r/littlespace: #helpers: : LIKE +[2017-03-22 22:08:17.086] [INFO] channels - /r/littlespace: #helpers: : ALSKDJFOAIWEJMFALKSJDOFIWE +[2017-03-22 22:08:19.900] [INFO] channels - /r/littlespace: #media_sharing: : black mages one is a little too messy for me, tbh +[2017-03-22 22:08:21.005] [INFO] channels - /r/littlespace: #helpers: : grow the fuck up +[2017-03-22 22:08:24.819] [INFO] channels - /r/littlespace: #helpers: : why'd you bring it up +[2017-03-22 22:08:30.494] [INFO] channels - /r/littlespace: #media_sharing: : i like the distant worlds one, but liberi fatali for distant worlds is the bees knees +[2017-03-22 22:08:34.312] [INFO] channels - /r/littlespace: #vent: : <:Rarity:271501616639639552> +[2017-03-22 22:08:37.666] [INFO] channels - /r/littlespace: #helpers: : IKR +[2017-03-22 22:09:07.919] [INFO] channels - /r/littlespace: #helpers: : He complains about everything, guys. +[2017-03-22 22:09:37.196] [INFO] channels - /r/littlespace: #helpers: : We typically let it go and ignore him since feeding into it kinda fills his attention quota and he keeps coming back. +[2017-03-22 22:09:45.225] [INFO] channels - /r/littlespace: #helpers: : As you saw before. +[2017-03-22 22:09:50.027] [INFO] channels - /r/littlespace: #helpers: : Also happened with thedaj +[2017-03-22 22:09:52.380] [INFO] channels - /r/littlespace: #media_sharing: : Black Mages one having electric guitar and choir are what sells it to me I think +[2017-03-22 22:09:54.130] [INFO] channels - /r/littlespace: #helpers: : as they're one in the same tbh +[2017-03-22 22:10:08.393] [INFO] channels - /r/littlespace: #helpers: : The rarity icon is the equivalent of https://i.ytimg.com/vi/TnG_uLDi7IU/hqdefault.jpg +[2017-03-22 22:10:18.873] [INFO] channels - /r/littlespace: #helpers: : Yeah +[2017-03-22 22:10:19.263] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:10:19.436] [INFO] channels - /r/littlespace: #mod: : There there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:10:28.033] [INFO] channels - /r/littlespace: #helpers: : we need a special snowflake emoji +[2017-03-22 22:10:32.509] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:10:32.682] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:10:33.436] [INFO] channels - /r/littlespace: #helpers: : ❄ +[2017-03-22 22:10:35.720] [INFO] channels - /r/littlespace: #helpers: : I also like 💨 +[2017-03-22 22:10:37.496] [INFO] channels - /r/littlespace: #helpers: : ... +[2017-03-22 22:10:39.608] [INFO] channels - /r/littlespace: #helpers: : <:Dash:271501566198939649> +[2017-03-22 22:10:46.051] [INFO] channels - /r/littlespace: #helpers: : <:Rarity:271501616639639552> +[2017-03-22 22:10:48.609] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:10:48.769] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:10:51.993] [INFO] channels - /r/littlespace: #media_sharing: : true, but OWA done by black mages is really good. i love that one +[2017-03-22 22:11:05.808] [INFO] channels - /r/littlespace: #helpers: : oh my god +[2017-03-22 22:11:05.902] [INFO] channels - /r/littlespace: #mod: : Is there a way to do it without the .cdn link? +[2017-03-22 22:11:07.565] [INFO] channels - /r/littlespace: #helpers: : umaru chan is me +[2017-03-22 22:11:08.953] [INFO] channels - /r/littlespace: #general: : that sounds familiar +[2017-03-22 22:11:10.704] [INFO] channels - /r/littlespace: #mod: : Not that it matters. +[2017-03-22 22:11:15.463] [INFO] channels - /r/littlespace: #mod: : I don't think there's an API for uploading images. +[2017-03-22 22:11:19.695] [INFO] channels - /r/littlespace: #mod: : Let me check. +[2017-03-22 22:11:20.671] [INFO] channels - /r/littlespace: #mod: : maybe we can tinyurl it instead? +[2017-03-22 22:11:29.258] [INFO] channels - /r/littlespace: #mod: : I was just thinking about putting that in some goo.gl +[2017-03-22 22:11:35.509] [INFO] channels - /r/littlespace: #mod: : That works. +[2017-03-22 22:11:46.161] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:11:46.325] [INFO] channels - /r/littlespace: #mod: : There, there. https://goo.gl/c1NftO +[2017-03-22 22:11:51.075] [INFO] channels - /r/littlespace: #mod: : If we need a link, then we should make it short.. however I've seen bots use images without links, weird. +[2017-03-22 22:11:57.198] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:11:57.379] [INFO] channels - /r/littlespace: #mod: : There, there. https://goo.gl/c1NftO +[2017-03-22 22:12:06.323] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:12:06.504] [INFO] channels - /r/littlespace: #mod: : There, there. https://goo.gl/c1NftO +[2017-03-22 22:12:17.920] [INFO] channels - /r/littlespace: #mod: : It doesn't GIF it now. +[2017-03-22 22:12:18.698] [INFO] channels - /r/littlespace: #mod: : Weird. +[2017-03-22 22:12:21.489] [INFO] channels - /r/littlespace: #mod: : NOOOO +[2017-03-22 22:12:25.475] [INFO] channels - /r/littlespace: #mod: : That's the best part! +[2017-03-22 22:12:25.794] [INFO] channels - /r/littlespace: #media_sharing: : That is quite awesome! +[2017-03-22 22:12:28.246] [INFO] channels - /r/littlespace: #general: : **** so I don't know if anyone's here but if so I could use some help. my girlfriend wants to be a little and I have no idea how to act. like I read parts of the faq and all but still +[2017-03-22 22:12:35.051] [INFO] channels - /r/littlespace: #vent: : Also like, the place I work has a buffet, so I can get an employee discount if I take her there :3c +[2017-03-22 22:12:40.271] [INFO] channels - /r/littlespace: #mod: : Maybe it'll work through tinyurl? +[2017-03-22 22:12:42.930] [INFO] channels - /r/littlespace: #general: : hi aybb!! what are you looking at, specifically? +[2017-03-22 22:12:46.521] [INFO] channels - /r/littlespace: #helpers: : RIGHT +[2017-03-22 22:12:47.088] [INFO] channels - /r/littlespace: #helpers: : SAME +[2017-03-22 22:12:51.384] [INFO] channels - /r/littlespace: #helpers: : <:Umaru:270955595836686356> +[2017-03-22 22:13:22.068] [INFO] channels - /r/littlespace: #helpers: : oh my god if I was a gf to someone like Bman and they openly talked about getting a discount on the first date +[2017-03-22 22:13:25.362] [INFO] channels - /r/littlespace: #helpers: : I'd be actually repulsed +[2017-03-22 22:13:30.136] [INFO] channels - /r/littlespace: #helpers: : WHAT +[2017-03-22 22:13:31.233] [INFO] channels - /r/littlespace: #helpers: : IKR +[2017-03-22 22:13:31.915] [INFO] channels - /r/littlespace: #mod: : I'm thinking it doesn't follow shorteners. +[2017-03-22 22:13:36.939] [INFO] channels - /r/littlespace: #helpers: : I think my vagina would be so dry it'd be like the actual desert +[2017-03-22 22:13:38.849] [INFO] channels - /r/littlespace: #helpers: : just sand +[2017-03-22 22:13:39.777] [INFO] channels - /r/littlespace: #mod: : That's probably like that for security reasons +[2017-03-22 22:14:00.084] [INFO] channels - /r/littlespace: #general: : **** what do you mean? +[2017-03-22 22:14:17.446] [INFO] channels - /r/littlespace: #mod: : Gah. I know that flower system thing didn't have a url, but I have no idea how it managed to work. +[2017-03-22 22:14:20.823] [INFO] channels - /r/littlespace: #mod: : It's not that big of a deal though. +[2017-03-22 22:14:29.456] [INFO] channels - /r/littlespace: #helpers: : like, go all out, be glad someone wants to date you. D: +[2017-03-22 22:14:30.097] [INFO] channels - /r/littlespace: #mod: : Just makes it look chunkier. +[2017-03-22 22:14:31.721] [INFO] channels - /r/littlespace: #helpers: : i should send you sand +[2017-03-22 22:14:36.904] [INFO] channels - /r/littlespace: #helpers: : Blue has a lot of sand. +[2017-03-22 22:14:48.711] [INFO] channels - /r/littlespace: #helpers: : he actually did that? +[2017-03-22 22:14:53.639] [INFO] channels - /r/littlespace: #helpers: : ```[10:12 PM] Bman: Also like, the place I work has a buffet, so I can get an employee discount if I take her there :3c +``` +[2017-03-22 22:14:57.936] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> can I have pink sand +[2017-03-22 22:15:00.795] [INFO] channels - /r/littlespace: #helpers: : wow. amazing +[2017-03-22 22:15:09.090] [INFO] channels - /r/littlespace: #helpers: : i actually have a pound of red hydrophobic sand somewhere. +[2017-03-22 22:15:13.073] [INFO] channels - /r/littlespace: #helpers: : WHAT +[2017-03-22 22:15:15.585] [INFO] channels - /r/littlespace: #helpers: : wait why? +[2017-03-22 22:15:20.120] [INFO] channels - /r/littlespace: #helpers: : Ugh +[2017-03-22 22:15:21.886] [INFO] channels - /r/littlespace: #helpers: : cause i wanted some lol +[2017-03-22 22:15:23.478] [INFO] channels - /r/littlespace: #gaming: : OH MY GOD, WHAT A CUTE PUDDI +[2017-03-22 22:15:23.589] [INFO] channels - /r/littlespace: #helpers: : Gag +[2017-03-22 22:15:24.768] [INFO] channels - /r/littlespace: #helpers: : its fun to play with +[2017-03-22 22:15:27.145] [INFO] channels - /r/littlespace: #helpers: : It's kinky, that's why. +[2017-03-22 22:15:40.516] [INFO] channels - /r/littlespace: #helpers: : I officially don't like bman +[2017-03-22 22:15:45.628] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:15:45.795] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:15:48.979] [INFO] channels - /r/littlespace: #helpers: : ow +[2017-03-22 22:15:48.994] [INFO] channels - /r/littlespace: #general: : are you trying to be a caregiver for your girlfriend, or are you trying to get to know about it in a more in depth view? +[2017-03-22 22:15:49.140] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:16:11.395] [INFO] channels - /r/littlespace: #helpers: : Especially since I asked him for art and he TOLD ME COMMISSIONS OPENED SOON +[2017-03-22 22:16:12.798] [INFO] channels - /r/littlespace: #helpers: : ^ SAME +[2017-03-22 22:16:14.662] [INFO] channels - /r/littlespace: #helpers: : oh my god +[2017-03-22 22:16:16.881] [INFO] channels - /r/littlespace: #helpers: : he's so money minded +[2017-03-22 22:16:18.991] [INFO] channels - /r/littlespace: #helpers: : I DONT WANT YOUR SHITTY ART +[2017-03-22 22:16:26.634] [INFO] channels - /r/littlespace: #helpers: : I WAS JUST BEING NICE +[2017-03-22 22:16:31.949] [INFO] channels - /r/littlespace: #general: : **** both but mostly the first one +[2017-03-22 22:16:32.776] [INFO] channels - /r/littlespace: #helpers: : wow I am letting it all out +[2017-03-22 22:16:38.202] [INFO] channels - /r/littlespace: #helpers: : let it all out +[2017-03-22 22:17:08.031] [INFO] channels - /r/littlespace: #helpers: : I know right +[2017-03-22 22:17:13.716] [INFO] channels - /r/littlespace: #helpers: : no, Ariel his art is shit +[2017-03-22 22:17:27.339] [INFO] channels - /r/littlespace: #helpers: : You're 100% right. And I wouldn't spend a dollar on it. +[2017-03-22 22:17:38.073] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:17:38.243] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:17:49.632] [INFO] channels - /r/littlespace: #helpers: : Ugh +[2017-03-22 22:17:56.839] [INFO] channels - /r/littlespace: #helpers: : And wait can I just +[2017-03-22 22:18:06.359] [INFO] channels - /r/littlespace: #general: : Do you know what aspects she's interested in? +[2017-03-22 22:18:07.035] [INFO] channels - /r/littlespace: #helpers: : M90 is in security at target +[2017-03-22 22:18:11.666] [INFO] channels - /r/littlespace: #gaming: : IKR +[2017-03-22 22:18:15.069] [INFO] channels - /r/littlespace: #helpers: : Idk what else he's into +[2017-03-22 22:18:24.064] [INFO] channels - /r/littlespace: #helpers: : But he was giving art advice +[2017-03-22 22:18:29.333] [INFO] channels - /r/littlespace: #helpers: : Okay +[2017-03-22 22:18:34.076] [INFO] channels - /r/littlespace: #helpers: : I think I'm finished +[2017-03-22 22:18:39.516] [INFO] channels - /r/littlespace: #helpers: : Sorry +[2017-03-22 22:18:43.876] [INFO] channels - /r/littlespace: #helpers: : Wait you don't like m90 too? +[2017-03-22 22:19:02.454] [INFO] channels - /r/littlespace: #helpers: : Actually I can't remember who you don't like, I'm sorry LOL +[2017-03-22 22:19:04.720] [INFO] channels - /r/littlespace: #helpers: : I lost track +[2017-03-22 22:19:12.922] [INFO] channels - /r/littlespace: #helpers: : Lmfao +[2017-03-22 22:19:15.200] [INFO] channels - /r/littlespace: #vent: : lol I'm glad there won't be any fit throwing 😉 +[2017-03-22 22:19:18.315] [INFO] channels - /r/littlespace: #media_sharing: : I thought this was kinda funny tho, did mojoupgrade with my bf and one of the things we got was.. +[2017-03-22 22:19:19.023] [INFO] channels - /r/littlespace: #helpers: : He's not bad I just was annoyed +[2017-03-22 22:19:22.037] [INFO] channels - /r/littlespace: #helpers: : He actually +[2017-03-22 22:19:24.270] [INFO] channels - /r/littlespace: #media_sharing: : +[2017-03-22 22:19:29.448] [INFO] channels - /r/littlespace: #general: : !ping +[2017-03-22 22:19:32.491] [INFO] channels - /r/littlespace: #media_sharing: : Need to make them longer!! xD +[2017-03-22 22:19:33.822] [INFO] channels - /r/littlespace: #helpers: : **WARBIRD199#8210** deleted in <#173239631867805703>: !ping +[2017-03-22 22:19:35.033] [INFO] channels - /r/littlespace: #mod: : now +[2017-03-22 22:19:35.968] [INFO] channels - /r/littlespace: #helpers: : !ping +[2017-03-22 22:19:36.129] [INFO] channels - /r/littlespace: #helpers: : pong +[2017-03-22 22:19:39.153] [INFO] channels - /r/littlespace: #helpers: : Invited himself to mine and Mikey's group in Overwatch +[2017-03-22 22:19:39.720] [INFO] channels - /r/littlespace: #mod: : okay, it only sees Ow +[2017-03-22 22:19:43.479] [INFO] channels - /r/littlespace: #helpers: : okay, locking the bot to our channels for nwo +[2017-03-22 22:19:49.724] [INFO] channels - /r/littlespace: #helpers: : Without asking +[2017-03-22 22:19:53.761] [INFO] channels - /r/littlespace: #helpers: : Okie +[2017-03-22 22:20:06.563] [INFO] channels - /r/littlespace: #mod: : it has to be 'ow' not, Ow or OW and only that word. +[2017-03-22 22:20:07.246] [INFO] channels - /r/littlespace: #helpers: : Invited himself +[2017-03-22 22:20:09.127] [INFO] channels - /r/littlespace: #helpers: : Amazing +[2017-03-22 22:20:18.425] [INFO] channels - /r/littlespace: #mod: : Wait, why aren't we doing it capped like Ow? +[2017-03-22 22:20:24.717] [INFO] channels - /r/littlespace: #mod: : People use OW and ow for Overwatch. +[2017-03-22 22:20:28.236] [INFO] channels - /r/littlespace: #mod: : Not Ow +[2017-03-22 22:20:39.857] [INFO] channels - /r/littlespace: #general: : **** I don't know thw difference between aspects. shes embarrassed about it but I want her to feel comfortable with it +[2017-03-22 22:20:48.663] [INFO] channels - /r/littlespace: #mod: : Oh, only that word. +[2017-03-22 22:20:49.391] [INFO] channels - /r/littlespace: #vent: : I'm so bored I need daddy to entertain me! +[2017-03-22 22:20:49.797] [INFO] channels - /r/littlespace: #mod: : Well, I mean, you can use it in a sentence and the bot won't go. +[2017-03-22 22:20:51.229] [INFO] channels - /r/littlespace: #vent: : I'm the worst +[2017-03-22 22:20:53.467] [INFO] channels - /r/littlespace: #mod: : ow, that hurt +[2017-03-22 22:20:56.651] [INFO] channels - /r/littlespace: #mod: : see? +[2017-03-22 22:20:57.484] [INFO] channels - /r/littlespace: #mod: : Right. +[2017-03-22 22:21:05.752] [INFO] channels - /r/littlespace: #mod: : however, heart attack will not do that. :) +[2017-03-22 22:21:37.849] [INFO] channels - /r/littlespace: #mod: : OW +[2017-03-22 22:21:38.012] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:21:39.019] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:21:39.195] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:21:40.742] [INFO] channels - /r/littlespace: #mod: : Ow +[2017-03-22 22:21:40.970] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:21:44.899] [INFO] channels - /r/littlespace: #mod: : wow you guys +[2017-03-22 22:21:45.142] [INFO] channels - /r/littlespace: #mod: : oW +[2017-03-22 22:21:45.302] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:21:50.874] [INFO] channels - /r/littlespace: #helpers: : For sure and I didn't want to be rude so I accepted and it was so bad +[2017-03-22 22:21:57.395] [INFO] channels - /r/littlespace: #helpers: : Just annoying +[2017-03-22 22:22:05.990] [INFO] channels - /r/littlespace: #mod: : sorry for the spam, blue. +[2017-03-22 22:22:10.376] [INFO] channels - /r/littlespace: #mod: : SORRY +[2017-03-22 22:22:35.969] [INFO] channels - /r/littlespace: #mod: : All I keep seeing is Baymax and I'm confused. +[2017-03-22 22:22:37.315] [INFO] channels - /r/littlespace: #mod: : Should "hi" trigger the "Hello, I am Baymax" thing though? He only typically wakes up to "Ow" +[2017-03-22 22:22:42.924] [INFO] channels - /r/littlespace: #mod: : We're making a Baymax bot that's interactive! +[2017-03-22 22:22:52.918] [INFO] channels - /r/littlespace: #mod: : I'm just giving ideas. +[2017-03-22 22:22:54.772] [INFO] channels - /r/littlespace: #mod: : Neato. Imma check out for a bit. Talk to you guys later tonight. +[2017-03-22 22:23:05.469] [INFO] channels - /r/littlespace: #mod: : Okie dokie! See you later, alligator. +[2017-03-22 22:23:20.089] [INFO] channels - /r/littlespace: #helpers: : wait WHAT +[2017-03-22 22:23:21.304] [INFO] channels - /r/littlespace: #mod: : Hrm... +[2017-03-22 22:23:26.035] [INFO] channels - /r/littlespace: #mod: : We can decide on that. +[2017-03-22 22:23:39.924] [INFO] channels - /r/littlespace: #helpers: : Is m90 a bad player? +[2017-03-22 22:23:47.820] [INFO] channels - /r/littlespace: #helpers: : Because he seems like he'd be kinda bleh at it. +[2017-03-22 22:24:26.355] [INFO] channels - /r/littlespace: #mod: : Maybe "Ow" can do the "Hello, I am Baymax.." and ":'(" or some sad face can trigger there there? +[2017-03-22 22:24:36.452] [INFO] channels - /r/littlespace: #mod: : Because he's talking to Hiro about it being 'okay to cry' +[2017-03-22 22:24:40.990] [INFO] channels - /r/littlespace: #mod: : 😢 +[2017-03-22 22:24:47.026] [INFO] channels - /r/littlespace: #mod: : 😢 +[2017-03-22 22:24:48.190] [INFO] channels - /r/littlespace: #mod: : oh +[2017-03-22 22:24:50.386] [INFO] channels - /r/littlespace: #mod: : it makes an emoji +[2017-03-22 22:24:56.637] [INFO] channels - /r/littlespace: #mod: : )': +[2017-03-22 22:25:04.260] [INFO] channels - /r/littlespace: #mod: : That one? +[2017-03-22 22:25:17.485] [INFO] channels - /r/littlespace: #mod: : maybe +[2017-03-22 22:25:20.608] [INFO] channels - /r/littlespace: #mod: : 😢😢 +[2017-03-22 22:25:23.499] [INFO] channels - /r/littlespace: #mod: : 😢 +[2017-03-22 22:25:23.694] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:25:26.856] [INFO] channels - /r/littlespace: #mod: : YES +[2017-03-22 22:25:31.170] [INFO] channels - /r/littlespace: #helpers: : I really want to reply "nothing says love like an employee discount" +[2017-03-22 22:25:39.520] [INFO] channels - /r/littlespace: #mod: : OH YAY +[2017-03-22 22:25:42.487] [INFO] channels - /r/littlespace: #general: : **** O_O +[2017-03-22 22:25:54.311] [INFO] channels - /r/littlespace: #mod: : 😢 +[2017-03-22 22:25:54.515] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:25:55.210] [INFO] channels - /r/littlespace: #helpers: : Why am I hearing Thrift Shop in my head? +[2017-03-22 22:26:19.300] [INFO] channels - /r/littlespace: #helpers: : WHAT WHAT, WHAT WHAT +[2017-03-22 22:26:35.675] [INFO] channels - /r/littlespace: #helpers: : I'M GONNA DATE SOME GIRLS +[2017-03-22 22:26:38.318] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:26:38.488] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:26:43.878] [INFO] channels - /r/littlespace: #helpers: : ONLY GOT $20 IN MY POCKET +[2017-03-22 22:26:48.182] [INFO] channels - /r/littlespace: #helpers: : oh my god +[2017-03-22 22:26:51.382] [INFO] channels - /r/littlespace: #helpers: : thank god i'm AT HOME +[2017-03-22 22:26:55.510] [INFO] channels - /r/littlespace: #helpers: : i hate periods 😂 +[2017-03-22 22:26:56.108] [INFO] channels - /r/littlespace: #helpers: : .yt Thrift Shop +[2017-03-22 22:26:56.827] [INFO] channels - /r/littlespace: #helpers: : MACKLEMORE & RYAN LEWIS - THRIFT SHOP FEAT. WANZ (OFFICIAL VIDEO) - https://youtu.be/QK8mJJJvaes [ 1,042,517,484 views | 4.79 rating w/ 4,826,159 likes (209,176 dislikes) | Duration: 3m53s | Uploaded: 2012-08-29 by Ryan Lewis ] +[2017-03-22 22:27:18.420] [INFO] channels - /r/littlespace: #helpers: : Oh yaeh, I hate it when I get my period, <@234126386703499264>. +[2017-03-22 22:27:35.326] [INFO] channels - /r/littlespace: #helpers: : Walk up into the club like what up? I got stinky socks. +[2017-03-22 22:27:42.237] [INFO] channels - /r/littlespace: #helpers: : You like my PG remix? +[2017-03-22 22:27:43.480] [INFO] channels - /r/littlespace: #helpers: : Terrible. But he's a newb +[2017-03-22 22:27:49.049] [INFO] channels - /r/littlespace: #general: : Maybe you can sit down and talk to her about what she likes about being a little, and discuss about what she likes. Is it a sexual one? Or a non sexual one? How can you help her achieve littleness? Does she need a caregiver? Are you okay and interested to be her caregiver? +[2017-03-22 22:28:03.775] [INFO] channels - /r/littlespace: #helpers: : ikr, <@200944723035160576>. the worst thing ever! +[2017-03-22 22:28:06.045] [INFO] channels - /r/littlespace: #helpers: : At least you didn't reference: https://www.youtube.com/watch?feature=player_embedded&v=oeNQaofKcPA +[2017-03-22 22:28:10.345] [INFO] channels - /r/littlespace: #mod: : Ow +[2017-03-22 22:28:10.516] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:28:15.342] [INFO] channels - /r/littlespace: #helpers: : because that's terrible +[2017-03-22 22:28:18.087] [INFO] channels - /r/littlespace: #mod: : Ow! +[2017-03-22 22:28:19.291] [INFO] channels - /r/littlespace: #helpers: : I saw Macklemore live +[2017-03-22 22:28:29.533] [INFO] channels - /r/littlespace: #helpers: : WOAH REALLY +[2017-03-22 22:28:32.093] [INFO] channels - /r/littlespace: #helpers: : I'm.. kinda jealous. +[2017-03-22 22:28:36.884] [INFO] channels - /r/littlespace: #helpers: : Hang on +[2017-03-22 22:28:37.891] [INFO] channels - /r/littlespace: #mod: : Ow! +[2017-03-22 22:28:37.936] [INFO] channels - /r/littlespace: #helpers: : Also that remix is horrible omg +[2017-03-22 22:28:38.064] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:28:42.992] [INFO] channels - /r/littlespace: #mod: : Ow. +[2017-03-22 22:28:44.631] [INFO] channels - /r/littlespace: #mod: : Ow! +[2017-03-22 22:28:44.792] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:28:50.235] [INFO] channels - /r/littlespace: #mod: : YAY +[2017-03-22 22:28:54.592] [INFO] channels - /r/littlespace: #helpers: : Oh my god +[2017-03-22 22:28:56.373] [INFO] channels - /r/littlespace: #mod: : It just needs the .gif. +[2017-03-22 22:28:58.181] [INFO] channels - /r/littlespace: #mod: : Ow. +[2017-03-22 22:28:58.337] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:29:01.966] [INFO] channels - /r/littlespace: #mod: : I'm sure you're working on it though. +[2017-03-22 22:29:03.248] [INFO] channels - /r/littlespace: #mod: : Ow. +[2017-03-22 22:29:03.456] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:29:04.317] [INFO] channels - /r/littlespace: #mod: : Ow! +[2017-03-22 22:29:04.512] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:29:07.105] [INFO] channels - /r/littlespace: #helpers: : Umaru is like me. She is me. She IS me +[2017-03-22 22:29:11.824] [INFO] channels - /r/littlespace: #helpers: : RIGHT? +[2017-03-22 22:29:16.774] [INFO] channels - /r/littlespace: #helpers: : IKR LOL OH MY GOD +[2017-03-22 22:29:19.396] [INFO] channels - /r/littlespace: #helpers: : She basically has a 'little' version. +[2017-03-22 22:29:22.607] [INFO] channels - /r/littlespace: #helpers: : YA +[2017-03-22 22:29:28.366] [INFO] channels - /r/littlespace: #helpers: : And that little is so bratty it's me +[2017-03-22 22:29:32.130] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-22 22:29:34.586] [INFO] channels - /r/littlespace: #helpers: : I'm gonna tell my caregiver to watch it +[2017-03-22 22:29:43.948] [INFO] channels - /r/littlespace: #helpers: : Can I attach videos...? +[2017-03-22 22:30:35.318] [INFO] channels - /r/littlespace: #helpers: : Unfortunately not. Discord doesn't do videos weirdly enough +[2017-03-22 22:31:27.206] [INFO] channels - /r/littlespace: #helpers: : I can +[2017-03-22 22:31:34.631] [INFO] channels - /r/littlespace: #helpers: : It just has to be way smaller +[2017-03-22 22:31:38.362] [INFO] channels - /r/littlespace: #helpers: : Shrug +[2017-03-22 22:31:42.668] [INFO] channels - /r/littlespace: #helpers: : Oh +[2017-03-22 22:31:45.125] [INFO] channels - /r/littlespace: #helpers: : Ow. +[2017-03-22 22:31:45.495] [INFO] channels - /r/littlespace: #helpers: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:31:48.505] [INFO] channels - /r/littlespace: #helpers: : Hehehe. +[2017-03-22 22:31:48.606] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-22 22:31:48.799] [INFO] channels - /r/littlespace: #helpers: : *mic drop* +[2017-03-22 22:31:57.239] [INFO] channels - /r/littlespace: #helpers: : That's cute +[2017-03-22 22:32:02.424] [INFO] channels - /r/littlespace: #helpers: : No, this is. +[2017-03-22 22:32:03.449] [INFO] channels - /r/littlespace: #helpers: : 😢 +[2017-03-22 22:32:03.630] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 22:33:07.408] [INFO] channels - /r/littlespace: #mod: : +[2017-03-22 22:33:08.724] [INFO] channels - /r/littlespace: #mod: : This is also cute. +[2017-03-22 22:35:38.579] [INFO] channels - /r/littlespace: #helpers: : <:Umaru:270955595836686356> +[2017-03-22 22:35:48.325] [INFO] channels - /r/littlespace: #helpers: : https://youtu.be/LzfIVZg4Tvg +[2017-03-22 22:35:55.688] [INFO] channels - /r/littlespace: #helpers: : I did this for you +[2017-03-22 22:35:58.881] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112> +[2017-03-22 22:35:59.284] [INFO] channels - /r/littlespace: #helpers: : AWWW +[2017-03-22 22:36:15.549] [INFO] channels - /r/littlespace: #helpers: : I should upload all of my concert videos +[2017-03-22 22:36:19.159] [INFO] channels - /r/littlespace: #helpers: : I go to a lot +[2017-03-22 22:36:25.052] [INFO] channels - /r/littlespace: #helpers: : wooaahh he looks so different! +[2017-03-22 22:36:32.719] [INFO] channels - /r/littlespace: #helpers: : Hd bb +[2017-03-22 22:36:32.859] [INFO] channels - /r/littlespace: #helpers: : you should go for the tdcc one if they're in your area, really! +[2017-03-22 22:36:43.527] [INFO] channels - /r/littlespace: #helpers: : I would love too!! +[2017-03-22 22:36:53.564] [INFO] channels - /r/littlespace: #helpers: : He was sooooo close to me +[2017-03-22 22:36:58.786] [INFO] channels - /r/littlespace: #helpers: : I was in the second row +[2017-03-22 22:37:56.077] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-22 22:37:56.281] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 22:38:05.662] [INFO] channels - /r/littlespace: #mod: : Okay, cool. I just crashed him by sending him a DM. +[2017-03-22 22:38:07.353] [INFO] channels - /r/littlespace: #mod: : Disabled that. +[2017-03-22 22:38:23.808] [INFO] channels - /r/littlespace: #helpers: : omg good charlotte +[2017-03-22 22:38:26.175] [INFO] channels - /r/littlespace: #helpers: : they're still around?! +[2017-03-22 22:38:37.365] [INFO] channels - /r/littlespace: #general: : **** eah you're right. im trying to get her to open up about it. im also just +[2017-03-22 22:38:37.994] [INFO] channels - /r/littlespace: #helpers: : i missed out on temper trap, sadly +[2017-03-22 22:39:00.143] [INFO] channels - /r/littlespace: #general: : **** a little confused about the thing as a whole. I don't understand it I guess but open to learn +[2017-03-22 22:39:09.009] [INFO] channels - /r/littlespace: #helpers: : Heading out for a few to get some soda. Back shortly. +[2017-03-22 22:39:23.988] [INFO] channels - /r/littlespace: #helpers: : OH MY GOD ARIEL I SAW YOUR VIDEO RESUME +[2017-03-22 22:39:28.185] [INFO] channels - /r/littlespace: #helpers: : IT'S SO CUTE +[2017-03-22 22:40:45.517] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-22 22:40:55.161] [INFO] channels - /r/littlespace: #helpers: : Omg why would you watch that +[2017-03-22 22:40:55.467] [INFO] channels - /r/littlespace: #general: : it does get pretty embarrassing for an individual to talk about their kinks, especially one like this because it can be pretty confusing when there are a lot of negative perception of this dynamic floating around. maybe if you have any specific questions that you might want to ask? so that we can slowly start to help you clear up any possible misconceptions that you have about this dynamic? +[2017-03-22 22:41:05.772] [INFO] channels - /r/littlespace: #helpers: : I was actually going to share with you guys lol +[2017-03-22 22:41:11.216] [INFO] channels - /r/littlespace: #helpers: : It's from my senior year +[2017-03-22 22:41:23.457] [INFO] channels - /r/littlespace: #helpers: : It's adorable though omg +[2017-03-22 22:41:31.873] [INFO] channels - /r/littlespace: #general: : also, it's really good that you're open to learning about this. i'm happy that your girlfriend has someone as open minded as you because sometimes, people shut down when it's a foreign concept and they do not accept it! 😃 +[2017-03-22 22:41:48.747] [INFO] channels - /r/littlespace: #helpers: : what +[2017-03-22 22:41:50.968] [INFO] channels - /r/littlespace: #helpers: : let me stalk her youtube +[2017-03-22 22:42:19.919] [INFO] channels - /r/littlespace: #helpers: : Lmfao +[2017-03-22 22:42:26.123] [INFO] channels - /r/littlespace: #helpers: : There not a lot on there +[2017-03-22 22:42:29.328] [INFO] channels - /r/littlespace: #helpers: : love your voice, though +[2017-03-22 22:42:39.606] [INFO] channels - /r/littlespace: #helpers: : and you're so cute +[2017-03-22 22:43:30.498] [INFO] channels - /r/littlespace: #helpers: : Oh guys +[2017-03-22 22:43:55.541] [INFO] channels - /r/littlespace: #helpers: : I was about 50lbs heavier there ugh +[2017-03-22 22:44:03.502] [INFO] channels - /r/littlespace: #helpers: : but you're still cute so shush +[2017-03-22 22:44:12.163] [INFO] channels - /r/littlespace: #helpers: : I know! Cute fat blob! +[2017-03-22 22:44:21.056] [INFO] channels - /r/littlespace: #helpers: : i need to squish you +[2017-03-22 22:44:25.641] [INFO] channels - /r/littlespace: #helpers: : i'm very skinny geez +[2017-03-22 22:44:26.875] [INFO] channels - /r/littlespace: #helpers: : i hate it +[2017-03-22 22:46:12.167] [INFO] channels - /r/littlespace: #general: : **** don't think I have any specific questions I just don't know essentially anything about it. not sure I understand the appeal. ill admit I did almost write it off as weird but I just wanna make her feel comfortable and accepted. I have no idea what im supposed to do +[2017-03-22 22:46:57.440] [INFO] channels - /r/littlespace: #helpers: : *wants that life* +[2017-03-22 22:47:12.150] [INFO] channels - /r/littlespace: #helpers: : it's not nice, but *shrug* +[2017-03-22 22:47:13.330] [INFO] channels - /r/littlespace: #helpers: : genes +[2017-03-22 22:47:50.631] [INFO] channels - /r/littlespace: #general: : let me see if there's something more in depth about it, that i can link you to? +[2017-03-22 22:49:22.812] [INFO] channels - /r/littlespace: #helpers: : just asking, can irc members see other channels ? or is it just general +[2017-03-22 22:49:36.743] [INFO] channels - /r/littlespace: #helpers: : <@!142051746716450816> joined the server. +[2017-03-22 22:49:50.316] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112> +[2017-03-22 22:49:53.384] [INFO] channels - /r/littlespace: #helpers: : ^^^ +[2017-03-22 22:51:16.436] [INFO] channels - /r/littlespace: #general: : Welcome <@142051746716450816>! +[2017-03-22 22:52:53.188] [INFO] channels - /r/littlespace: #general: : <@142051746716450816> long time no see! (Unless you're not the same Zipper I'm thinking of.) +[2017-03-22 22:53:00.573] [INFO] channels - /r/littlespace: #general: : **** how do I accommodate her then? is there anything I could read to just like generally get more familiar with the concept +[2017-03-22 22:53:43.723] [INFO] channels - /r/littlespace: #general: : Nah nanako its the same zipper +[2017-03-22 22:53:55.554] [INFO] channels - /r/littlespace: #general: : Then I retract my welcome +[2017-03-22 22:53:59.755] [INFO] channels - /r/littlespace: #general: : And add a back!! +[2017-03-22 22:54:01.456] [INFO] channels - /r/littlespace: #general: : I was cleaning out my DM's and found chats with ppl from here, figured id come back cause fuck it +[2017-03-22 22:54:06.421] [INFO] channels - /r/littlespace: #general: : thx +[2017-03-22 22:54:25.586] [INFO] channels - /r/littlespace: #general: : Oh wow! How have you been? +[2017-03-22 22:54:51.098] [INFO] channels - /r/littlespace: #general: : pfffft that'd take a while to answer +[2017-03-22 22:54:51.859] [INFO] channels - /r/littlespace: #general: : im +[2017-03-22 22:54:54.473] [INFO] channels - /r/littlespace: #media_sharing: : +[2017-03-22 22:54:55.402] [INFO] channels - /r/littlespace: #general: : im eh right now +[2017-03-22 22:55:17.261] [INFO] channels - /r/littlespace: #general: : Well, we finally made a <#276765230321762305> channel in the event you want to talk about anything on your mind! 😄 +[2017-03-22 22:55:22.132] [INFO] channels - /r/littlespace: #general: : sweet +[2017-03-22 22:55:22.664] [INFO] channels - /r/littlespace: #general: : Though eh is better then bad, I suppose. +[2017-03-22 22:55:26.803] [INFO] channels - /r/littlespace: #media_sharing: : WHEN MY INSTRUCTOR TOLD ME THE HOSPITAL I'M TAKING MY EMT-B CLASSES AT WAS ARHAM I THOUGHT HE WAS LYING +[2017-03-22 22:55:35.330] [INFO] channels - /r/littlespace: #general: : <:Umaru:270955595836686356> +[2017-03-22 22:55:39.598] [INFO] channels - /r/littlespace: #general: : eh is just the nice way of saying things that i should put in vent +[2017-03-22 22:55:55.552] [INFO] channels - /r/littlespace: #media_sharing: : mfw you could've posted this in <#179365624332419073> +[2017-03-22 22:55:58.711] [INFO] channels - /r/littlespace: #media_sharing: : <:UmaruNap:270955695581429761> +[2017-03-22 22:56:03.372] [INFO] channels - /r/littlespace: #media_sharing: : JUST KIDDING IT'S REALLY COOL +[2017-03-22 22:56:08.447] [INFO] channels - /r/littlespace: #helpers: : *twiddles thumbs* +[2017-03-22 22:56:17.393] [INFO] channels - /r/littlespace: #helpers: : **Nanako#9786** deleted in <#223528951857938442>: mfw you could've posted this in <#179365624332419073> +[2017-03-22 22:56:20.031] [INFO] channels - /r/littlespace: #helpers: : **Nanako#9786** deleted in <#223528951857938442>: JUST KIDDING IT'S REALLY COOL +[2017-03-22 22:56:22.986] [INFO] channels - /r/littlespace: #helpers: : **Nanako#9786** deleted in <#223528951857938442>: <:UmaruNap:270955695581429761> +[2017-03-22 22:56:35.220] [INFO] channels - /r/littlespace: #helpers: : Lmfao +[2017-03-22 22:56:38.297] [INFO] channels - /r/littlespace: #helpers: : Ryo corrected me and I feel silly. +[2017-03-22 22:56:46.324] [INFO] channels - /r/littlespace: #helpers: : 😮 +[2017-03-22 22:56:53.166] [INFO] channels - /r/littlespace: #helpers: : <:UmaruGrr:270955669589458946> +[2017-03-22 22:56:59.039] [INFO] channels - /r/littlespace: #helpers: : <:UmaruGrr:270955669589458946> +[2017-03-22 22:57:03.742] [INFO] channels - /r/littlespace: #media_sharing: : My brother would love this holy carp +[2017-03-22 22:57:18.285] [INFO] channels - /r/littlespace: #general: : Ohh. Well, you're free to pop in and talk about it! +[2017-03-22 22:57:26.982] [INFO] channels - /r/littlespace: #media_sharing: : holy.. 🐟 +[2017-03-22 22:57:44.796] [INFO] channels - /r/littlespace: #general: : honestly im just trying to like, figure out what exactly it is thats messing with my head +[2017-03-22 22:58:21.132] [INFO] channels - /r/littlespace: #general: : We've all been there! Being an adult is hard. +[2017-03-22 22:59:29.490] [INFO] channels - /r/littlespace: #general: : ah aybb, you can probably try and google ddlg, and the first few posts are pretty useful! +[2017-03-22 22:59:56.236] [INFO] channels - /r/littlespace: #helpers: : LmfO +[2017-03-22 23:00:00.540] [INFO] channels - /r/littlespace: #helpers: : This is great +[2017-03-22 23:00:17.530] [INFO] channels - /r/littlespace: #helpers: : what +[2017-03-22 23:00:19.721] [INFO] channels - /r/littlespace: #helpers: : what happened to zipper +[2017-03-22 23:00:24.587] [INFO] channels - /r/littlespace: #helpers: : i feel sad for zipper i want to give them a hug +[2017-03-22 23:00:27.734] [INFO] channels - /r/littlespace: #general: : aybb, I suggest reading https://www.reddit.com/r/littlespace/wiki/faq and https://www.reddit.com/r/littlespace/comments/2gmjx8/some_of_the_most_important_things_i_have_learned/ +[2017-03-22 23:00:42.498] [INFO] channels - /r/littlespace: #general: : but also if you're confused, definitely post on the subreddit itself asking for opinions!! +[2017-03-22 23:01:23.567] [INFO] channels - /r/littlespace: #general: : It's great that you want to make your partner happy, but remember not to make yourself do anything you aren't comfortable with. +[2017-03-22 23:01:49.578] [INFO] channels - /r/littlespace: #helpers: : They've always been a little sad/meh, honestly. +[2017-03-22 23:01:49.733] [INFO] channels - /r/littlespace: #general: : ^ THIS. i can't stop emphasising this +[2017-03-22 23:02:30.116] [INFO] channels - /r/littlespace: #helpers: : 😦 +[2017-03-22 23:03:16.636] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> just general +[2017-03-22 23:03:19.754] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> https://www.youtube.com/watch?v=j7Wn0GbTkts +[2017-03-22 23:03:27.076] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> thanksssss +[2017-03-22 23:03:31.042] [INFO] channels - /r/littlespace: #helpers: : so i went to the gas station for a soda, and i forgot to get a soda +[2017-03-22 23:03:38.989] [INFO] channels - /r/littlespace: #helpers: : amazing. you're so wonderfu. +[2017-03-22 23:03:43.514] [INFO] channels - /r/littlespace: #helpers: : can't spell today +[2017-03-22 23:03:57.417] [INFO] channels - /r/littlespace: #helpers: : well, i got in my car and realised i needed gas... so i went and got gas and drove home... +[2017-03-22 23:04:00.355] [INFO] channels - /r/littlespace: #helpers: : /facepalm +[2017-03-22 23:04:38.849] [INFO] channels - /r/littlespace: #helpers: : 😂 +[2017-03-22 23:05:06.787] [INFO] channels - /r/littlespace: #general: : One of the most important things, at least personally is to remember that even if she wants to be a little, that doesn't mean there's a set list of things she wants. No ddlg or cg/l relationship will be the same, and in each and everyone of them, the partners will have seperate interests, things they dislike, and things they like. +[2017-03-22 23:05:46.403] [INFO] channels - /r/littlespace: #general: : and yeah, ^ too +[2017-03-22 23:05:59.205] [INFO] channels - /r/littlespace: #general: : one little can like so and so activities, but another little might not +[2017-03-22 23:07:08.901] [INFO] channels - /r/littlespace: #general: : And some littles are 'lifestyle' littles, and some only want it sometimes. +[2017-03-22 23:07:15.178] [INFO] channels - /r/littlespace: #general: : Some want it in the bedroom, and some are purely non-sexual. +[2017-03-22 23:07:26.718] [INFO] channels - /r/littlespace: #general: : ..And some want both. +[2017-03-22 23:07:51.665] [INFO] channels - /r/littlespace: #general: : Very good point! +[2017-03-22 23:10:01.840] [INFO] channels - /r/littlespace: #mod: : heart attack +[2017-03-22 23:10:04.994] [INFO] channels - /r/littlespace: #mod: : sigh +[2017-03-22 23:10:05.199] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:05.367] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:05.532] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:05.696] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:05.852] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:08.905] [INFO] channels - /r/littlespace: #mod: : holy fuck +[2017-03-22 23:10:12.416] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:12.599] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:12.782] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:12.989] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:13.159] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:21.422] [INFO] channels - /r/littlespace: #general: : *rolls in* +[2017-03-22 23:10:49.973] [INFO] channels - /r/littlespace: #mod: : heart attack +[2017-03-22 23:10:50.165] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:55.714] [INFO] channels - /r/littlespace: #mod: : that almost gave me a heart attack +[2017-03-22 23:10:55.914] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:10:57.715] [INFO] channels - /r/littlespace: #mod: : YES +[2017-03-22 23:11:27.941] [INFO] channels - /r/littlespace: #helpers: : coldplay's next week and i'm NOT GOING +[2017-03-22 23:11:38.042] [INFO] channels - /r/littlespace: #helpers: : fdhasjklhdfjk just because i went for two door and i'm broke *cries* +[2017-03-22 23:11:40.641] [INFO] channels - /r/littlespace: #helpers: : _doesn't like coldplay._ +[2017-03-22 23:11:47.553] [INFO] channels - /r/littlespace: #helpers: : *i'm okay with coldplay* +[2017-03-22 23:12:03.896] [INFO] channels - /r/littlespace: #helpers: : but i'm sad because it's a huge thing apparently and and i managed to buy the tickets, but it's not for me +[2017-03-22 23:13:13.596] [INFO] channels - /r/littlespace: #helpers: : I like them, and their new stuff especialy. +[2017-03-22 23:13:21.988] [INFO] channels - /r/littlespace: #helpers: : what else do you like, nanako? +[2017-03-22 23:13:40.981] [INFO] channels - /r/littlespace: #helpers: : and war, of course +[2017-03-22 23:14:05.701] [INFO] channels - /r/littlespace: #helpers: : I'm a metal head though, so that may be why I'm picky. I listen to all types though, blues one day, rap the next, EDM after that. It all just depends on what is recommended. +[2017-03-22 23:14:12.314] [INFO] channels - /r/littlespace: #helpers: : I was on a country kick for like a month. +[2017-03-22 23:14:19.331] [INFO] channels - /r/littlespace: #helpers: : what a far jump, geez +[2017-03-22 23:14:27.115] [INFO] channels - /r/littlespace: #helpers: : what metal stuff do you listen to? +[2017-03-22 23:15:11.435] [INFO] channels - /r/littlespace: #helpers: : A7X, Breaking Benjamin, Shinedown, FFDP, Atryu, All That Remains, that kinda stuff. But I also have a thing for 80s hair bands and 80s metal too. lol +[2017-03-22 23:15:31.210] [INFO] channels - /r/littlespace: #helpers: : _is listening to Queen right now, actually._ +[2017-03-22 23:15:35.798] [INFO] channels - /r/littlespace: #helpers: : oooh, i've been into halestorm recently +[2017-03-22 23:15:40.170] [INFO] channels - /r/littlespace: #helpers: : and i love the pretty reckless +[2017-03-22 23:15:40.895] [INFO] channels - /r/littlespace: #helpers: : I love Halestorm! +[2017-03-22 23:15:47.370] [INFO] channels - /r/littlespace: #helpers: : i had a thing for nightwish last time, but my ex ruined it for me +[2017-03-22 23:15:54.284] [INFO] channels - /r/littlespace: #helpers: : omg yay!!!! hi 5!!!!! +[2017-03-22 23:15:58.058] [INFO] channels - /r/littlespace: #helpers: : Besties! +[2017-03-22 23:16:09.665] [INFO] channels - /r/littlespace: #helpers: : a lot of my metal/rock friends don't know/like TPR and halestorm so i'm really sad +[2017-03-22 23:16:18.639] [INFO] channels - /r/littlespace: #helpers: : My favorite bands are Mystery Skulls, Daft Punk, Maroon 5, Imagine Dragons, Madeon, WRLD, Cartoon, Fall Out Boy, Gorillaz, twenty one pilots +[2017-03-22 23:16:27.578] [INFO] channels - /r/littlespace: #helpers: : i *LOVE* TPR. caregiver's annoyed bc i hog the aux cable and always listen to them >_> +[2017-03-22 23:16:38.794] [INFO] channels - /r/littlespace: #helpers: : TPR is good to though. +[2017-03-22 23:16:39.269] [INFO] channels - /r/littlespace: #helpers: : OMG NANAKO YES FALL OUT BOY YESSSSA +[2017-03-22 23:16:41.974] [INFO] channels - /r/littlespace: #helpers: : too* +[2017-03-22 23:16:46.278] [INFO] channels - /r/littlespace: #helpers: : but I don't know that many songs from them. +[2017-03-22 23:16:55.376] [INFO] channels - /r/littlespace: #helpers: : they improved so much for the last album +[2017-03-22 23:16:55.584] [INFO] channels - /r/littlespace: #helpers: : I also like P!ATD but not as much as I love FOB. +[2017-03-22 23:17:01.418] [INFO] channels - /r/littlespace: #helpers: : omg i love you nanako +[2017-03-22 23:17:05.949] [INFO] channels - /r/littlespace: #helpers: : ❤ ❤ ❤ +[2017-03-22 23:17:09.836] [INFO] channels - /r/littlespace: #helpers: : i love p!atd too, but i don't rly like them now +[2017-03-22 23:17:09.954] [INFO] channels - /r/littlespace: #mod: : LMAO +[2017-03-22 23:17:11.149] [INFO] channels - /r/littlespace: #helpers: : I only know one Panic song. +[2017-03-22 23:17:17.033] [INFO] channels - /r/littlespace: #helpers: : let me introduce you to tdcc please nanako i think you'll like it +[2017-03-22 23:17:17.961] [INFO] channels - /r/littlespace: #helpers: : and I feel cancerous just knowing that. +[2017-03-22 23:17:22.680] [INFO] channels - /r/littlespace: #mod: : I'm having a heart attack. +[2017-03-22 23:17:22.894] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. +[2017-03-22 23:17:29.528] [INFO] channels - /r/littlespace: #helpers: : most of my fob and p@td fan friends love tdcc too +[2017-03-22 23:17:30.985] [INFO] channels - /r/littlespace: #mod: : DON'T GIVE ME A HEART ATTACK +[2017-03-22 23:17:33.194] [INFO] channels - /r/littlespace: #mod: : oh okay +[2017-03-22 23:17:34.024] [INFO] channels - /r/littlespace: #mod: : no caps +[2017-03-22 23:17:41.403] [INFO] channels - /r/littlespace: #mod: : :D +[2017-03-22 23:17:47.349] [INFO] channels - /r/littlespace: #helpers: : tdcc? +[2017-03-22 23:17:51.648] [INFO] channels - /r/littlespace: #mod: : nobody said Baymax was intelligent. +[2017-03-22 23:17:59.033] [INFO] channels - /r/littlespace: #helpers: : I saw both panic and fob +[2017-03-22 23:18:00.204] [INFO] channels - /r/littlespace: #helpers: : two door cinema club!!!! +[2017-03-22 23:18:03.376] [INFO] channels - /r/littlespace: #helpers: : I'M JEALOUS +[2017-03-22 23:18:06.054] [INFO] channels - /r/littlespace: #helpers: : fob never comes to singapore +[2017-03-22 23:18:06.777] [INFO] channels - /r/littlespace: #helpers: : Ooh I've heard of one of their songs! +[2017-03-22 23:18:09.954] [INFO] channels - /r/littlespace: #helpers: : Or maybe a few +[2017-03-22 23:18:11.512] [INFO] channels - /r/littlespace: #helpers: : WHICH ONE +[2017-03-22 23:18:16.385] [INFO] channels - /r/littlespace: #helpers: : pls love them +[2017-03-22 23:18:21.619] [INFO] channels - /r/littlespace: #helpers: : I think it was um +[2017-03-22 23:18:21.837] [INFO] channels - /r/littlespace: #helpers: : i love them so much i went cray for their concert +[2017-03-22 23:18:27.579] [INFO] channels - /r/littlespace: #helpers: : What You Know +[2017-03-22 23:18:31.180] [INFO] channels - /r/littlespace: #helpers: : which I liked! +[2017-03-22 23:18:41.325] [INFO] channels - /r/littlespace: #helpers: : OH!! +[2017-03-22 23:18:44.154] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=LLK4oaXUuLg +[2017-03-22 23:18:47.706] [INFO] channels - /r/littlespace: #helpers: : that album's so pumpy i love it +[2017-03-22 23:19:02.607] [INFO] channels - /r/littlespace: #helpers: : war, have you heard the new album by TPR? +[2017-03-22 23:19:03.748] [INFO] channels - /r/littlespace: #helpers: : I'm definitely going to listen to it while I travel to classes tomorrow morning. +[2017-03-22 23:19:15.988] [INFO] channels - /r/littlespace: #helpers: : yes!! their new album is so good too. it's so 80s and disco pop i love it +[2017-03-22 23:19:19.975] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> i'm not certain +[2017-03-22 23:19:23.941] [INFO] channels - /r/littlespace: #mod: : I feel like caps would be useful too.. maybe. +[2017-03-22 23:19:25.938] [INFO] channels - /r/littlespace: #helpers: : I listen to whatever GPM recommends usually. +[2017-03-22 23:19:29.219] [INFO] channels - /r/littlespace: #helpers: : GPM? +[2017-03-22 23:19:31.122] [INFO] channels - /r/littlespace: #mod: : DON'T SAY THAT ABOUT HIM +[2017-03-22 23:19:34.063] [INFO] channels - /r/littlespace: #helpers: : Google Play Music. +[2017-03-22 23:19:38.289] [INFO] channels - /r/littlespace: #helpers: : ahhh, okay +[2017-03-22 23:19:57.190] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=R4IBaMQEuuI <@200944723035160576> +[2017-03-22 23:20:28.749] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-22 23:20:29.831] [INFO] channels - /r/littlespace: #helpers: : I need it +[2017-03-22 23:20:38.576] [INFO] channels - /r/littlespace: #helpers: : oh god yes i need this too +[2017-03-22 23:20:51.285] [INFO] channels - /r/littlespace: #mod: : !bacon +[2017-03-22 23:20:51.501] [INFO] channels - /r/littlespace: #mod: : *gives WARBIRD199a strip of delicious bacon. +[2017-03-22 23:20:54.190] [INFO] channels - /r/littlespace: #mod: : sigh +[2017-03-22 23:20:55.043] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> but this album's more rock, than metal though! +[2017-03-22 23:21:06.698] [INFO] channels - /r/littlespace: #mod: : !bacon +[2017-03-22 23:21:06.868] [INFO] channels - /r/littlespace: #mod: : *gives WARBIRD199 a strip of delicious bacon.* +[2017-03-22 23:21:10.792] [INFO] channels - /r/littlespace: #helpers: : I can't do metal +[2017-03-22 23:21:16.655] [INFO] channels - /r/littlespace: #mod: : !bacon +[2017-03-22 23:21:16.817] [INFO] channels - /r/littlespace: #mod: : *gives @WARBIRD199 a strip of delicious bacon.* +[2017-03-22 23:21:22.338] [INFO] channels - /r/littlespace: #mod: : HOW THE FUCK DO YOU MENTION +[2017-03-22 23:21:25.326] [INFO] channels - /r/littlespace: #helpers: : i am fine with metal actually. it's just screamo that turns me off a lot +[2017-03-22 23:21:32.686] [INFO] channels - /r/littlespace: #helpers: : I'm surprised tbh +[2017-03-22 23:21:41.271] [INFO] channels - /r/littlespace: #helpers: : Meep is so smile and cute and yet she listens to metal. +[2017-03-22 23:21:45.390] [INFO] channels - /r/littlespace: #helpers: : Smol* +[2017-03-22 23:21:46.208] [INFO] channels - /r/littlespace: #helpers: : oh my god +[2017-03-22 23:21:46.415] [INFO] channels - /r/littlespace: #helpers: : Rock is fine, <@234126386703499264>. +[2017-03-22 23:21:55.875] [INFO] channels - /r/littlespace: #helpers: : slipknot's my favourite thing to run to actually +[2017-03-22 23:22:02.024] [INFO] channels - /r/littlespace: #helpers: : like ahhhh holy shit fam okay *runs harder* +[2017-03-22 23:22:03.179] [INFO] channels - /r/littlespace: #helpers: : I don't mind screaming if they can be harmonic about it. +[2017-03-22 23:22:12.419] [INFO] channels - /r/littlespace: #helpers: : Screaming to scream doesn't appeal. +[2017-03-22 23:22:16.278] [INFO] channels - /r/littlespace: #helpers: : But like I love Slipknot. +[2017-03-22 23:22:24.099] [INFO] channels - /r/littlespace: #helpers: : i'm smol and kyute and *fierce* +[2017-03-22 23:22:29.384] [INFO] channels - /r/littlespace: #helpers: : I don't like screamo either, but I used to love A Day To Remember because it worked well. +[2017-03-22 23:22:38.433] [INFO] channels - /r/littlespace: #helpers: : I still have their first few albums on my phone. +[2017-03-22 23:22:44.302] [INFO] channels - /r/littlespace: #helpers: : I Prevail has been a new thing for me too. +[2017-03-22 23:22:46.757] [INFO] channels - /r/littlespace: #helpers: : oh my god. i LOVE MCR +[2017-03-22 23:22:52.735] [INFO] channels - /r/littlespace: #helpers: : .yt Stuck in Your Head - I Prevail +[2017-03-22 23:22:53.430] [INFO] channels - /r/littlespace: #helpers: : I Prevail - Stuck In Your Head (Official Music Video) - https://youtu.be/5keRbrVx-G4 [ 4,089,583 views | 4.88 rating w/ 44,981 likes (1,069 dislikes) | Duration: 4m44s | Uploaded: 2016-10-22 by Fearless Records ] +[2017-03-22 23:22:56.311] [INFO] channels - /r/littlespace: #helpers: : i needed to just let it out of me +[2017-03-22 23:23:11.727] [INFO] channels - /r/littlespace: #show_and_tell: : +[2017-03-22 23:23:17.586] [INFO] channels - /r/littlespace: #helpers: : I'm more of a.. old disco and dance kinda girl. +[2017-03-22 23:23:19.536] [INFO] channels - /r/littlespace: #show_and_tell: : minimalistic feels good +[2017-03-22 23:23:20.712] [INFO] channels - /r/littlespace: #helpers: : oh, and glass animals too +[2017-03-22 23:23:22.508] [INFO] channels - /r/littlespace: #helpers: : Like.. +[2017-03-22 23:23:27.675] [INFO] channels - /r/littlespace: #helpers: : .yt Rhytm of the Night +[2017-03-22 23:23:28.347] [INFO] channels - /r/littlespace: #helpers: : Khmer Song : RHM DVD Vol.113 [HD] - Preap Sovath : " Night in Hong Kong City " - https://youtu.be/v9fNVVucMvY [ 33,308 views | 4.03 rating w/ 25 likes (6 dislikes) | Duration: 3m50s | Uploaded: 2012-08-21 by Tantan310 - តាន់តាន់៣១០ ] +[2017-03-22 23:23:33.515] [INFO] channels - /r/littlespace: #helpers: : I SPELLED IT WRONG +[2017-03-22 23:23:35.048] [INFO] channels - /r/littlespace: #helpers: : FFA +[2017-03-22 23:23:40.746] [INFO] channels - /r/littlespace: #helpers: : OH MY GOD +[2017-03-22 23:23:47.138] [INFO] channels - /r/littlespace: #helpers: : .yt Rhythm of the night Corona +[2017-03-22 23:23:47.882] [INFO] channels - /r/littlespace: #helpers: : Corona - Rhythm of the Night (Flo Rida Electro Remix) - https://youtu.be/As_JF9F4ZqU [ 160,201 views | 4.8 rating w/ 237 likes (10 dislikes) | Duration: 3m54s | Uploaded: 2009-12-27 by fLip 04 ] +[2017-03-22 23:23:53.916] [INFO] channels - /r/littlespace: #helpers: : WHY IS IT A REMIX +[2017-03-22 23:24:01.402] [INFO] channels - /r/littlespace: #helpers: : wtb better bot +[2017-03-22 23:24:06.609] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=78DVtcsT26k my jam now +[2017-03-22 23:24:12.677] [INFO] channels - /r/littlespace: #helpers: : .yt rhythm is a dancer +[2017-03-22 23:24:13.334] [INFO] channels - /r/littlespace: #helpers: : Rhythm is a dancer - https://youtu.be/WMPM1q_Uyxc [ 86,631,634 views | 4.85 rating w/ 244,085 likes (7,489 dislikes) | Duration: 3m49s | Uploaded: 2006-09-16 by mysterious2b ] +[2017-03-22 23:24:18.888] [INFO] channels - /r/littlespace: #helpers: : B) +[2017-03-22 23:24:28.158] [INFO] channels - /r/littlespace: #helpers: : But I also like trap now +[2017-03-22 23:24:32.115] [INFO] channels - /r/littlespace: #helpers: : Because Ryo got me into it +[2017-03-22 23:24:35.663] [INFO] channels - /r/littlespace: #helpers: : oooh +[2017-03-22 23:24:37.385] [INFO] channels - /r/littlespace: #vent: : Yo fuck feelings +[2017-03-22 23:24:45.810] [INFO] channels - /r/littlespace: #helpers: : .yt Sandstorm Obelisk +[2017-03-22 23:24:46.403] [INFO] channels - /r/littlespace: #helpers: : Apashe - Sand Storm feat. Odalisk - https://youtu.be/MxF_hHV79aE [ 670,367 views | 4.96 rating w/ 12,508 likes (105 dislikes) | Duration: 4m22s | Uploaded: 2014-06-03 by Drop the Bassline ] +[2017-03-22 23:24:52.787] [INFO] channels - /r/littlespace: #helpers: : i missed glass animals because i decided to skip out on the laneway festival (aka festival for indie bands and all) +[2017-03-22 23:25:07.289] [INFO] channels - /r/littlespace: #mod: : !bacon +[2017-03-22 23:25:07.473] [INFO] channels - /r/littlespace: #mod: : *gives @undefined a strip of delicious bacon.* +[2017-03-22 23:25:12.861] [INFO] channels - /r/littlespace: #mod: : ...heh +[2017-03-22 23:25:15.641] [INFO] channels - /r/littlespace: #helpers: : and then i was so sad bc i watched my friend's snap stories and THEY WERE SO GOOD +[2017-03-22 23:25:28.776] [INFO] channels - /r/littlespace: #helpers: : Also ignore how my phone called it Obelisk.. lmao +[2017-03-22 23:25:36.728] [INFO] channels - /r/littlespace: #helpers: : I want to chuck it into an ocean sometimes +[2017-03-22 23:25:36.821] [INFO] channels - /r/littlespace: #vent: : feelings suck +[2017-03-22 23:25:42.040] [INFO] channels - /r/littlespace: #helpers: : iphone's woes +[2017-03-22 23:25:57.302] [INFO] channels - /r/littlespace: #helpers: : that's what you get for owning a fruit phone, Ko. +[2017-03-22 23:26:21.714] [INFO] channels - /r/littlespace: #helpers: : I only stick with it because it's pretty and it pairs with my MacBook Pro. +[2017-03-22 23:26:22.531] [INFO] channels - /r/littlespace: #helpers: : fruit phones are mean, sometimes +[2017-03-22 23:26:26.816] [INFO] channels - /r/littlespace: #helpers: : oh my god +[2017-03-22 23:26:42.731] [INFO] channels - /r/littlespace: #helpers: : yes i actually bought an iphone because 1. pretty 2. aesthetic 3. has cute phone covers 4. good camera +[2017-03-22 23:26:49.024] [INFO] channels - /r/littlespace: #helpers: : if not i would have stuck to my samsung +[2017-03-22 23:26:55.863] [INFO] channels - /r/littlespace: #helpers: : I can't stand my samsung. +[2017-03-22 23:27:00.690] [INFO] channels - /r/littlespace: #helpers: : The more I use it, the more I Wish I hadn't bought it. +[2017-03-22 23:27:08.845] [INFO] channels - /r/littlespace: #helpers: : YEAH the camera on my 7 plus is great +[2017-03-22 23:27:13.093] [INFO] channels - /r/littlespace: #helpers: : I'll be going back to Google-made phones instead. +[2017-03-22 23:27:13.672] [INFO] channels - /r/littlespace: #helpers: : i ditched it bc the customer service sucks balls +[2017-03-22 23:27:15.329] [INFO] channels - /r/littlespace: #helpers: : I'm glad I got the plus instead of the regular 7 +[2017-03-22 23:27:26.688] [INFO] channels - /r/littlespace: #helpers: : i am gonna get a plus the next round, i think +[2017-03-22 23:27:35.102] [INFO] channels - /r/littlespace: #helpers: : i don't like small phones. my 6s is too small for my liking +[2017-03-22 23:27:39.146] [INFO] channels - /r/littlespace: #helpers: : plus it's so big in my hands, I feel like a baby with a big fake toy phone so that's cute. +[2017-03-22 23:27:42.007] [INFO] channels - /r/littlespace: #helpers: : i miss my note 4, tbh +[2017-03-22 23:27:52.361] [INFO] channels - /r/littlespace: #helpers: : I have tiny hands though. +[2017-03-22 23:27:52.827] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=czb_CZfWko8 <@234126386703499264> the only way I can enjoy a Taylor Swift song. +[2017-03-22 23:27:53.872] [INFO] channels - /r/littlespace: #helpers: : It's sad +[2017-03-22 23:27:57.678] [INFO] channels - /r/littlespace: #helpers: : note 4 is larger and it has a nicer screen to watch things and play games *cries* +[2017-03-22 23:28:08.304] [INFO] channels - /r/littlespace: #mod: : !bacon +[2017-03-22 23:28:08.480] [INFO] channels - /r/littlespace: #mod: : *gives @undefined a strip of delicious bacon.* +[2017-03-22 23:28:17.396] [INFO] channels - /r/littlespace: #mod: : I'm trying to teach it to ping +[2017-03-22 23:28:17.720] [INFO] channels - /r/littlespace: #mod: : guess we're the same person +[2017-03-22 23:28:19.255] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> the only way for me to enjoy a taylor swift song is jamming it out and screaming the lyrics in my caregiver's ear. he loves taylor swift. *cries* +[2017-03-22 23:28:22.060] [INFO] channels - /r/littlespace: #mod: : Ow +[2017-03-22 23:28:22.231] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 23:28:23.936] [INFO] channels - /r/littlespace: #mod: : Ow. +[2017-03-22 23:28:24.123] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. +[2017-03-22 23:28:28.505] [INFO] channels - /r/littlespace: #helpers: : i don't like her +[2017-03-22 23:28:28.782] [INFO] channels - /r/littlespace: #mod: : You didn't give him a .gif! +[2017-03-22 23:28:36.890] [INFO] channels - /r/littlespace: #mod: : you didn't give me one +[2017-03-22 23:28:39.216] [INFO] channels - /r/littlespace: #mod: : I DID +[2017-03-22 23:28:44.951] [INFO] channels - /r/littlespace: #mod: : hold on I'll repost it +[2017-03-22 23:28:46.375] [INFO] channels - /r/littlespace: #helpers: : i think she's awful as a human being +[2017-03-22 23:28:54.343] [INFO] channels - /r/littlespace: #mod: : The loli one? +[2017-03-22 23:28:56.688] [INFO] channels - /r/littlespace: #mod: : lolli* +[2017-03-22 23:29:01.608] [INFO] channels - /r/littlespace: #helpers: : i'm in a lady gaga mood for the past few days +[2017-03-22 23:29:21.291] [INFO] channels - /r/littlespace: #mod: : +[2017-03-22 23:29:27.806] [INFO] channels - /r/littlespace: #mod: : This one, it was the first one I uploaded! +[2017-03-22 23:29:28.164] [INFO] channels - /r/littlespace: #mod: : ... +[2017-03-22 23:29:28.273] [INFO] channels - /r/littlespace: #mod: : https://images.discordapp.net/.eJwVxUEOAiEMAMC_cJciFJQ9-pPKIksCliw10Rj_rl5m3uqxN7WoTWTMBWCtM_G-6im8U8m6MJeWadSpE3cgEUpbz3eZYIM3AcPPGNE4GxBsRHe0_myc9-hPxiJcKHd6Hq70-te4tTp46FJv6vMFOGIoTA.db2UgNpXn-DyFnDR5SG_o1wmBfw +[2017-03-22 23:29:28.392] [INFO] channels - /r/littlespace: #helpers: : Have you heard Halestorm's version of Bad Romance? +[2017-03-22 23:29:28.499] [INFO] channels - /r/littlespace: #helpers: : .yt Halestorm - Bad Romance +[2017-03-22 23:29:29.247] [INFO] channels - /r/littlespace: #helpers: : Halestorm - Bad Romance (Lady Gaga cover version) - https://youtu.be/8vmhnxVF1GU [ 8,185,871 views | 4.9 rating w/ 64,744 likes (1,364 dislikes) | Duration: 4m9s | Uploaded: 2012-02-14 by Gab George ] +[2017-03-22 23:29:31.259] [INFO] channels - /r/littlespace: #mod: : Get glasses old man +[2017-03-22 23:29:41.601] [INFO] channels - /r/littlespace: #helpers: : oh my god yes this yes +[2017-03-22 23:29:49.825] [INFO] channels - /r/littlespace: #mod: : Ow. +[2017-03-22 23:29:50.006] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. https://cdn.discordapp.com/attachments/265064665099403264/294326730703896577/giphy-2.gif +[2017-03-22 23:29:59.212] [INFO] channels - /r/littlespace: #helpers: : It's fantastic. +[2017-03-22 23:30:01.523] [INFO] channels - /r/littlespace: #mod: : I also added gifs for "Ba-la-la-la-la", the defib one +[2017-03-22 23:30:04.787] [INFO] channels - /r/littlespace: #mod: : and uhh +[2017-03-22 23:30:06.515] [INFO] channels - /r/littlespace: #mod: : the crying one +[2017-03-22 23:30:13.401] [INFO] channels - /r/littlespace: #mod: : 😢 +[2017-03-22 23:30:13.583] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 23:30:27.299] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=o9iQ8lIfyEs idk strangely addicted to this rn +[2017-03-22 23:30:33.977] [INFO] channels - /r/littlespace: #mod: : +[2017-03-22 23:30:56.920] [INFO] channels - /r/littlespace: #mod: : +[2017-03-22 23:31:01.398] [INFO] channels - /r/littlespace: #mod: : heart attack +[2017-03-22 23:31:01.558] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. **CLEAR!** https://cdn.discordapp.com/attachments/265064665099403264/294302721429995520/tumblr_n9h0l4ODbC1ry7whco1_1280.gif +[2017-03-22 23:31:02.625] [INFO] channels - /r/littlespace: #mod: : You're going to give me a heart attack, Ko. +[2017-03-22 23:31:02.823] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. **CLEAR!** https://cdn.discordapp.com/attachments/265064665099403264/294302721429995520/tumblr_n9h0l4ODbC1ry7whco1_1280.gif +[2017-03-22 23:31:04.865] [INFO] channels - /r/littlespace: #mod: : AW +[2017-03-22 23:31:25.137] [INFO] channels - /r/littlespace: #helpers: : Ko is trying to give me a a heart attack. +[2017-03-22 23:31:25.308] [INFO] channels - /r/littlespace: #helpers: : My hands are equipped with defibrillators. **CLEAR!** https://cdn.discordapp.com/attachments/265064665099403264/294302721429995520/tumblr_n9h0l4ODbC1ry7whco1_1280.gif +[2017-03-22 23:31:35.428] [INFO] channels - /r/littlespace: #helpers: : 😢 +[2017-03-22 23:31:35.599] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 23:32:11.837] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> I don't know if you like hiphop at all, but one of my favourite rappers: Lil Dicky. + +https://www.youtube.com/watch?v=KYlJkF7wN5M + +he's just so... quirky. +[2017-03-22 23:32:14.773] [INFO] channels - /r/littlespace: #show_and_tell: : <@142051746716450816> have you tried wallpaper engine on steam? There's probably also some nice minimalistic but animated ones there! +[2017-03-22 23:32:17.442] [INFO] channels - /r/littlespace: #helpers: : that's what makes him great. +[2017-03-22 23:32:20.939] [INFO] channels - /r/littlespace: #helpers: : Ew +[2017-03-22 23:32:22.705] [INFO] channels - /r/littlespace: #helpers: : no, i don't really like hip hop +[2017-03-22 23:32:29.349] [INFO] channels - /r/littlespace: #helpers: : Give her something good to listen to +[2017-03-22 23:32:32.316] [INFO] channels - /r/littlespace: #helpers: : I did. +[2017-03-22 23:32:32.607] [INFO] channels - /r/littlespace: #show_and_tell: : Ehhhh i might later but rn im 2 lazy +[2017-03-22 23:32:36.376] [INFO] channels - /r/littlespace: #helpers: : And then I switched genres +[2017-03-22 23:32:44.133] [INFO] channels - /r/littlespace: #helpers: : i love rock, metal, alt, indie pop +[2017-03-22 23:32:51.438] [INFO] channels - /r/littlespace: #helpers: : just don't give me like +[2017-03-22 23:32:54.103] [INFO] channels - /r/littlespace: #helpers: : trashy chinese pop +[2017-03-22 23:32:57.909] [INFO] channels - /r/littlespace: #helpers: : i would flip a table on you +[2017-03-22 23:33:02.129] [INFO] channels - /r/littlespace: #helpers: : kpop? :) +[2017-03-22 23:33:03.317] [INFO] channels - /r/littlespace: #helpers: : kidding. +[2017-03-22 23:33:07.751] [INFO] channels - /r/littlespace: #helpers: : oh my god nanako's giving me a heart attack too +[2017-03-22 23:33:07.928] [INFO] channels - /r/littlespace: #helpers: : My hands are equipped with defibrillators. **CLEAR!** https://cdn.discordapp.com/attachments/265064665099403264/294302721429995520/tumblr_n9h0l4ODbC1ry7whco1_1280.gif +[2017-03-22 23:33:08.757] [INFO] channels - /r/littlespace: #helpers: : _doesn't like kpop._ +[2017-03-22 23:33:16.777] [INFO] channels - /r/littlespace: #helpers: : i'm neutral with kpop, actually +[2017-03-22 23:33:22.771] [INFO] channels - /r/littlespace: #helpers: : there's a girl group i'm following cos they're good. +[2017-03-22 23:33:29.326] [INFO] channels - /r/littlespace: #helpers: : but only that *one particular group* +[2017-03-22 23:33:32.609] [INFO] channels - /r/littlespace: #helpers: : I like Kpop! +[2017-03-22 23:33:34.912] [INFO] channels - /r/littlespace: #helpers: : Sometimes. +[2017-03-22 23:33:36.895] [INFO] channels - /r/littlespace: #helpers: : yay!! +[2017-03-22 23:33:42.442] [INFO] channels - /r/littlespace: #helpers: : I like a few songs from certain bands. +[2017-03-22 23:33:46.437] [INFO] channels - /r/littlespace: #helpers: : i actually like belting out to ariana grande +[2017-03-22 23:33:48.040] [INFO] channels - /r/littlespace: #mod: : How are we going to trigger Ba-la-la-la-la? +[2017-03-22 23:33:51.017] [INFO] channels - /r/littlespace: #helpers: : I also like her, sometimes. +[2017-03-22 23:33:58.372] [INFO] channels - /r/littlespace: #mod: : isn't that basically a fistbump? +[2017-03-22 23:34:04.542] [INFO] channels - /r/littlespace: #helpers: : she's like, my favourite girl to sing out to +[2017-03-22 23:34:06.100] [INFO] channels - /r/littlespace: #helpers: : https://youtu.be/5OdDmC1-p4E +[2017-03-22 23:34:18.603] [INFO] channels - /r/littlespace: #helpers: : I like Block B, Red Velvet, AOA. +[2017-03-22 23:34:29.987] [INFO] channels - /r/littlespace: #helpers: : oh +[2017-03-22 23:34:32.389] [INFO] channels - /r/littlespace: #helpers: : speaking of dope +[2017-03-22 23:34:32.717] [INFO] channels - /r/littlespace: #helpers: : i love black pink. a lot +[2017-03-22 23:34:36.124] [INFO] channels - /r/littlespace: #helpers: : .yt but then I got high +[2017-03-22 23:34:36.802] [INFO] channels - /r/littlespace: #helpers: : Afroman - Because I Got High - https://youtu.be/WeYsTmIzjkw [ 86,977,231 views | 4.84 rating w/ 537,345 likes (18,305 dislikes) | Duration: 3m20s | Uploaded: 2009-10-08 by AfromanVEVO ] +[2017-03-22 23:34:41.953] [INFO] channels - /r/littlespace: #helpers: : LOL +[2017-03-22 23:34:43.464] [INFO] channels - /r/littlespace: #helpers: : OBVIOUSLY THE BEST WEED SONG. +[2017-03-22 23:34:48.705] [INFO] channels - /r/littlespace: #helpers: : Noooo +[2017-03-22 23:35:04.843] [INFO] channels - /r/littlespace: #helpers: : .yt spend the night +[2017-03-22 23:35:05.477] [INFO] channels - /r/littlespace: #helpers: : Fetty Wap - Spend The Night ft PnB Rock - https://youtu.be/UxLKzc7g-JI [ 1,345,403 views | 4.85 rating w/ 12,047 likes (377 dislikes) | Duration: 3m30s | Uploaded: 2016-04-06 by John Doe ] +[2017-03-22 23:35:08.574] [INFO] channels - /r/littlespace: #helpers: : oh god no +[2017-03-22 23:35:09.489] [INFO] channels - /r/littlespace: #helpers: : not this +[2017-03-22 23:35:11.367] [INFO] channels - /r/littlespace: #mod: : *fistbump* could trigger it? +[2017-03-22 23:35:12.408] [INFO] channels - /r/littlespace: #helpers: : Oh god. +[2017-03-22 23:35:13.408] [INFO] channels - /r/littlespace: #helpers: : .yt spend the night boy funk +[2017-03-22 23:35:14.137] [INFO] channels - /r/littlespace: #helpers: : Spend The Night -Boy Funk x Nathaniel Knows (FREE DOWNLOAD) - https://youtu.be/zlagHNu799c [ 56,198 views | 4.81 rating w/ 458 likes (18 dislikes) | Duration: 3m32s | Uploaded: 2014-06-26 by NATHANIEL KNOWS ] +[2017-03-22 23:35:17.330] [INFO] channels - /r/littlespace: #helpers: : yeas this +[2017-03-22 23:35:29.329] [INFO] channels - /r/littlespace: #helpers: : best cancerous annoying song i send to everyone +[2017-03-22 23:35:39.395] [INFO] channels - /r/littlespace: #helpers: : .yt niggas in paris jay-z +[2017-03-22 23:35:40.101] [INFO] channels - /r/littlespace: #helpers: : Jay-Z & Kanye West - Ni**as In Paris (Explicit) - https://youtu.be/gG_dA32oH44 [ 163,403,192 views | 4.75 rating w/ 823,912 likes (43,243 dislikes) | Duration: 4m12s | Uploaded: 2012-02-09 by KanyeWestVEVO ] +[2017-03-22 23:35:46.105] [INFO] channels - /r/littlespace: #media_sharing: : Just. Stay away from The Joker. No matter what. +[2017-03-22 23:35:49.633] [INFO] channels - /r/littlespace: #helpers: : ^^^ +[2017-03-22 23:35:51.793] [INFO] channels - /r/littlespace: #helpers: : Ahem, <@234126386703499264>. https://www.youtube.com/watch?v=SNcGTmnXUbY +[2017-03-22 23:35:56.857] [INFO] channels - /r/littlespace: #helpers: : Just saying. +[2017-03-22 23:36:20.000] [INFO] channels - /r/littlespace: #helpers: : Honestly tho +[2017-03-22 23:36:20.981] [INFO] channels - /r/littlespace: #helpers: : the guy is so cute though +[2017-03-22 23:36:35.362] [INFO] channels - /r/littlespace: #helpers: : OH MY GOD +[2017-03-22 23:36:37.812] [INFO] channels - /r/littlespace: #helpers: : THANK YOU WAR LOL OMG +[2017-03-22 23:36:39.955] [INFO] channels - /r/littlespace: #helpers: : Kaynes verse in niggas in Paris +[2017-03-22 23:36:53.318] [INFO] channels - /r/littlespace: #helpers: : I enjoy listening to PelleK. +[2017-03-22 23:37:05.509] [INFO] channels - /r/littlespace: #vent: : I need to vent about <@200944723035160576>s taste in music +[2017-03-22 23:37:23.185] [INFO] channels - /r/littlespace: #vent: : I'm sorry that you're lamer than I am, <@274917231778070528> +[2017-03-22 23:37:42.435] [INFO] channels - /r/littlespace: #helpers: : oh my god this reminds me the time when i heard that song in a cafe, and i just sang there loudly for the sake of embarrassing my caregiver +[2017-03-22 23:37:47.554] [INFO] channels - /r/littlespace: #vent: : I mean I do listen to jazz and classical +[2017-03-22 23:37:50.956] [INFO] channels - /r/littlespace: #vent: : And rap +[2017-03-22 23:37:53.807] [INFO] channels - /r/littlespace: #vent: : oh my god +[2017-03-22 23:37:56.070] [INFO] channels - /r/littlespace: #vent: : And indie rock +[2017-03-22 23:37:57.145] [INFO] channels - /r/littlespace: #vent: : his hip hop +[2017-03-22 23:37:58.266] [INFO] channels - /r/littlespace: #vent: : though +[2017-03-22 23:38:03.521] [INFO] channels - /r/littlespace: #vent: : Lmfao +[2017-03-22 23:38:16.215] [INFO] channels - /r/littlespace: #vent: : no, i need to vent about <@222611472688218112>'s choice in that. song. +[2017-03-22 23:38:17.211] [INFO] channels - /r/littlespace: #vent: : Get better tastes, Ariel, and we will talk. +[2017-03-22 23:38:20.118] [INFO] channels - /r/littlespace: #vent: : ¯\_(ツ)_/¯ +[2017-03-22 23:38:20.288] [INFO] channels - /r/littlespace: #vent: : *mic drop* +[2017-03-22 23:38:31.750] [INFO] channels - /r/littlespace: #vent: : YOU CANT TAKE THAT FROM ME +[2017-03-22 23:38:35.232] [INFO] channels - /r/littlespace: #vent: : THATS MY THING +[2017-03-22 23:38:38.120] [INFO] channels - /r/littlespace: #vent: : ¯\_(ツ)_/¯ +[2017-03-22 23:38:38.198] [INFO] channels - /r/littlespace: #vent: : as much as i love you, <@222611472688218112>, apache killed me +[2017-03-22 23:38:41.609] [INFO] channels - /r/littlespace: #vent: : lmaaoooo +[2017-03-22 23:38:43.581] [INFO] channels - /r/littlespace: #vent: : or is it *she? +[2017-03-22 23:38:47.011] [INFO] channels - /r/littlespace: #vent: : I have no idea! +[2017-03-22 23:38:47.040] [INFO] channels - /r/littlespace: #vent: : :) +[2017-03-22 23:38:51.545] [INFO] channels - /r/littlespace: #vent: : ¯\_(ツ)_/¯ +[2017-03-22 23:38:54.779] [INFO] channels - /r/littlespace: #vent: : WHAT +[2017-03-22 23:38:56.659] [INFO] channels - /r/littlespace: #vent: : it's gone, ariel +[2017-03-22 23:39:04.387] [INFO] channels - /r/littlespace: #vent: : *storms off* +[2017-03-22 23:39:09.626] [INFO] channels - /r/littlespace: #vent: : *LOUDLY* +[2017-03-22 23:39:11.127] [INFO] channels - /r/littlespace: #vent: : I restarted the bot with the restrictions quickly enough. >:D +[2017-03-22 23:39:18.672] [INFO] channels - /r/littlespace: #vent: : *SLAMS DOOR* +[2017-03-22 23:39:21.026] [INFO] channels - /r/littlespace: #vent: : you're being *bratty*, ariel +[2017-03-22 23:39:36.035] [INFO] channels - /r/littlespace: #vent: : (Is that supposed to surprise anyone?) +[2017-03-22 23:39:47.799] [INFO] channels - /r/littlespace: #vent: : (no, but i'm brattier than you) +[2017-03-22 23:39:58.439] [INFO] channels - /r/littlespace: #vent: : (By one percent!) +[2017-03-22 23:40:25.241] [INFO] channels - /r/littlespace: #vent: : ```javascript +if (!e.message.author.username == "arielhasfins" | e.message.content == "¯\\_(ツ)_/¯") +e.message.channel.sendMessage("*mic drop*");``` +[2017-03-22 23:40:27.107] [INFO] channels - /r/littlespace: #vent: : just saying +[2017-03-22 23:40:36.682] [INFO] channels - /r/littlespace: #vent: : if it doesn't match you, it'll work. ;) +[2017-03-22 23:40:39.761] [INFO] channels - /r/littlespace: #vent: : i might just leave that there +[2017-03-22 23:40:53.591] [INFO] channels - /r/littlespace: #vent: : So wait +[2017-03-22 23:41:02.268] [INFO] channels - /r/littlespace: #vent: : This is vent +[2017-03-22 23:41:19.750] [INFO] channels - /r/littlespace: #vent: : ¯\\_(ツ)_/¯ THANKS GUYS NOW VENT LOOKS WEIRD +[2017-03-22 23:41:26.356] [INFO] channels - /r/littlespace: #vent: : Right +[2017-03-22 23:41:27.117] [INFO] channels - /r/littlespace: #vent: : good +[2017-03-22 23:41:29.903] [INFO] channels - /r/littlespace: #vent: : ABORT MISSION, ABORT MISSION +[2017-03-22 23:41:39.542] [INFO] channels - /r/littlespace: #vent: : ¯\_(ツ)_/¯ +[2017-03-22 23:41:39.979] [INFO] channels - /r/littlespace: #vent: : 🚔 RUN +[2017-03-22 23:41:43.987] [INFO] channels - /r/littlespace: #vent: : I'm telling Team Mom on you all!! +[2017-03-22 23:41:58.992] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> +[2017-03-22 23:42:05.102] [INFO] channels - /r/littlespace: #vent: : Literally jist +[2017-03-22 23:42:08.991] [INFO] channels - /r/littlespace: #helpers: : I didn't actually disable you Ariel. +[2017-03-22 23:42:13.325] [INFO] channels - /r/littlespace: #helpers: : Was it not working because I only have one backslash +[2017-03-22 23:42:19.772] [INFO] channels - /r/littlespace: #vent: : All I've listened to the last 4 hours is lofi hiphop +[2017-03-22 23:42:22.185] [INFO] channels - /r/littlespace: #helpers: : no, I had to escape that backslash for it to work +[2017-03-22 23:42:23.920] [INFO] channels - /r/littlespace: #vent: : The chillest shit +[2017-03-22 23:42:26.380] [INFO] channels - /r/littlespace: #helpers: : because it was trying to parse it +[2017-03-22 23:42:29.122] [INFO] channels - /r/littlespace: #vent: : but... but... +[2017-03-22 23:42:30.740] [INFO] channels - /r/littlespace: #helpers: : Oh +[2017-03-22 23:42:31.371] [INFO] channels - /r/littlespace: #helpers: : that's why there's two. +[2017-03-22 23:42:32.262] [INFO] channels - /r/littlespace: #vent: : Pairs well with severe depression +[2017-03-22 23:42:32.671] [INFO] channels - /r/littlespace: #helpers: : Ooooo +[2017-03-22 23:42:43.962] [INFO] channels - /r/littlespace: #helpers: : I just lifted the room restrictions for a moment to harass you. +[2017-03-22 23:42:46.202] [INFO] channels - /r/littlespace: #helpers: : I'm thinking reddit markup ova hea +[2017-03-22 23:42:48.005] [INFO] channels - /r/littlespace: #vent: : SEPHORA NEEDS TO STOP EMAILING ME TO TELL ME ABOUT THEIR GOODIES IF I DOWNLOAD THEIR APP +[2017-03-22 23:42:51.835] [INFO] channels - /r/littlespace: #helpers: : You're so mean +[2017-03-22 23:43:01.630] [INFO] channels - /r/littlespace: #helpers: : Chat doesn't work in other channels right now because I have this set. +[2017-03-22 23:43:02.915] [INFO] channels - /r/littlespace: #helpers: : war's so mean +[2017-03-22 23:43:08.104] [INFO] channels - /r/littlespace: #helpers: : When I load them into Baymax, then I'll change it. +[2017-03-22 23:43:12.293] [INFO] channels - /r/littlespace: #helpers: : ``` if (e.message.channel.name == "mod" || e.message.channel.name == "helpers" ) { +``` +[2017-03-22 23:43:14.391] [INFO] channels - /r/littlespace: #helpers: : Yeah I know +[2017-03-22 23:43:19.502] [INFO] channels - /r/littlespace: #helpers: : But you used it +[2017-03-22 23:43:24.742] [INFO] channels - /r/littlespace: #helpers: : And then removed it +[2017-03-22 23:43:26.635] [INFO] channels - /r/littlespace: #helpers: : Because +[2017-03-22 23:43:29.166] [INFO] channels - /r/littlespace: #helpers: : fuck it +[2017-03-22 23:43:29.470] [INFO] channels - /r/littlespace: #helpers: : You literally +[2017-03-22 23:43:31.432] [INFO] channels - /r/littlespace: #helpers: : Hate me +[2017-03-22 23:43:46.173] [INFO] channels - /r/littlespace: #vent: : Do it +[2017-03-22 23:43:46.733] [INFO] channels - /r/littlespace: #media_sharing: : https://www.youtube.com/watch?v=-h7jfUUSj3M <@142051746716450816> <@200944723035160576> +[2017-03-22 23:43:57.294] [INFO] channels - /r/littlespace: #helpers: : no, no, I love our little helpers! ❤ +[2017-03-22 23:44:02.216] [INFO] channels - /r/littlespace: #vent: : i'm not gonna spend any more money on makeup. i try. i hope +[2017-03-22 23:44:03.827] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> says I have to say that. +[2017-03-22 23:44:06.950] [INFO] channels - /r/littlespace: #helpers: : Just kidding. +[2017-03-22 23:44:14.354] [INFO] channels - /r/littlespace: #helpers: : ): +[2017-03-22 23:44:16.648] [INFO] channels - /r/littlespace: #helpers: : im gonna whine to team mum. +[2017-03-22 23:44:24.899] [INFO] channels - /r/littlespace: #media_sharing: : https://youtu.be/OHjGF9PLwcM +[2017-03-22 23:44:27.588] [INFO] channels - /r/littlespace: #helpers: : Y u ping me +[2017-03-22 23:44:31.731] [INFO] channels - /r/littlespace: #helpers: : ❤ +[2017-03-22 23:44:34.072] [INFO] channels - /r/littlespace: #helpers: : HES BEING MEAN +[2017-03-22 23:44:34.336] [INFO] channels - /r/littlespace: #helpers: : love you mom! +[2017-03-22 23:44:36.735] [INFO] channels - /r/littlespace: #helpers: : we miss you! +[2017-03-22 23:44:38.863] [INFO] channels - /r/littlespace: #helpers: : he's mean! +[2017-03-22 23:44:43.469] [INFO] channels - /r/littlespace: #helpers: : MOOOOOM +[2017-03-22 23:44:59.508] [INFO] channels - /r/littlespace: #helpers: : Am not. :( +[2017-03-22 23:45:10.143] [INFO] channels - /r/littlespace: #helpers: : It's not my fault that ariel types slower than I can edit code. D: +[2017-03-22 23:45:20.908] [INFO] channels - /r/littlespace: #helpers: : you're bullying us again, war! +[2017-03-22 23:45:29.638] [INFO] channels - /r/littlespace: #helpers: : I'm on mobile +[2017-03-22 23:45:34.380] [INFO] channels - /r/littlespace: #helpers: : Whatever +[2017-03-22 23:45:42.878] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=rJOsjP33nF4 + +Just distract yourself while I keep writing code. +[2017-03-22 23:45:48.303] [INFO] channels - /r/littlespace: #helpers: : Does that give me better tastes, Ariel? +[2017-03-22 23:46:05.735] [INFO] channels - /r/littlespace: #helpers: : darkside's so trippy +[2017-03-22 23:46:10.082] [INFO] channels - /r/littlespace: #helpers: : i love studying with darkside +[2017-03-22 23:46:20.331] [INFO] channels - /r/littlespace: #helpers: : or going home with darkside too. yum +[2017-03-22 23:46:21.227] [INFO] channels - /r/littlespace: #helpers: : .yt bye felica +[2017-03-22 23:46:21.870] [INFO] channels - /r/littlespace: #helpers: : Bye Felicia!!! - https://youtu.be/bT90D0GKZRM [ 3,844,116 views | 4.57 rating w/ 5,302 likes (502 dislikes) | Duration: 8s | Uploaded: 2014-05-01 by Raven Patrick ] +[2017-03-22 23:46:50.660] [INFO] channels - /r/littlespace: #mod: : *fistbump* or *fist bump*? +[2017-03-22 23:46:54.147] [INFO] channels - /r/littlespace: #mod: : or both? +[2017-03-22 23:47:02.464] [INFO] channels - /r/littlespace: #helpers: : I like wu tang and schoolboy and jayz I have weird rap tastes +[2017-03-22 23:47:14.530] [INFO] channels - /r/littlespace: #helpers: : I'm sure you like ICP too. +[2017-03-22 23:47:15.019] [INFO] channels - /r/littlespace: #helpers: : :P +[2017-03-22 23:47:16.667] [INFO] channels - /r/littlespace: #helpers: : But I think I am going to bed to be honest +[2017-03-22 23:47:27.303] [INFO] channels - /r/littlespace: #helpers: : Faygo my eggo +[2017-03-22 23:47:28.680] [INFO] channels - /r/littlespace: #helpers: : die antwoord?! +[2017-03-22 23:47:35.638] [INFO] channels - /r/littlespace: #helpers: : HOW ABOUT DIE ANTWOORD PLS +[2017-03-22 23:47:37.853] [INFO] channels - /r/littlespace: #helpers: : don't go to bedddd +[2017-03-22 23:47:39.184] [INFO] channels - /r/littlespace: #helpers: : someone tell me taht they like them +[2017-03-22 23:47:47.186] [INFO] channels - /r/littlespace: #helpers: : Alien song by them is awesome +[2017-03-22 23:47:53.153] [INFO] channels - /r/littlespace: #helpers: : sleep is for the weak. come here ariel stay up +[2017-03-22 23:48:11.042] [INFO] channels - /r/littlespace: #helpers: : I am so tired and sad I just wanna curl up in a big mush ball +[2017-03-22 23:48:20.086] [INFO] channels - /r/littlespace: #helpers: : Don't worry <@234126386703499264>, I'll stay up with you! +[2017-03-22 23:48:28.579] [INFO] channels - /r/littlespace: #helpers: : yay!! ❤ +[2017-03-22 23:48:35.367] [INFO] channels - /r/littlespace: #helpers: : don't be sad, ariel. you got your micdrop, and a baymax bot +[2017-03-22 23:48:38.505] [INFO] channels - /r/littlespace: #helpers: : and +[2017-03-22 23:48:40.541] [INFO] channels - /r/littlespace: #helpers: : you have *us* +[2017-03-22 23:48:43.077] [INFO] channels - /r/littlespace: #helpers: : yay war! ❤ +[2017-03-22 23:48:45.824] [INFO] channels - /r/littlespace: #helpers: : I know I do +[2017-03-22 23:48:56.257] [INFO] channels - /r/littlespace: #helpers: : *fist bump* +[2017-03-22 23:48:56.453] [INFO] channels - /r/littlespace: #helpers: : Ba-la-la-la-la! https://cdn.discordapp.com/attachments/265064665099403264/294327036388835328/giphy-3.gif +[2017-03-22 23:49:01.674] [INFO] channels - /r/littlespace: #helpers: : i do need to grab lunch though. i have no idea where to grab it +[2017-03-22 23:49:04.497] [INFO] channels - /r/littlespace: #helpers: : *send help* +[2017-03-22 23:49:22.299] [INFO] channels - /r/littlespace: #helpers: : the problem with not stocking up on groceries, and having like, 2 different shopping malls around my area. fuck +[2017-03-22 23:49:35.733] [INFO] channels - /r/littlespace: #helpers: : !help +[2017-03-22 23:49:35.940] [INFO] channels - /r/littlespace: #helpers: : Sorry. +[2017-03-22 23:49:40.364] [INFO] channels - /r/littlespace: #helpers: : 😢 +[2017-03-22 23:49:40.557] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 23:49:48.749] [INFO] channels - /r/littlespace: #helpers: : can baymax cook for me +[2017-03-22 23:50:03.733] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264>, you can get bacon! +[2017-03-22 23:50:08.343] [INFO] channels - /r/littlespace: #helpers: : Type, !bacon! +[2017-03-22 23:50:12.062] [INFO] channels - /r/littlespace: #helpers: : !bacon +[2017-03-22 23:50:12.262] [INFO] channels - /r/littlespace: #helpers: : *gives @Nanako a strip of delicious bacon.* +[2017-03-22 23:50:20.167] [INFO] channels - /r/littlespace: #helpers: : It doesn't ping yet, but whatever. +[2017-03-22 23:50:23.751] [INFO] channels - /r/littlespace: #helpers: : !bacon +[2017-03-22 23:50:23.919] [INFO] channels - /r/littlespace: #helpers: : *gives Meep a strip of delicious bacon.* +[2017-03-22 23:50:29.345] [INFO] channels - /r/littlespace: #helpers: : but, i dont want bacon. can i get like +[2017-03-22 23:50:30.679] [INFO] channels - /r/littlespace: #helpers: : !tomatoes +[2017-03-22 23:50:34.088] [INFO] channels - /r/littlespace: #helpers: : oh. no. 😦 +[2017-03-22 23:50:44.667] [INFO] channels - /r/littlespace: #helpers: : !sushi +[2017-03-22 23:51:17.232] [INFO] channels - /r/littlespace: #helpers: : Meep, !cookie +[2017-03-22 23:51:19.418] [INFO] channels - /r/littlespace: #helpers: : 😢 +[2017-03-22 23:51:19.607] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-22 23:51:28.331] [INFO] channels - /r/littlespace: #helpers: : thanks. i think i'm gonna run out to grab some sushi +[2017-03-22 23:51:34.795] [INFO] channels - /r/littlespace: #helpers: : Yesss +[2017-03-22 23:51:38.190] [INFO] channels - /r/littlespace: #helpers: : Serious +[2017-03-22 23:51:39.388] [INFO] channels - /r/littlespace: #helpers: : but it's like, crappy sushi +[2017-03-22 23:51:41.281] [INFO] channels - /r/littlespace: #helpers: : still sushi, though +[2017-03-22 23:51:41.580] [INFO] channels - /r/littlespace: #helpers: : Ly +[2017-03-22 23:51:45.114] [INFO] channels - /r/littlespace: #helpers: : !sushi +[2017-03-22 23:51:51.905] [INFO] channels - /r/littlespace: #helpers: : I'm serious, someone !cookie! +[2017-03-22 23:51:57.300] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-22 23:51:57.484] [INFO] channels - /r/littlespace: #helpers: : *gives arielhasfins a freshly made Oatmeal Raisin cookie.* +[2017-03-22 23:51:58.035] [INFO] channels - /r/littlespace: #helpers: : !cookie! +[2017-03-22 23:52:01.131] [INFO] channels - /r/littlespace: #helpers: : OH MY GOD +[2017-03-22 23:52:02.113] [INFO] channels - /r/littlespace: #helpers: : HAHAHHA +[2017-03-22 23:52:02.811] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-22 23:52:02.984] [INFO] channels - /r/littlespace: #helpers: : *gives Meep a freshly made Oatmeal Raisin cookie.* +[2017-03-22 23:52:04.888] [INFO] channels - /r/littlespace: #helpers: : YAY +[2017-03-22 23:52:07.520] [INFO] channels - /r/littlespace: #helpers: : YES +[2017-03-22 23:52:09.258] [INFO] channels - /r/littlespace: #helpers: : FRESHLY MADE OATMEAL RAISIN COOKIE +[2017-03-22 23:52:15.357] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112>, you sure you don't want a cookie from baymax? +[2017-03-22 23:52:18.312] [INFO] channels - /r/littlespace: #helpers: : can you do sushi pls +[2017-03-22 23:52:20.312] [INFO] channels - /r/littlespace: #helpers: : um. can i have some tomatos? +[2017-03-22 23:52:32.132] [INFO] channels - /r/littlespace: #helpers: : psh, no sushi. i don't like sushi. +[2017-03-22 23:52:34.960] [INFO] channels - /r/littlespace: #helpers: : i can't freaking spell today +[2017-03-22 23:52:37.993] [INFO] channels - /r/littlespace: #helpers: : D: +[2017-03-22 23:52:41.026] [INFO] channels - /r/littlespace: #helpers: : You got a mic drop! +[2017-03-22 23:52:41.948] [INFO] channels - /r/littlespace: #helpers: : Please +[2017-03-22 23:52:43.087] [INFO] channels - /r/littlespace: #helpers: : potatoes? +[2017-03-22 23:52:50.165] [INFO] channels - /r/littlespace: #helpers: : War +[2017-03-22 23:52:56.504] [INFO] channels - /r/littlespace: #helpers: : *pouts* +[2017-03-22 23:52:59.193] [INFO] channels - /r/littlespace: #helpers: : Please +[2017-03-22 23:53:19.665] [INFO] channels - /r/littlespace: #helpers: : I have a idea. +[2017-03-22 23:53:20.887] [INFO] channels - /r/littlespace: #helpers: : We're trying to keep it relevant to the bot! +[2017-03-22 23:53:24.014] [INFO] channels - /r/littlespace: #helpers: : But yes, +[2017-03-22 23:53:27.689] [INFO] channels - /r/littlespace: #helpers: : what she said. +[2017-03-22 23:53:30.914] [INFO] channels - /r/littlespace: #helpers: : Sushi is Japanese +[2017-03-22 23:53:31.628] [INFO] channels - /r/littlespace: #helpers: : Do the lollipop thing, War. +[2017-03-22 23:53:34.315] [INFO] channels - /r/littlespace: #helpers: : and the bot gives fresh cookies. +[2017-03-22 23:53:42.391] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-22 23:53:42.564] [INFO] channels - /r/littlespace: #helpers: : *mic drop* +[2017-03-22 23:53:48.996] [INFO] channels - /r/littlespace: #mod: : what should I call lollipop? +[2017-03-22 23:54:02.798] [INFO] channels - /r/littlespace: #mod: : I'm not sure.. hm +[2017-03-22 23:54:08.701] [INFO] channels - /r/littlespace: #helpers: : <@!173235211952324609> joined the server. +[2017-03-22 23:54:14.081] [INFO] channels - /r/littlespace: #helpers: : Nope +[2017-03-22 23:54:16.983] [INFO] channels - /r/littlespace: #helpers: : oh +[2017-03-22 23:54:25.641] [INFO] channels - /r/littlespace: #general: : umm, hello everyone +[2017-03-22 23:54:33.400] [INFO] channels - /r/littlespace: #helpers: : my god +[2017-03-22 23:54:35.815] [INFO] channels - /r/littlespace: #helpers: : is that a BTS lover +[2017-03-22 23:54:40.899] [INFO] channels - /r/littlespace: #general: : Howdy +[2017-03-22 23:54:42.356] [INFO] channels - /r/littlespace: #mod: : "You have been a good boy. Have a lollipop!" +[2017-03-22 23:54:42.785] [INFO] channels - /r/littlespace: #general: : hello! *waves* welcome! +[2017-03-22 23:54:48.975] [INFO] channels - /r/littlespace: #mod: : boy should be boy/girl I guess +[2017-03-22 23:55:02.760] [INFO] channels - /r/littlespace: #mod: : Not sure what trigger word though. +[2017-03-22 23:55:03.983] [INFO] channels - /r/littlespace: #mod: : "You have been good!' +[2017-03-22 23:55:05.752] [INFO] channels - /r/littlespace: #general: : ^_^ hello everybody +[2017-03-22 23:55:09.803] [INFO] channels - /r/littlespace: #mod: : but i can't find the gidf now +[2017-03-22 23:55:10.032] [INFO] channels - /r/littlespace: #general: : how are you +[2017-03-22 23:55:15.749] [INFO] channels - /r/littlespace: #mod: : You have been a good little. Have a lollipop! ? +[2017-03-22 23:55:25.739] [INFO] channels - /r/littlespace: #mod: : Since it's our bot. +[2017-03-22 23:55:28.743] [INFO] channels - /r/littlespace: #helpers: : Night you guys! +[2017-03-22 23:55:35.524] [INFO] channels - /r/littlespace: #helpers: : Sweet dreams, bestie. ❤ +[2017-03-22 23:55:44.324] [INFO] channels - /r/littlespace: #helpers: : Good night!! +[2017-03-22 23:56:28.154] [INFO] channels - /r/littlespace: #mod: : <@222611472688218112> gif pls +[2017-03-22 23:57:03.874] [INFO] channels - /r/littlespace: #mod: : +[2017-03-22 23:57:08.152] [INFO] channels - /r/littlespace: #general: : doing great! how about you? +[2017-03-22 23:57:17.621] [INFO] channels - /r/littlespace: #helpers: : good night bestest friend! ❤ +[2017-03-22 23:57:26.735] [INFO] channels - /r/littlespace: #mod: : !lollipop +[2017-03-22 23:57:26.916] [INFO] channels - /r/littlespace: #mod: : You have been good, have a lollipop! https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif +[2017-03-22 23:57:28.576] [INFO] channels - /r/littlespace: #mod: : Maybe the trigger should be "I'm satisfied with my care" ? +[2017-03-22 23:57:35.216] [INFO] channels - /r/littlespace: #mod: : Ooh. +[2017-03-22 23:57:36.788] [INFO] channels - /r/littlespace: #mod: : Good idea. +[2017-03-22 23:58:00.441] [INFO] channels - /r/littlespace: #helpers: : I'm satisfied with my care. +[2017-03-22 23:58:00.630] [INFO] channels - /r/littlespace: #helpers: : You have been good, have a lollipop! https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif +[2017-03-22 23:58:08.802] [INFO] channels - /r/littlespace: #general: : I'm doing okay c: +[2017-03-22 23:58:25.764] [INFO] channels - /r/littlespace: #general: : relatively new to this ddlg stuff +[2017-03-22 23:58:36.374] [INFO] channels - /r/littlespace: #general: : was just browsing reddit and found the sub +[2017-03-22 23:59:51.100] [INFO] channels - /r/littlespace: #helpers: : do i have a lollipop now +[2017-03-22 23:59:59.238] [INFO] channels - /r/littlespace: #helpers: : Are you satisfied with your care? +[2017-03-23 00:00:31.665] [INFO] channels - /r/littlespace: #helpers: : i'm satisfied with my care +[2017-03-23 00:00:37.830] [INFO] channels - /r/littlespace: #helpers: : oh god. i must caps it? +[2017-03-23 00:00:38.477] [INFO] channels - /r/littlespace: #helpers: : It has to be exact. :\ +[2017-03-23 00:00:41.034] [INFO] channels - /r/littlespace: #helpers: : I'm satisfied with my care. +[2017-03-23 00:00:41.400] [INFO] channels - /r/littlespace: #helpers: : You have been good, have a lollipop! https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif +[2017-03-23 00:00:45.010] [INFO] channels - /r/littlespace: #helpers: : YAY LOLLIPOP! +[2017-03-23 00:00:52.814] [INFO] channels - /r/littlespace: #helpers: : That's why they're easter eggs. +[2017-03-23 00:00:59.275] [INFO] channels - /r/littlespace: #helpers: : They're not supposed tobe easy to trigger. +[2017-03-23 00:00:59.479] [INFO] channels - /r/littlespace: #general: : yay!! are you a little, or a caregiver? or are you just interested? +[2017-03-23 00:01:09.912] [INFO] channels - /r/littlespace: #helpers: : ah, i see +[2017-03-23 00:01:17.455] [INFO] channels - /r/littlespace: #helpers: : did we like roast xana too hard that he doesn't talk a lot now +[2017-03-23 00:01:23.772] [INFO] channels - /r/littlespace: #helpers: : or that his bestie paperboy isn't around, that's why +[2017-03-23 00:01:53.214] [INFO] channels - /r/littlespace: #helpers: : Heh +[2017-03-23 00:02:02.352] [INFO] channels - /r/littlespace: #helpers: : This code has gotten so long +[2017-03-23 00:02:04.312] [INFO] channels - /r/littlespace: #general: : I guess I'm the caregiver, haha, I'm not very sure about any terms or anything +[2017-03-23 00:02:34.911] [INFO] channels - /r/littlespace: #general: : Welcome to the server! You can also be a switch, and the type of caregiver is pretty open. +[2017-03-23 00:03:09.654] [INFO] channels - /r/littlespace: #helpers: : yum +[2017-03-23 00:03:12.579] [INFO] channels - /r/littlespace: #helpers: : make it longer. make it cuter +[2017-03-23 00:03:26.506] [INFO] channels - /r/littlespace: #helpers: : !bacon +[2017-03-23 00:03:26.689] [INFO] channels - /r/littlespace: #helpers: : *gives <@!200944723035160576> a strip of delicious bacon.* +[2017-03-23 00:03:28.403] [INFO] channels - /r/littlespace: #helpers: : YES +[2017-03-23 00:03:29.049] [INFO] channels - /r/littlespace: #general: : my girlfriend introduced this to me and so far it seems to have brought us much closer together c: +[2017-03-23 00:03:29.786] [INFO] channels - /r/littlespace: #helpers: : FINALLY +[2017-03-23 00:03:49.591] [INFO] channels - /r/littlespace: #general: : i'm so happy for you! it's good that this has brought you both much closer together! +[2017-03-23 00:04:42.505] [INFO] channels - /r/littlespace: #helpers: : need moar tabs +[2017-03-23 00:04:50.174] [INFO] channels - /r/littlespace: #general: : thank you c: we don't get to see each other much, but we still try to talk every day +[2017-03-23 00:05:05.266] [INFO] channels - /r/littlespace: #helpers: : eggs? scrambled eggs? +[2017-03-23 00:05:53.785] [INFO] channels - /r/littlespace: #helpers: : need moar tabs +[2017-03-23 00:06:29.208] [INFO] channels - /r/littlespace: #helpers: : what the fuck +[2017-03-23 00:06:30.836] [INFO] channels - /r/littlespace: #helpers: : this is scaring me +[2017-03-23 00:06:31.582] [INFO] channels - /r/littlespace: #helpers: : no +[2017-03-23 00:06:42.067] [INFO] channels - /r/littlespace: #helpers: : hmm? +[2017-03-23 00:07:00.311] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264>, do you like comedy? https://www.youtube.com/watch?v=yNkyIw62N6c +[2017-03-23 00:07:09.203] [INFO] channels - /r/littlespace: #general: : That's really sweet! Please feel free to ask our <@&293860612184866818> any questions you may have, or even ask questions in our <#212642493886496770> channel for other littles and cgs to help/give advice. 😄 +[2017-03-23 00:07:15.008] [INFO] channels - /r/littlespace: #helpers: : I was listening to this when I took Daryan home. +[2017-03-23 00:08:59.520] [INFO] channels - /r/littlespace: #general: : cool, thanks ! is general relationship advice okay too? or should I try to stay away from that +[2017-03-23 00:15:11.445] [INFO] channels - /r/littlespace: #helpers: : Oooh +[2017-03-23 00:15:19.728] [INFO] channels - /r/littlespace: #helpers: : I'm a very humourless person 😉 +[2017-03-23 00:15:26.338] [INFO] channels - /r/littlespace: #helpers: : Oh, I hadn't noticed. +[2017-03-23 00:15:28.223] [INFO] channels - /r/littlespace: #helpers: : Hang on. I'm gonna go out and find food +[2017-03-23 00:15:33.936] [INFO] channels - /r/littlespace: #helpers: : No worries. +[2017-03-23 00:15:41.640] [INFO] channels - /r/littlespace: #general: : For general relationship advice, please use <#276765230321762305> since it's for more serious/personal stuff. 😃 +[2017-03-23 00:15:52.985] [INFO] channels - /r/littlespace: #general: : Oh *waves* I'm the only little helper awake right now! +[2017-03-23 00:16:02.340] [INFO] channels - /r/littlespace: #general: : Those time zones. +[2017-03-23 00:16:13.555] [INFO] channels - /r/littlespace: #general: : sure thing, thanks +[2017-03-23 00:16:19.020] [INFO] channels - /r/littlespace: #general: : it's 1 am here :c +[2017-03-23 00:16:26.393] [INFO] channels - /r/littlespace: #general: : Same here! +[2017-03-23 00:16:56.274] [INFO] channels - /r/littlespace: #general: : do you live in the us? +[2017-03-23 00:17:52.477] [INFO] channels - /r/littlespace: #general: : I do, I live in New York. +[2017-03-23 00:18:25.051] [INFO] channels - /r/littlespace: #general: : Oh that's cool didn't know that +[2017-03-23 00:18:34.988] [INFO] channels - /r/littlespace: #general: : 😄 +[2017-03-23 00:18:43.190] [INFO] channels - /r/littlespace: #general: : I live in ontario, right above you +[2017-03-23 00:19:19.663] [INFO] channels - /r/littlespace: #gaming: : Why is everyone playing this game +[2017-03-23 00:19:40.863] [INFO] channels - /r/littlespace: #general: : I'm in Sweden, so its early morning for and I will soon be of work +[2017-03-23 00:20:23.900] [INFO] channels - /r/littlespace: #general: : I'm from Singapore, so it's 1pm here now +[2017-03-23 00:20:29.544] [INFO] channels - /r/littlespace: #helpers: : Yikes +[2017-03-23 00:20:32.812] [INFO] channels - /r/littlespace: #helpers: : It's so hot and sunny +[2017-03-23 00:20:40.232] [INFO] channels - /r/littlespace: #helpers: : .w +[2017-03-23 00:20:40.819] [INFO] channels - /r/littlespace: #helpers: : Mostly Cloudy, 45F (7C) (280.15K) / feels like 42F (5C) (278.15K) | Humidity: 43% | Wind: N @ 4.98mph (8km/h) | 0% chance of precipitation (63088 - Valley Park, MO (US)) +[2017-03-23 00:20:45.162] [INFO] channels - /r/littlespace: #general: : Its 6.20 am here +[2017-03-23 00:20:59.317] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 00:21:07.473] [INFO] channels - /r/littlespace: #helpers: : .w +[2017-03-23 00:21:07.805] [INFO] channels - /r/littlespace: #helpers: : choose or set a place to look up weather for, dummy (.w [set] location_here) +[2017-03-23 00:21:16.064] [INFO] channels - /r/littlespace: #media_sharing: : I woke up at 7 and I look like a homeless person haha +[2017-03-23 00:21:19.236] [INFO] channels - /r/littlespace: #helpers: : .w (location or postal code) works too +[2017-03-23 00:21:19.748] [INFO] channels - /r/littlespace: #helpers: : I couldn't find that location :( [try being more specific if applicable] +[2017-03-23 00:21:21.889] [INFO] channels - /r/littlespace: #helpers: : .w 63088 +[2017-03-23 00:21:22.099] [INFO] channels - /r/littlespace: #media_sharing: : +[2017-03-23 00:21:22.319] [INFO] channels - /r/littlespace: #gaming: : I dont know +[2017-03-23 00:21:22.477] [INFO] channels - /r/littlespace: #helpers: : Mostly Cloudy, 45F (7C) (280.15K) / feels like 42F (5C) (278.15K) | Humidity: 43% | Wind: N @ 5.01mph (8.1km/h) | 0% chance of precipitation (63088 - Valley Park, MO (US)) +[2017-03-23 00:21:24.725] [INFO] channels - /r/littlespace: #mod: : Also, an idea: when people say cat/kitty, we should have it make Baymax react with the 'hairy baby' gif I posted earlier but only with a certain chance, like how UB3R had a 20% chance of saying 'some crimes'. +[2017-03-23 00:21:40.046] [INFO] channels - /r/littlespace: #media_sharing: : Goodmorning! +[2017-03-23 00:21:40.505] [INFO] channels - /r/littlespace: #mod: : +[2017-03-23 00:21:42.161] [INFO] channels - /r/littlespace: #helpers: : .w Singapore +[2017-03-23 00:21:42.631] [INFO] channels - /r/littlespace: #helpers: : I couldn't find that location :( [try being more specific if applicable] +[2017-03-23 00:21:44.723] [INFO] channels - /r/littlespace: #mod: : I don't know how to do chances... :( +[2017-03-23 00:21:45.640] [INFO] channels - /r/littlespace: #helpers: : Well +[2017-03-23 00:21:49.082] [INFO] channels - /r/littlespace: #helpers: : .w 670407 +[2017-03-23 00:21:49.549] [INFO] channels - /r/littlespace: #helpers: : I couldn't find that location :( [try being more specific if applicable] +[2017-03-23 00:21:51.681] [INFO] channels - /r/littlespace: #mod: : _gasp_ +[2017-03-23 00:21:58.777] [INFO] channels - /r/littlespace: #helpers: : what city? +[2017-03-23 00:22:17.713] [INFO] channels - /r/littlespace: #helpers: : Singapore +[2017-03-23 00:22:17.899] [INFO] channels - /r/littlespace: #mod: : Maybe we should just have it be 'hairy' in a sentence. +[2017-03-23 00:22:18.766] [INFO] channels - /r/littlespace: #helpers: : LOL +[2017-03-23 00:22:22.036] [INFO] channels - /r/littlespace: #helpers: : ...seriously? +[2017-03-23 00:22:26.049] [INFO] channels - /r/littlespace: #gaming: : +[2017-03-23 00:22:28.970] [INFO] channels - /r/littlespace: #gaming: : It's cute +[2017-03-23 00:22:35.180] [INFO] channels - /r/littlespace: #mod: : People would say 'I'm hairy' and he'd reply with that, which is pretty funny if they're a little. +[2017-03-23 00:22:37.886] [INFO] channels - /r/littlespace: #gaming: : :o what game is that +[2017-03-23 00:22:44.109] [INFO] channels - /r/littlespace: #helpers: : .w Fajar Road, Singapore +[2017-03-23 00:22:44.567] [INFO] channels - /r/littlespace: #helpers: : I couldn't find that location :( [try being more specific if applicable] +[2017-03-23 00:22:50.893] [INFO] channels - /r/littlespace: #helpers: : Wew +[2017-03-23 00:22:56.467] [INFO] channels - /r/littlespace: #helpers: : I've noticed that it doesn't work great with international people. +[2017-03-23 00:23:03.913] [INFO] channels - /r/littlespace: #helpers: : Yeah, it seems like that way now +[2017-03-23 00:23:05.853] [INFO] channels - /r/littlespace: #helpers: : .w Bukit Panjang, Singapore +[2017-03-23 00:23:05.890] [INFO] channels - /r/littlespace: #helpers: : It's okay +[2017-03-23 00:23:06.667] [INFO] channels - /r/littlespace: #helpers: : Drizzle, 90F (32C) (305.15K) / feels like 103F (39C) (312.15K) | Humidity: 65% | Wind: N @ 2.49mph (4km/h) | 52% chance of rain (Bukit Panjang, Singapore (SG)) +[2017-03-23 00:23:09.929] [INFO] channels - /r/littlespace: #helpers: : Aha. +[2017-03-23 00:23:10.588] [INFO] channels - /r/littlespace: #helpers: : OH IT WORKS +[2017-03-23 00:23:17.497] [INFO] channels - /r/littlespace: #helpers: : Oh this is disgusting +[2017-03-23 00:23:48.003] [INFO] channels - /r/littlespace: #helpers: : It least it's a little windy, but. I'm walking to a mall now to grab food and I can feel the heat wave from the ground. Gross +[2017-03-23 00:23:57.059] [INFO] channels - /r/littlespace: #gaming: : Clawbert! +[2017-03-23 00:24:25.389] [INFO] channels - /r/littlespace: #helpers: : .w Tuscon, AZ +[2017-03-23 00:24:26.283] [INFO] channels - /r/littlespace: #helpers: : Clear, 72F (22C) (295.15K) | Humidity: 32% | Wind: N @ 5.3mph (8.5km/h) | 0% chance of precipitation (Tuscon, Arizona (US)) +[2017-03-23 00:24:32.978] [INFO] channels - /r/littlespace: #helpers: : It's nice where Blue lives. +[2017-03-23 00:24:38.546] [INFO] channels - /r/littlespace: #helpers: : until day time, that is +[2017-03-23 00:24:41.103] [INFO] channels - /r/littlespace: #helpers: : then it's ungodly hot +[2017-03-23 00:24:42.279] [INFO] channels - /r/littlespace: #gaming: : :D looks cute +[2017-03-23 00:24:50.073] [INFO] channels - /r/littlespace: #helpers: : .w Staten Island, NY +[2017-03-23 00:24:51.344] [INFO] channels - /r/littlespace: #helpers: : Clear, 24F (-4C) (269.15K) / feels like 14F (-10C) (263.15K) | Humidity: 37% | Wind: N @ 10.16mph (16.4km/h) | 0% chance of precipitation (Staten Island, New York (US)) +[2017-03-23 00:24:53.284] [INFO] channels - /r/littlespace: #helpers: : Wow that kind of weather +[2017-03-23 00:24:57.318] [INFO] channels - /r/littlespace: #helpers: : AND WOW YOUR WEATHER +[2017-03-23 00:24:59.280] [INFO] channels - /r/littlespace: #helpers: : I'm jealous +[2017-03-23 00:25:09.546] [INFO] channels - /r/littlespace: #helpers: : I'm ready for spring though, it's soooo windy. +[2017-03-23 00:25:19.493] [INFO] channels - /r/littlespace: #helpers: : However I'm so sorry for you, that is HOT. +[2017-03-23 00:25:27.045] [INFO] channels - /r/littlespace: #helpers: : I don't even have spring here.... it's summer all year +[2017-03-23 00:25:34.919] [INFO] channels - /r/littlespace: #helpers: : Ikr!!! +[2017-03-23 00:25:42.427] [INFO] channels - /r/littlespace: #helpers: : No wonder I've been having migraines all day long +[2017-03-23 00:25:48.477] [INFO] channels - /r/littlespace: #gaming: : Should play it! +[2017-03-23 00:26:07.754] [INFO] channels - /r/littlespace: #gaming: : Its cute +[2017-03-23 00:26:10.843] [INFO] channels - /r/littlespace: #helpers: : .w 18337 +[2017-03-23 00:26:11.804] [INFO] channels - /r/littlespace: #helpers: : Clear, 18F (-8C) (265.15K) / feels like 9F (-13C) (260.15K) | Humidity: 57% | Wind: N @ 6.27mph (10.1km/h) | 0% chance of precipitation (18337 - Milford, PA (US)) +[2017-03-23 00:26:17.474] [INFO] channels - /r/littlespace: #helpers: : Ariel, go to bed +[2017-03-23 00:26:18.260] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> GO TO SLEEP +[2017-03-23 00:26:23.097] [INFO] channels - /r/littlespace: #helpers: : My phone keeps buzzing +[2017-03-23 00:26:23.354] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> beat me to it +[2017-03-23 00:26:25.763] [INFO] channels - /r/littlespace: #helpers: : Also +[2017-03-23 00:26:25.982] [INFO] channels - /r/littlespace: #helpers: : I like your weather though. I'm having weather envy now +[2017-03-23 00:26:27.797] [INFO] channels - /r/littlespace: #helpers: : MUTE IT +[2017-03-23 00:26:29.368] [INFO] channels - /r/littlespace: #helpers: : You'e the one that turned notifications on. +[2017-03-23 00:26:29.798] [INFO] channels - /r/littlespace: #helpers: : Retail therapy +[2017-03-23 00:26:32.230] [INFO] channels - /r/littlespace: #helpers: : Go do not disturb +[2017-03-23 00:26:36.162] [INFO] channels - /r/littlespace: #helpers: : Why do you think I reworked the channels? +[2017-03-23 00:26:46.246] [INFO] channels - /r/littlespace: #media_sharing: : Morning. +[2017-03-23 00:26:46.296] [INFO] channels - /r/littlespace: #helpers: : To make me envious?! +[2017-03-23 00:26:50.685] [INFO] channels - /r/littlespace: #helpers: : I just spent $125 on Disney dresses +[2017-03-23 00:26:57.284] [INFO] channels - /r/littlespace: #gaming: : hey I got some socks +[2017-03-23 00:26:57.923] [INFO] channels - /r/littlespace: #helpers: : Pics +[2017-03-23 00:26:59.197] [INFO] channels - /r/littlespace: #gaming: : lol +[2017-03-23 00:27:07.578] [INFO] channels - /r/littlespace: #helpers: : I'm so jealous you guys have unique vintage in the US +[2017-03-23 00:27:15.000] [INFO] channels - /r/littlespace: #helpers: : I want a disney dress. :( +[2017-03-23 00:27:29.526] [INFO] channels - /r/littlespace: #helpers: : I used to have a Disney dress +[2017-03-23 00:27:39.993] [INFO] channels - /r/littlespace: #mod: : I just realised that they think I might be joking... +[2017-03-23 00:27:44.203] [INFO] channels - /r/littlespace: #mod: : heh +[2017-03-23 00:27:44.844] [INFO] channels - /r/littlespace: #helpers: : I still don't like ateoz +[2017-03-23 00:27:48.699] [INFO] channels - /r/littlespace: #helpers: : me either +[2017-03-23 00:28:05.226] [INFO] channels - /r/littlespace: #helpers: : He's not cool +[2017-03-23 00:29:45.677] [INFO] channels - /r/littlespace: #helpers: : He's gross +[2017-03-23 00:29:52.888] [INFO] channels - /r/littlespace: #helpers: : I think I'm too sad to sleep +[2017-03-23 00:29:59.292] [INFO] channels - /r/littlespace: #helpers: : Come stay up with us then +[2017-03-23 00:30:00.091] [INFO] channels - /r/littlespace: #helpers: : Aww, *hugs <@274917231778070528>* +[2017-03-23 00:30:04.535] [INFO] channels - /r/littlespace: #helpers: : I'll take photos of Sichuan food +[2017-03-23 00:30:15.171] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264>, go find me some Singapore mai fun +[2017-03-23 00:30:19.723] [INFO] channels - /r/littlespace: #helpers: : I know you said that's not there, but find it +[2017-03-23 00:30:22.703] [INFO] channels - /r/littlespace: #helpers: : There is no such thing over here!! +[2017-03-23 00:30:29.903] [INFO] channels - /r/littlespace: #helpers: : Lame. +[2017-03-23 00:30:45.882] [INFO] channels - /r/littlespace: #helpers: : I think I'll color +[2017-03-23 00:30:53.027] [INFO] channels - /r/littlespace: #helpers: : I've spent enough money today +[2017-03-23 00:31:05.814] [INFO] channels - /r/littlespace: #helpers: : Plus it's not taking my card anymore +[2017-03-23 00:31:13.097] [INFO] channels - /r/littlespace: #helpers: : *grumbles* +[2017-03-23 00:31:48.863] [INFO] channels - /r/littlespace: #helpers: : Yuck. Why. +[2017-03-23 00:32:00.729] [INFO] channels - /r/littlespace: #helpers: : This Chinese place is disgustingly Chinesey +[2017-03-23 00:32:08.476] [INFO] channels - /r/littlespace: #helpers: : They're playing Chinese traditional music +[2017-03-23 00:32:27.190] [INFO] channels - /r/littlespace: #helpers: : I know this is Japanese, but this is what I think of... https://www.youtube.com/watch?v=EBrSu8lIPoA +[2017-03-23 00:33:04.325] [INFO] channels - /r/littlespace: #helpers: : O my god what's that +[2017-03-23 00:33:07.853] [INFO] channels - /r/littlespace: #helpers: : I'll watch that later +[2017-03-23 00:33:14.268] [INFO] channels - /r/littlespace: #helpers: : Wifi in that mall is hopelessly unstable +[2017-03-23 00:37:01.782] [INFO] channels - /r/littlespace: #helpers: : Hi comfort food +[2017-03-23 00:37:17.995] [INFO] channels - /r/littlespace: #gaming: : Look what I found with @ClawbertGame #Clawbert http://www.bow3.com/clawbert/install +[2017-03-23 00:37:30.116] [INFO] channels - /r/littlespace: #gaming: : D'augh +[2017-03-23 00:38:35.084] [INFO] channels - /r/littlespace: #mod: : https://youtu.be/yNkyIw62N6c?t=1h8m54s + +This joke at the end... oh god... +[2017-03-23 00:38:48.208] [INFO] channels - /r/littlespace: #mod: : I love Here's your sign so much. +[2017-03-23 00:39:22.093] [INFO] channels - /r/littlespace: #helpers: : Yuuummm +[2017-03-23 00:39:41.207] [INFO] channels - /r/littlespace: #helpers: : It's all so spicy I love it +[2017-03-23 00:39:47.732] [INFO] channels - /r/littlespace: #helpers: : With the exception of the rice, everything is spicy +[2017-03-23 00:41:15.703] [INFO] channels - /r/littlespace: #helpers: : needs spicy rice +[2017-03-23 00:46:03.912] [INFO] channels - /r/littlespace: #helpers: : <@!294345991648313345> joined the server. +[2017-03-23 00:46:57.385] [INFO] channels - /r/littlespace: #helpers: : Wow, so I haven't even closed on the house yet and I already got a telemarketing call. +[2017-03-23 00:47:11.718] [INFO] channels - /r/littlespace: #helpers: : They totally called it (the realtor), they said I was going to get home security calls. +[2017-03-23 00:47:21.931] [INFO] channels - /r/littlespace: #general: : hey all +[2017-03-23 00:47:26.030] [INFO] channels - /r/littlespace: #helpers: : this late at night? +[2017-03-23 00:47:32.356] [INFO] channels - /r/littlespace: #general: : Hello +[2017-03-23 00:47:35.589] [INFO] channels - /r/littlespace: #helpers: : "Sir, do you have a interest in a brand new ADT alarm system?" + +This guy sounded indian as fuck +[2017-03-23 00:47:39.283] [INFO] channels - /r/littlespace: #helpers: : so maybe he forgot that it's 1am. +[2017-03-23 00:47:58.135] [INFO] channels - /r/littlespace: #general: : hiw things? +[2017-03-23 00:48:01.673] [INFO] channels - /r/littlespace: #helpers: : "Sir, one, it's the middle of the night. Two, I have guns." *click* +[2017-03-23 00:48:11.810] [INFO] channels - /r/littlespace: #general: : ? +[2017-03-23 00:48:14.388] [INFO] channels - /r/littlespace: #helpers: : Well it's not 1 AM over there! +[2017-03-23 00:48:22.553] [INFO] channels - /r/littlespace: #helpers: : I'm feeling kinda bleh and guilty at the same time.. but idk if I have the right to be. +[2017-03-23 00:48:28.042] [INFO] channels - /r/littlespace: #helpers: : It's almost 11pm here +[2017-03-23 00:48:38.664] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112> what's wrong? +[2017-03-23 00:48:40.459] [INFO] channels - /r/littlespace: #helpers: : What's wrong ko? +[2017-03-23 00:49:05.879] [INFO] channels - /r/littlespace: #helpers: : Ryo's parents gave him a car and told him it's his but he constantly has to make sure it's 'okay' to use it and their constant controlling behavior makes it.. difficult to just do what we want, like a normal couple. +[2017-03-23 00:49:14.353] [INFO] channels - /r/littlespace: #general: : how things? +[2017-03-23 00:49:23.090] [INFO] channels - /r/littlespace: #helpers: : They don't go food shopping so they send him.. on a Friday.. or Saturday.. and because that's when we see eachother, I have to go. +[2017-03-23 00:49:36.636] [INFO] channels - /r/littlespace: #helpers: : Because I'm with him, I'm happy, but also annoyed that they're so incredibly lazy. +[2017-03-23 00:50:20.581] [INFO] channels - /r/littlespace: #helpers: : However, this situation is a little different: he says he's going to be off tomorrow, but he's supposedly "scared something might happen with the trucks"(?) so he can't drive me in the morning. +[2017-03-23 00:50:23.857] [INFO] channels - /r/littlespace: #general: : Oh, alright. How's things for you? +[2017-03-23 00:50:33.562] [INFO] channels - /r/littlespace: #helpers: : It would've really helped me out because it takes an hour by bus, or 10-15 by car. +[2017-03-23 00:50:41.902] [INFO] channels - /r/littlespace: #helpers: : And we could've seen eachother and gone out to eat together. +[2017-03-23 00:50:57.851] [INFO] channels - /r/littlespace: #helpers: : On one hand, I know it's so wrong to expect that he'd just offer to take me and try to make it work.. +[2017-03-23 00:51:10.265] [INFO] channels - /r/littlespace: #general: : not bad thanks sorry my typing sucks... still early here +[2017-03-23 00:51:14.148] [INFO] channels - /r/littlespace: #helpers: : but on the other hand, it would've been so helpful and thoughtful. I feel like I have to drop major hints for him to even consider it. +[2017-03-23 00:51:17.374] [INFO] channels - /r/littlespace: #helpers: : I'm going to sound completely ignorant for a minute.... But what's stopping you guys from moving in together? +[2017-03-23 00:51:21.811] [INFO] channels - /r/littlespace: #helpers: : I wish I would've learned to drive already. +[2017-03-23 00:51:34.831] [INFO] channels - /r/littlespace: #helpers: : Oh, neither of us are working full-time. He actually just started EMT courses. +[2017-03-23 00:51:46.955] [INFO] channels - /r/littlespace: #helpers: : I'm graduating this May and will be working full-time hopefully. +[2017-03-23 00:52:02.712] [INFO] channels - /r/littlespace: #helpers: : Then he'll also be working, so.. we're hoping that'll happen soon. Oh, and don't worry, not ignorant at all. +[2017-03-23 00:52:15.675] [INFO] channels - /r/littlespace: #general: : It's all good. It's late where I'm at 😄 +[2017-03-23 00:52:28.880] [INFO] channels - /r/littlespace: #general: : hehe where u at? +[2017-03-23 00:52:48.590] [INFO] channels - /r/littlespace: #helpers: : He has and is now still working with his father fixing up stores or something, but his father is a cheap jerk who pays him $100 a day, when the tickets they're doing is like $500 a job.. and Ryo doe all of the work. +[2017-03-23 00:53:30.627] [INFO] channels - /r/littlespace: #helpers: : Gotcha. I can see how that'd be frustrating. Also, you've always got the right to feel bleh and guilty. While they're not fun feelings, they are feelings, and you're allowed to have them, even if they might not be completely warranted to every person. That's shitty that he doesn't get paid much for that stuff.... That's not fair at all. +[2017-03-23 00:53:45.143] [INFO] channels - /r/littlespace: #helpers: : Both parents are pure narcs, and make things super difficult between us. +[2017-03-23 00:53:48.470] [INFO] channels - /r/littlespace: #general: : Arizona, USA, You? +[2017-03-23 00:53:56.107] [INFO] channels - /r/littlespace: #helpers: : I guess it just wears me out after a while. +[2017-03-23 00:54:04.234] [INFO] channels - /r/littlespace: #helpers: : I also struggle with Daryan's controlling mother. And it's a constant irritation. +[2017-03-23 00:54:08.493] [INFO] channels - /r/littlespace: #helpers: : Can also understand that. That's why I'm not in contact with my mom. +[2017-03-23 00:54:15.677] [INFO] channels - /r/littlespace: #general: : i am in Johannesburg south africa +[2017-03-23 00:54:16.189] [INFO] channels - /r/littlespace: #helpers: : I think it irks me that he's an adult and he doesn't know what he can and can't do. +[2017-03-23 00:54:26.251] [INFO] channels - /r/littlespace: #helpers: : How do you not know if you can or can not drive me? Why is it their choice? +[2017-03-23 00:54:43.587] [INFO] channels - /r/littlespace: #helpers: : Wake up early and take me, so I don't need to wake up at 7 AM to be at class by 10:30. +[2017-03-23 00:55:07.093] [INFO] channels - /r/littlespace: #helpers: : It'd be so helpful, and we can see eachother, it's been almost a week now. +[2017-03-23 00:55:14.262] [INFO] channels - /r/littlespace: #helpers: : I asked Daryan just that question yesterday actually. I asked her if she could spend time with me on (day) if I can get it off for working all these hours. And she said "I don't know if Mom will let me." +[2017-03-23 00:55:20.424] [INFO] channels - /r/littlespace: #helpers: : She's 18, it's her choice. +[2017-03-23 00:55:33.768] [INFO] channels - /r/littlespace: #helpers: : My mom is like that too depending on the day.. Sunday is 'her' day with me. +[2017-03-23 00:55:38.706] [INFO] channels - /r/littlespace: #helpers: : She gets very grumpy if I leave. +[2017-03-23 00:55:49.735] [INFO] channels - /r/littlespace: #helpers: : With Daryan, it's every day. Because her mother hates me. A lot. +[2017-03-23 00:55:56.485] [INFO] channels - /r/littlespace: #helpers: : This Sunday is Ryo's birthday so she's still seemingly.. upset about it, but she has no choice. +[2017-03-23 00:56:07.704] [INFO] channels - /r/littlespace: #helpers: : His parents don't hate me thankfully, they hate eachother seemingly. +[2017-03-23 00:56:11.394] [INFO] channels - /r/littlespace: #helpers: : And my mom hates everyone. +[2017-03-23 00:56:14.496] [INFO] channels - /r/littlespace: #general: : so u the boss in this room i see +[2017-03-23 00:56:19.589] [INFO] channels - /r/littlespace: #helpers: : I understand exactly where he's coming from +[2017-03-23 00:57:15.334] [INFO] channels - /r/littlespace: #helpers: : After my accident I was "lent" my family's vehicle. But it's not "fully mine" so I have to ask to use it. And if I ask to do something my parents aren't cool with I.e. Going out and having fun with friends I'm not allowed to go. +[2017-03-23 00:57:21.442] [INFO] channels - /r/littlespace: #general: : Nice! +[2017-03-23 00:57:40.821] [INFO] channels - /r/littlespace: #general: : And, I guess if you want to put it that way. I think of it more like "team leader". +[2017-03-23 00:57:53.155] [INFO] channels - /r/littlespace: #general: : gym leader? +[2017-03-23 00:57:54.403] [INFO] channels - /r/littlespace: #helpers: : I think I'd be less peeved if he tried to at least, ahead of time ask them as he is fully aware that I have classes tomorrow, knows how early I need to get up.. Or straight up said "I wish I could take you tomorrow, but I know I can't and I'm sorry." because then I'd know he's thinking of me. +[2017-03-23 00:57:59.637] [INFO] channels - /r/littlespace: #general: : hehe thats what all bosses say 😉 +[2017-03-23 00:58:15.858] [INFO] channels - /r/littlespace: #general: : so did u start the littlespaces reddit? +[2017-03-23 00:58:15.898] [INFO] channels - /r/littlespace: #helpers: : One of the things I've been really wanting with this house, is for Daryan to move in with me. The first thing she does is talk to her Mom about it, which involves enforcing a *bunch* of conditions before she's *allowed* to move out. +[2017-03-23 00:58:18.212] [INFO] channels - /r/littlespace: #helpers: : He wasn't told that he was lent it, they said it was "his" but of course, sometimes suddenly ~need it~ to be infront of the house for no reason. +[2017-03-23 00:59:04.928] [INFO] channels - /r/littlespace: #helpers: : I really just wanted him to offer, for once, and be proactive instead of needing to be the one to drop hints and stuff? +[2017-03-23 00:59:12.690] [INFO] channels - /r/littlespace: #general: : No. I don't know the person that started the subreddit, but I know that she's since left the community. I was added on as a mod in the sub almost a year ago... Or maybe just over a year ago. I can't remember. +[2017-03-23 00:59:30.003] [INFO] channels - /r/littlespace: #helpers: : 1. She must be 21 before she's allowed to move. +2. We must attend 'couples therapy' for 2 years before moving in together. +3. If we plan to get married, marital counseling comes before that as well. + +Like, sigh... +[2017-03-23 00:59:31.780] [INFO] channels - /r/littlespace: #general: : hehe ok cool! +[2017-03-23 00:59:45.748] [INFO] channels - /r/littlespace: #general: : i only recently found the community +[2017-03-23 01:00:26.025] [INFO] channels - /r/littlespace: #helpers: : Thankfully they're not that uptight, but they've very.. secret narc/crazy. +[2017-03-23 01:00:35.392] [INFO] channels - /r/littlespace: #general: : so i guess modding keeps youu busy +[2017-03-23 01:00:44.624] [INFO] channels - /r/littlespace: #helpers: : My irritation with it is, her mother has *never* moved out of her mothers house. +[2017-03-23 01:00:45.406] [INFO] channels - /r/littlespace: #helpers: : I know this doesn't help you, but I get where you're coming from. That's what happens with Austin. He doesn't get hints and, while he's sweet as hell, he never initiates and never is the one that's proactive and tries to help. I always think of him as inconsiderate for that reason. He's really sweet most of the time, but he can be dumb and inconsiderate a lot of times when it comes to things that I want. He's just.... oblivious, I guess. +[2017-03-23 01:00:52.247] [INFO] channels - /r/littlespace: #helpers: : And she wants her kids to do exactly that. +[2017-03-23 01:00:58.374] [INFO] channels - /r/littlespace: #helpers: : Ryo's been afraid of trying new foods because they'll say horrible stuff like "that's nasty" and "you'll get sick" and so he's squeamish. +[2017-03-23 01:01:14.439] [INFO] channels - /r/littlespace: #helpers: : Instead of being good parents and saying "why don't you try it?" +[2017-03-23 01:01:37.524] [INFO] channels - /r/littlespace: #helpers: : You can't always protect your kids, you have to let them try new things. +[2017-03-23 01:01:39.184] [INFO] channels - /r/littlespace: #general: : Very nice. Actually, I'm not too active with modding the subreddit. I basically just take care of stuff here. I work 40+ hours a week though, and can't always attend to the Discord, which is why we have 2 other mods, and 2 new helpers. +[2017-03-23 01:01:46.817] [INFO] channels - /r/littlespace: #show_and_tell: : That is gorgeous <@142051746716450816> +[2017-03-23 01:01:52.635] [INFO] channels - /r/littlespace: #helpers: : Yeah, Blue, Ryo is a super sweetheart and sensitive and I love him more than life, but I want him to take the lead and be the.. y'know, proactive, thoughtful 'I did this ahead of time' kinda guy sometimes. +[2017-03-23 01:02:02.975] [INFO] channels - /r/littlespace: #show_and_tell: : How did you do that?? +[2017-03-23 01:02:08.827] [INFO] channels - /r/littlespace: #helpers: : Exactly +[2017-03-23 01:02:12.722] [INFO] channels - /r/littlespace: #helpers: : I have been there bb sometimes they just don't +[2017-03-23 01:02:24.513] [INFO] channels - /r/littlespace: #helpers: : And you gotta tell him right to his face +[2017-03-23 01:02:28.914] [INFO] channels - /r/littlespace: #general: : wow okay thats hectic +[2017-03-23 01:02:32.115] [INFO] channels - /r/littlespace: #helpers: : We got into a.. issue last night after he snapped at me, I cried, and instead of trying to think of ways to make things right.. he just cried and told me how he doesn't deserve me and it was hard. +[2017-03-23 01:02:35.384] [INFO] channels - /r/littlespace: #general: : Quite lol +[2017-03-23 01:02:45.683] [INFO] channels - /r/littlespace: #general: : make me feel lazy why dont ya +[2017-03-23 01:02:48.938] [INFO] channels - /r/littlespace: #helpers: : That sounds rough +[2017-03-23 01:02:52.443] [INFO] channels - /r/littlespace: #helpers: : I've been there. +[2017-03-23 01:02:53.403] [INFO] channels - /r/littlespace: #helpers: : I just told him that I wanted to move on and make new memories, and be nice to eachother and do nice things for eachother to move on, to which he said he agreed. +[2017-03-23 01:02:56.105] [INFO] channels - /r/littlespace: #helpers: : "Hey dorkbutt I don't wanna be a pest but could do x y z without me saying anything. Like gee whiz I love flowers" +[2017-03-23 01:03:02.539] [INFO] channels - /r/littlespace: #helpers: : Ryo's family does sound like my mum, actually +[2017-03-23 01:03:03.137] [INFO] channels - /r/littlespace: #helpers: : But.. then why didn't you do something nice to make up for it? +[2017-03-23 01:03:14.548] [INFO] channels - /r/littlespace: #general: : Haha I'm not trying to! +[2017-03-23 01:03:18.978] [INFO] channels - /r/littlespace: #helpers: : Ryo and I have been using OurHome and I was like, huh, maybe he'll give me points! +[2017-03-23 01:03:21.687] [INFO] channels - /r/littlespace: #helpers: : ..He gave me 3. +[2017-03-23 01:03:26.494] [INFO] channels - /r/littlespace: #helpers: : I woulda got you breakfast! +[2017-03-23 01:03:30.654] [INFO] channels - /r/littlespace: #helpers: : I know how you feel, nanako. Xuan (my caregiver) has a neutral to bad relationship with my mum, because of how controlling she is +[2017-03-23 01:03:31.314] [INFO] channels - /r/littlespace: #general: : so hows the usa today? +[2017-03-23 01:03:32.065] [INFO] channels - /r/littlespace: #helpers: : For how much he hurt my feelings, I was like "..um" haha +[2017-03-23 01:03:39.583] [INFO] channels - /r/littlespace: #helpers: : *he should give you more* +[2017-03-23 01:03:43.513] [INFO] channels - /r/littlespace: #helpers: : I made a bit of a passive aggressive joke and he actually got upset with me. +[2017-03-23 01:03:47.499] [INFO] channels - /r/littlespace: #helpers: : We will spoil you <@222611472688218112> ! +[2017-03-23 01:03:54.249] [INFO] channels - /r/littlespace: #helpers: : I already doooo +[2017-03-23 01:04:07.876] [INFO] channels - /r/littlespace: #helpers: : "That's all?" and he said "Fine, I'll take them back then! That hurt my feelings" and I got super super defensive. +[2017-03-23 01:04:09.807] [INFO] channels - /r/littlespace: #general: : Hey y'all :3 +[2017-03-23 01:04:12.432] [INFO] channels - /r/littlespace: #general: : Well. Where I'm at, it's quite warm. But really nice out today +[2017-03-23 01:04:13.577] [INFO] channels - /r/littlespace: #general: : Hi! +[2017-03-23 01:04:19.785] [INFO] channels - /r/littlespace: #helpers: : We should form a silly cg recovery clinic +[2017-03-23 01:04:23.034] [INFO] channels - /r/littlespace: #helpers: : But yeah, his parents suck, but the circumstances are forcing you both to be in this way. We'll have to adapt. Be strong, ko ❤️ +[2017-03-23 01:04:25.832] [INFO] channels - /r/littlespace: #helpers: : You took your anger out on me and I just wanted like.. 5-10 points for that crap lmao. +[2017-03-23 01:04:35.661] [INFO] channels - /r/littlespace: #helpers: : 3 IS NOT ENOUGH. +[2017-03-23 01:04:45.711] [INFO] channels - /r/littlespace: #helpers: : That's not cool though. You're never supposed to take out your anger on someone else, let alone your little +[2017-03-23 01:04:46.838] [INFO] channels - /r/littlespace: #general: : yeah suns out here.. hey lil sammy +[2017-03-23 01:04:50.403] [INFO] channels - /r/littlespace: #helpers: : *holds out pitchfork* +[2017-03-23 01:04:52.901] [INFO] channels - /r/littlespace: #helpers: : Thank you Blue. ❤ ❤ ❤ And Meep!! ❤ ❤ ❤ And Ariel ❤ ❤ ❤ +[2017-03-23 01:04:54.370] [INFO] channels - /r/littlespace: #helpers: : Even worse three is like two plus one +[2017-03-23 01:04:59.004] [INFO] channels - /r/littlespace: #general: : Hey ♡ +[2017-03-23 01:04:59.392] [INFO] channels - /r/littlespace: #helpers: : and War. 🐰 +[2017-03-23 01:05:03.566] [INFO] channels - /r/littlespace: #helpers: : You better not forget me. +[2017-03-23 01:05:04.538] [INFO] channels - /r/littlespace: #helpers: : Turd. +[2017-03-23 01:05:09.304] [INFO] channels - /r/littlespace: #helpers: : You get a rabbit. +[2017-03-23 01:05:09.341] [INFO] channels - /r/littlespace: #general: : It's dark out here, but it is 2am so makes sense 😛 +[2017-03-23 01:05:12.546] [INFO] channels - /r/littlespace: #helpers: : WABBIT SEASON +[2017-03-23 01:05:17.641] [INFO] channels - /r/littlespace: #general: : hehe sounds about right +[2017-03-23 01:05:18.400] [INFO] channels - /r/littlespace: #helpers: : 🔥 +[2017-03-23 01:05:21.256] [INFO] channels - /r/littlespace: #general: : 8 am here +[2017-03-23 01:05:23.202] [INFO] channels - /r/littlespace: #helpers: : ❤ +[2017-03-23 01:05:24.577] [INFO] channels - /r/littlespace: #helpers: : It's lit +[2017-03-23 01:05:28.121] [INFO] channels - /r/littlespace: #helpers: : Oh my god +[2017-03-23 01:05:29.981] [INFO] channels - /r/littlespace: #helpers: : Side note +[2017-03-23 01:05:31.228] [INFO] channels - /r/littlespace: #mod: : Okay, so, any reordering of the channels, I apologize for. This trackpad is not as smooth as the one on my Macbook, and I'm still getting used to it (plus, I think it needs to be cleaned), and so I keep accidentally picking up the channels and dropping them in random orders. +[2017-03-23 01:05:34.042] [INFO] channels - /r/littlespace: #helpers: : Too much chilli +[2017-03-23 01:05:37.269] [INFO] channels - /r/littlespace: #general: : UK? +[2017-03-23 01:05:37.668] [INFO] channels - /r/littlespace: #helpers: : Heh +[2017-03-23 01:05:40.453] [INFO] channels - /r/littlespace: #helpers: : My stomach is burning and not in a good way +[2017-03-23 01:05:40.947] [INFO] channels - /r/littlespace: #mod: : I was about to ask if you did that. +[2017-03-23 01:05:49.244] [INFO] channels - /r/littlespace: #helpers: : Yeah, Meep, it bothered me that he snapped at me because he'd been snapping at me a few times previously and it began to.. make me feel like he doesn't see me as his little? +[2017-03-23 01:05:59.486] [INFO] channels - /r/littlespace: #mod: : but i do it from time to time, so don't worry +[2017-03-23 01:06:08.653] [INFO] channels - /r/littlespace: #helpers: : Idk, it made me really gloomy, I'm still trying to shake the feeling. +[2017-03-23 01:06:24.097] [INFO] channels - /r/littlespace: #helpers: : I should have given Daryan some points yesterday after snapping at her... +[2017-03-23 01:06:24.835] [INFO] channels - /r/littlespace: #mod: : Just getting used to this damn trackpad. I think I'm gonna clean it tomorrow. Might be gunk stuck underneath it. +[2017-03-23 01:06:32.058] [INFO] channels - /r/littlespace: #helpers: : I felt so bad. I still don't feel like I made up for it. +[2017-03-23 01:06:41.497] [INFO] channels - /r/littlespace: #helpers: : I think I'm gonna make it up to her with cheesecake. +[2017-03-23 01:06:50.005] [INFO] channels - /r/littlespace: #helpers: : A way to a woman's heart is through their stomach. +[2017-03-23 01:06:51.036] [INFO] channels - /r/littlespace: #helpers: : OMG SEND ME SOME +[2017-03-23 01:07:01.506] [INFO] channels - /r/littlespace: #helpers: : Case and point +[2017-03-23 01:07:13.324] [INFO] channels - /r/littlespace: #helpers: : Hey blue, type !cookie. +[2017-03-23 01:07:13.523] [INFO] channels - /r/littlespace: #helpers: : See, if Ryo surprised me with like a donut I'd be so giddy. +[2017-03-23 01:07:15.298] [INFO] channels - /r/littlespace: #helpers: : Xuan does that sometimes actually, irl and all. I had a bad experience with a psychologically abusive ex and it hit very close. What I tend to do is to withdraw, and when I feel slightly better, I tell it in his face that he's hurting me a lot and his actions have hurt me and made me feel like I'm not treasured enough at all +[2017-03-23 01:07:19.871] [INFO] channels - /r/littlespace: #helpers: : Then again I love food and presents. +[2017-03-23 01:07:22.908] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-23 01:07:23.106] [INFO] channels - /r/littlespace: #helpers: : *gives <@!173239190190817280> a freshly made Oatmeal Raisin cookie.* +[2017-03-23 01:07:24.489] [INFO] channels - /r/littlespace: #helpers: : ^ for me, I just want eggs. And tomatoes +[2017-03-23 01:07:36.900] [INFO] channels - /r/littlespace: #helpers: : EWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +[2017-03-23 01:07:42.037] [INFO] channels - /r/littlespace: #helpers: : not to you, meep +[2017-03-23 01:07:47.566] [INFO] channels - /r/littlespace: #helpers: : I know +[2017-03-23 01:07:50.520] [INFO] channels - /r/littlespace: #helpers: : I'm STILL OFFENDED +[2017-03-23 01:07:57.378] [INFO] channels - /r/littlespace: #helpers: : WHATS WRONG WITH AN OATMEAL RAISIN COOKIE +[2017-03-23 01:07:58.158] [INFO] channels - /r/littlespace: #helpers: : Blue, !bacon +[2017-03-23 01:08:03.400] [INFO] channels - /r/littlespace: #helpers: : !bacon +[2017-03-23 01:08:03.569] [INFO] channels - /r/littlespace: #helpers: : *gives <@!173239190190817280> a strip of delicious bacon.* +[2017-03-23 01:08:06.500] [INFO] channels - /r/littlespace: #helpers: : meh +[2017-03-23 01:08:07.979] [INFO] channels - /r/littlespace: #general: : south africa +[2017-03-23 01:08:12.690] [INFO] channels - /r/littlespace: #helpers: : better than damn raisins. +[2017-03-23 01:08:16.217] [INFO] channels - /r/littlespace: #helpers: : We should get randomized cookie types. +[2017-03-23 01:08:17.734] [INFO] channels - /r/littlespace: #helpers: : My heart is broken +[2017-03-23 01:08:22.192] [INFO] channels - /r/littlespace: #helpers: : I agree +[2017-03-23 01:08:22.212] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112>, denied +[2017-03-23 01:08:23.949] [INFO] channels - /r/littlespace: #helpers: : No but +[2017-03-23 01:08:27.777] [INFO] channels - /r/littlespace: #helpers: : Talk to ryo seriously +[2017-03-23 01:08:28.085] [INFO] channels - /r/littlespace: #helpers: : No, I like random ones +[2017-03-23 01:08:30.260] [INFO] channels - /r/littlespace: #helpers: : OATMEAL RAISIN IS BAD. +[2017-03-23 01:08:31.760] [INFO] channels - /r/littlespace: #helpers: : Like, adult conversations +[2017-03-23 01:08:38.041] [INFO] channels - /r/littlespace: #helpers: : And oatmeal raisins are good, stop +[2017-03-23 01:08:39.027] [INFO] channels - /r/littlespace: #helpers: : Why do you think I put that in there? +[2017-03-23 01:08:40.753] [INFO] channels - /r/littlespace: #helpers: : :) +[2017-03-23 01:08:45.933] [INFO] channels - /r/littlespace: #helpers: : Mod majority. :D +[2017-03-23 01:08:46.874] [INFO] channels - /r/littlespace: #helpers: : We do, but whenever he does something wrong, he gets very emotional. +[2017-03-23 01:08:56.931] [INFO] channels - /r/littlespace: #helpers: : to please meep, and piss them off? 🌸 +[2017-03-23 01:08:57.586] [INFO] channels - /r/littlespace: #helpers: : It's not really about how I will feel better, rather that he can't handle that he hurt me. +[2017-03-23 01:09:01.297] [INFO] channels - /r/littlespace: #helpers: : If that makes sense? +[2017-03-23 01:09:05.099] [INFO] channels - /r/littlespace: #helpers: : Yeah it does +[2017-03-23 01:09:10.763] [INFO] channels - /r/littlespace: #helpers: : Meep, don't listen to Blue, she doesn't know what she's talking about with raisins. ❤ +[2017-03-23 01:09:12.286] [INFO] channels - /r/littlespace: #general: : Hm, a bit far from me 😛 +[2017-03-23 01:09:17.247] [INFO] channels - /r/littlespace: #helpers: : natures turds. +[2017-03-23 01:09:17.660] [INFO] channels - /r/littlespace: #general: : North Carolina (USA) here +[2017-03-23 01:09:23.444] [INFO] channels - /r/littlespace: #helpers: : Is it hard to get through to ryo when he's beating himself up after hurting you? +[2017-03-23 01:09:24.641] [INFO] channels - /r/littlespace: #helpers: : *sneezes* +[2017-03-23 01:09:27.956] [INFO] channels - /r/littlespace: #helpers: : sorry, i'm allergic to bullshit +[2017-03-23 01:09:36.875] [INFO] channels - /r/littlespace: #helpers: : Oh god my stomach +[2017-03-23 01:09:38.248] [INFO] channels - /r/littlespace: #helpers: : I bet you never stop sneezing then, huh? +[2017-03-23 01:09:50.755] [INFO] channels - /r/littlespace: #helpers: : Oh god, did I tell you guys what Daryan did a couple weeks ago? +[2017-03-23 01:09:54.579] [INFO] channels - /r/littlespace: #helpers: : It's not hard to get through to him, if I just encourage him that it's fine/I'm perfectly fine. +[2017-03-23 01:10:03.183] [INFO] channels - /r/littlespace: #helpers: : Sneezed so hard she shit herself? +[2017-03-23 01:10:07.193] [INFO] channels - /r/littlespace: #helpers: : We went out to eat with my grandparents... and my grandfather bumped into Daryan and said "I'm sorry, I can't see shit today." +[2017-03-23 01:10:15.706] [INFO] channels - /r/littlespace: #helpers: : and she laughs, then responds with, "Oh, well Matt must be invisible then." +[2017-03-23 01:10:18.499] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> We've all been close. +[2017-03-23 01:10:28.465] [INFO] channels - /r/littlespace: #helpers: : Hahahahaha +[2017-03-23 01:10:32.924] [INFO] channels - /r/littlespace: #helpers: : Guys +[2017-03-23 01:10:41.656] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112> that's true. It's horrible when you're on your period. +[2017-03-23 01:10:52.489] [INFO] channels - /r/littlespace: #helpers: : I just noticed. <@200944723035160576> , you're the only guy in here. +[2017-03-23 01:10:55.017] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:10:55.979] [INFO] channels - /r/littlespace: #helpers: : I'm on my period today +[2017-03-23 01:10:56.890] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> and you can feel a little bit of blood seep out *gags* +[2017-03-23 01:10:58.574] [INFO] channels - /r/littlespace: #helpers: : It's fucking awful +[2017-03-23 01:11:01.487] [INFO] channels - /r/littlespace: #helpers: : *gags* +[2017-03-23 01:11:02.228] [INFO] channels - /r/littlespace: #helpers: : That's okay, I hate getting my period too, <@173239190190817280> +[2017-03-23 01:11:07.753] [INFO] channels - /r/littlespace: #helpers: : Yeah +[2017-03-23 01:11:07.933] [INFO] channels - /r/littlespace: #helpers: : I feel like I'm wallowing in my blood +[2017-03-23 01:11:08.927] [INFO] channels - /r/littlespace: #helpers: : ew +[2017-03-23 01:11:12.182] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:11:18.441] [INFO] channels - /r/littlespace: #helpers: : PIZZA! +[2017-03-23 01:11:19.947] [INFO] channels - /r/littlespace: #helpers: : Oh my god +[2017-03-23 01:11:21.399] [INFO] channels - /r/littlespace: #helpers: : !pizza +[2017-03-23 01:11:25.079] [INFO] channels - /r/littlespace: #helpers: : lame +[2017-03-23 01:11:30.419] [INFO] channels - /r/littlespace: #mod: : So, I don't want to say this because I don't know if Meep will get offended. +[2017-03-23 01:11:31.030] [INFO] channels - /r/littlespace: #helpers: : I just spoke to the person in Chinese +[2017-03-23 01:11:32.265] [INFO] channels - /r/littlespace: #helpers: : THAT'S SO CUTE ARIEL +[2017-03-23 01:11:36.146] [INFO] channels - /r/littlespace: #mod: : My buddy told me a joke awhile back... +[2017-03-23 01:11:37.902] [INFO] channels - /r/littlespace: #helpers: : And then she asked me if I was from china +[2017-03-23 01:11:39.290] [INFO] channels - /r/littlespace: #mod: : and I may have told you guys as well. +[2017-03-23 01:11:40.683] [INFO] channels - /r/littlespace: #helpers: : 🙊🙊🙊 +[2017-03-23 01:11:43.003] [INFO] channels - /r/littlespace: #helpers: : GOD FUCKING DAMNIT +[2017-03-23 01:11:51.429] [INFO] channels - /r/littlespace: #helpers: : iM SINGAPOREAN, UGH +[2017-03-23 01:11:53.506] [INFO] channels - /r/littlespace: #mod: : A Islamic guy walks into a Florida bar... what does he order? "Shots for everyone." +[2017-03-23 01:11:59.660] [INFO] channels - /r/littlespace: #mod: : OH MY GOD +[2017-03-23 01:12:02.769] [INFO] channels - /r/littlespace: #helpers: : Tell her you have gorgeous American cousins +[2017-03-23 01:12:09.033] [INFO] channels - /r/littlespace: #mod: : that's horrible and hilarious +[2017-03-23 01:12:11.232] [INFO] channels - /r/littlespace: #helpers: : *flips purple hair* +[2017-03-23 01:12:26.070] [INFO] channels - /r/littlespace: #helpers: : *flips kos hair from another state* +[2017-03-23 01:12:34.480] [INFO] channels - /r/littlespace: #helpers: : WHY DON'T YOU FLIP MY HAIR +[2017-03-23 01:12:35.696] [INFO] channels - /r/littlespace: #mod: : I think the only jokes that make me sad are holocaust jokes but then again I'm a Jew so +[2017-03-23 01:12:38.486] [INFO] channels - /r/littlespace: #helpers: : 💔 +[2017-03-23 01:12:41.578] [INFO] channels - /r/littlespace: #mod: : I'm biased +[2017-03-23 01:12:41.597] [INFO] channels - /r/littlespace: #helpers: : Okay I have a question for everyone but war +[2017-03-23 01:12:43.758] [INFO] channels - /r/littlespace: #helpers: : Idk if you have enuff +[2017-03-23 01:12:45.544] [INFO] channels - /r/littlespace: #mod: : thanks, religious grandmother +[2017-03-23 01:12:51.889] [INFO] channels - /r/littlespace: #helpers: : LADYBITS +[2017-03-23 01:12:52.975] [INFO] channels - /r/littlespace: #mod: : D: +[2017-03-23 01:13:00.148] [INFO] channels - /r/littlespace: #mod: : I have no shame +[2017-03-23 01:13:08.199] [INFO] channels - /r/littlespace: #mod: : So, we hired a black guy at work right? +[2017-03-23 01:13:11.132] [INFO] channels - /r/littlespace: #mod: : IT'S EASY BEING A PRIVLEDGED WHITE MALE. +[2017-03-23 01:13:28.295] [INFO] channels - /r/littlespace: #helpers: : Flip your beard +[2017-03-23 01:13:29.168] [INFO] channels - /r/littlespace: #mod: : The first thing we did was put on the "What should we order?" ( for snacks and what not ) was grape soda. +[2017-03-23 01:13:38.910] [INFO] channels - /r/littlespace: #helpers: : _hair is flipped_ +[2017-03-23 01:13:42.241] [INFO] channels - /r/littlespace: #helpers: : _looks around, confused_ +[2017-03-23 01:13:45.117] [INFO] channels - /r/littlespace: #helpers: : I don't wear girly stuff a lot, but I've been wanting to start wearing dresses, cause let's face it, they're cute as fuck.... I know what kind of styles I like, but I also know that I can't remember to sit correctly while I'm wearing a dress. Is it acceptable to wear leggings or shorts underneath them? +[2017-03-23 01:13:52.839] [INFO] channels - /r/littlespace: #mod: : and goes in to get a snack, comes back out and goes, "You guys know, and this is going to sound stereotypical, but I LOVE grape soda." +[2017-03-23 01:13:53.359] [INFO] channels - /r/littlespace: #helpers: : yes, absolutely +[2017-03-23 01:13:56.286] [INFO] channels - /r/littlespace: #helpers: : Yes +[2017-03-23 01:13:59.619] [INFO] channels - /r/littlespace: #helpers: : 100% +[2017-03-23 01:14:02.520] [INFO] channels - /r/littlespace: #helpers: : I have a friend who wears jean shorts under her dresses. +[2017-03-23 01:14:02.527] [INFO] channels - /r/littlespace: #helpers: : Yes +[2017-03-23 01:14:08.514] [INFO] channels - /r/littlespace: #helpers: : Also do you have a long or short torso +[2017-03-23 01:14:10.093] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> yes, absolutely. +[2017-03-23 01:14:12.373] [INFO] channels - /r/littlespace: #helpers: : Um +[2017-03-23 01:14:14.652] [INFO] channels - /r/littlespace: #helpers: : I don't know +[2017-03-23 01:14:19.354] [INFO] channels - /r/littlespace: #helpers: : long ish I guess +[2017-03-23 01:14:22.696] [INFO] channels - /r/littlespace: #helpers: : I do wear shorts especially if they're really short (like, my dresses) +[2017-03-23 01:14:23.246] [INFO] channels - /r/littlespace: #helpers: : I'm pretty short though +[2017-03-23 01:14:31.900] [INFO] channels - /r/littlespace: #helpers: : Blue's tiny but I'd go with longer torso than short. +[2017-03-23 01:14:39.681] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> why was i excluded from this question? +[2017-03-23 01:14:41.739] [INFO] channels - /r/littlespace: #helpers: : I just realised I've never seen blue before +[2017-03-23 01:14:51.413] [INFO] channels - /r/littlespace: #helpers: : cause you don't wear dresses in public +[2017-03-23 01:14:57.081] [INFO] channels - /r/littlespace: #helpers: : in public, yes, that is true. +[2017-03-23 01:14:59.488] [INFO] channels - /r/littlespace: #helpers: : Hmm tiny? +[2017-03-23 01:15:00.014] [INFO] channels - /r/littlespace: #helpers: : D: +[2017-03-23 01:15:03.830] [INFO] channels - /r/littlespace: #helpers: : But, you can ask ateoz. He likes to wear dresses! +[2017-03-23 01:15:04.150] [INFO] channels - /r/littlespace: #helpers: : We posted selfies way back in media_sharing +[2017-03-23 01:15:08.169] [INFO] channels - /r/littlespace: #helpers: : hold on +[2017-03-23 01:15:09.256] [INFO] channels - /r/littlespace: #helpers: : Ooooh +[2017-03-23 01:15:09.752] [INFO] channels - /r/littlespace: #helpers: : BABAHAH +[2017-03-23 01:15:10.439] [INFO] channels - /r/littlespace: #helpers: : incoming photo +[2017-03-23 01:15:14.769] [INFO] channels - /r/littlespace: #helpers: : Just someone track her down on facebook! +[2017-03-23 01:15:15.081] [INFO] channels - /r/littlespace: #helpers: : gotem +[2017-03-23 01:15:16.913] [INFO] channels - /r/littlespace: #helpers: : :P +[2017-03-23 01:15:27.163] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:15:33.755] [INFO] channels - /r/littlespace: #helpers: : there's most of me +[2017-03-23 01:15:35.284] [INFO] channels - /r/littlespace: #helpers: : YOU ARE NOT TINY???? +[2017-03-23 01:15:38.922] [INFO] channels - /r/littlespace: #helpers: : I'm thinking empire waist +[2017-03-23 01:15:40.417] [INFO] channels - /r/littlespace: #helpers: : She's my size! +[2017-03-23 01:15:41.146] [INFO] channels - /r/littlespace: #helpers: : I'm short as hell +[2017-03-23 01:15:46.515] [INFO] channels - /r/littlespace: #helpers: : like 5'5"? +[2017-03-23 01:15:47.853] [INFO] channels - /r/littlespace: #helpers: : right? +[2017-03-23 01:15:48.233] [INFO] channels - /r/littlespace: #helpers: : Short is +[2017-03-23 01:15:49.598] [INFO] channels - /r/littlespace: #helpers: : What's your size? +[2017-03-23 01:15:49.725] [INFO] channels - /r/littlespace: #helpers: : ? +[2017-03-23 01:15:57.995] [INFO] channels - /r/littlespace: #helpers: : I think that's my height. I'm 164cm +[2017-03-23 01:16:02.798] [INFO] channels - /r/littlespace: #helpers: : I'm 5'4" +[2017-03-23 01:16:06.539] [INFO] channels - /r/littlespace: #helpers: : Hah! +[2017-03-23 01:16:08.092] [INFO] channels - /r/littlespace: #helpers: : I'm a medium +[2017-03-23 01:16:11.761] [INFO] channels - /r/littlespace: #helpers: : Yeah, I'm 5ft 5, 120lbs. I'm tiny. +[2017-03-23 01:16:15.161] [INFO] channels - /r/littlespace: #helpers: : "Short as hell" +[2017-03-23 01:16:15.553] [INFO] channels - /r/littlespace: #helpers: : I don't know numbers +[2017-03-23 01:16:28.899] [INFO] channels - /r/littlespace: #helpers: : The kids at work always say that I'm short and full of hate +[2017-03-23 01:16:32.209] [INFO] channels - /r/littlespace: #helpers: : And I've mbraced that +[2017-03-23 01:16:36.137] [INFO] channels - /r/littlespace: #helpers: : I learned why I fit so well in my Miata. I actually fall under the height/weight of "small asian woman" +[2017-03-23 01:16:38.439] [INFO] channels - /r/littlespace: #helpers: : 5'1" ovea hea +[2017-03-23 01:16:41.468] [INFO] channels - /r/littlespace: #general: : Singapore for me 😃 +[2017-03-23 01:16:51.265] [INFO] channels - /r/littlespace: #helpers: : and that car was designed for small asian women +[2017-03-23 01:16:52.684] [INFO] channels - /r/littlespace: #helpers: : 5'2 +[2017-03-23 01:16:58.625] [INFO] channels - /r/littlespace: #helpers: : Let me Google +[2017-03-23 01:17:01.453] [INFO] channels - /r/littlespace: #helpers: : 5'1 and a half actually I believe +[2017-03-23 01:17:01.510] [INFO] channels - /r/littlespace: #helpers: : I hate you Americans +[2017-03-23 01:17:07.909] [INFO] channels - /r/littlespace: #helpers: : but.. 5'2 +[2017-03-23 01:17:09.203] [INFO] channels - /r/littlespace: #helpers: : OUR SYSTEM IS BETTER +[2017-03-23 01:17:10.309] [INFO] channels - /r/littlespace: #helpers: : We have different systems and it is such a bitch +[2017-03-23 01:17:13.209] [INFO] channels - /r/littlespace: #helpers: : NO IT ISNT +[2017-03-23 01:17:16.830] [INFO] channels - /r/littlespace: #helpers: : STOP BEING A SPECIAL SNOWFLAKE +[2017-03-23 01:17:17.074] [INFO] channels - /r/littlespace: #helpers: : I agree with josie +[2017-03-23 01:17:30.254] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> you're so short +[2017-03-23 01:17:30.923] [INFO] channels - /r/littlespace: #helpers: : Okay brb let me Google. Unless there's a bot for conversion? +[2017-03-23 01:17:36.093] [INFO] channels - /r/littlespace: #helpers: : I'll just convert it for you +[2017-03-23 01:17:36.108] [INFO] channels - /r/littlespace: #helpers: : Yes +[2017-03-23 01:17:40.089] [INFO] channels - /r/littlespace: #mod: : lmaaooo +[2017-03-23 01:17:47.356] [INFO] channels - /r/littlespace: #mod: : Wait, who doesn't? It's good sometimes. +[2017-03-23 01:17:50.048] [INFO] channels - /r/littlespace: #helpers: : 5'4' +[2017-03-23 01:18:01.511] [INFO] channels - /r/littlespace: #helpers: : Blue, you're about the same height as me +[2017-03-23 01:18:01.877] [INFO] channels - /r/littlespace: #helpers: : "Thanks WARBIRD199-bot" +[2017-03-23 01:18:03.564] [INFO] channels - /r/littlespace: #helpers: : I think? +[2017-03-23 01:18:04.285] [INFO] channels - /r/littlespace: #helpers: : I wear heels occasionally but eh +[2017-03-23 01:18:14.715] [INFO] channels - /r/littlespace: #helpers: : Yay! Thank you War the bot +[2017-03-23 01:18:16.937] [INFO] channels - /r/littlespace: #helpers: : Converse all day +[2017-03-23 01:18:19.309] [INFO] channels - /r/littlespace: #helpers: : I don't like wearing heels because my feet end up hurting. +[2017-03-23 01:18:20.759] [INFO] channels - /r/littlespace: #helpers: : Vans all day +[2017-03-23 01:18:21.255] [INFO] channels - /r/littlespace: #helpers: : I wear vans! +[2017-03-23 01:18:22.044] [INFO] channels - /r/littlespace: #helpers: : converse is life +[2017-03-23 01:18:23.969] [INFO] channels - /r/littlespace: #helpers: : TWINS +[2017-03-23 01:18:26.516] [INFO] channels - /r/littlespace: #helpers: : Mocs all day +[2017-03-23 01:18:27.517] [INFO] channels - /r/littlespace: #helpers: : SUPERGA IS LIFE +[2017-03-23 01:18:28.792] [INFO] channels - /r/littlespace: #helpers: : Hahah +[2017-03-23 01:18:38.149] [INFO] channels - /r/littlespace: #helpers: : *pokes the bot* why is the bot not working +[2017-03-23 01:18:44.632] [INFO] channels - /r/littlespace: #helpers: : I need a pair of not high tops. +[2017-03-23 01:18:44.674] [INFO] channels - /r/littlespace: #helpers: : Damnit, war, do the conversion +[2017-03-23 01:18:48.657] [INFO] channels - /r/littlespace: #mod: : Oh, I didn't say the racist part yet... +[2017-03-23 01:18:49.316] [INFO] channels - /r/littlespace: #helpers: : I want white keds tho +[2017-03-23 01:18:55.331] [INFO] channels - /r/littlespace: #mod: : we didn't put it on the board as grape soda... but purple drank +[2017-03-23 01:18:56.729] [INFO] channels - /r/littlespace: #mod: : lol +[2017-03-23 01:19:07.180] [INFO] channels - /r/littlespace: #helpers: : I've only got a pair of high top nikes, and while I love them, I want a pair of low top converse like shoes +[2017-03-23 01:19:10.261] [INFO] channels - /r/littlespace: #mod: : I got distracted because Blue was excluding me of my femininity. +[2017-03-23 01:19:14.886] [INFO] channels - /r/littlespace: #mod: : HOW DARE YOU ASSUME MY GENDER +[2017-03-23 01:19:16.519] [INFO] channels - /r/littlespace: #helpers: : Yes get some +[2017-03-23 01:19:19.279] [INFO] channels - /r/littlespace: #helpers: : So comfy +[2017-03-23 01:19:19.701] [INFO] channels - /r/littlespace: #helpers: : What I wear every day #noshame +[2017-03-23 01:19:31.878] [INFO] channels - /r/littlespace: #helpers: : did i miss another conversaion? lol +[2017-03-23 01:19:35.646] [INFO] channels - /r/littlespace: #helpers: : I can fit in the largest kid size for converse which is nice and cheap +[2017-03-23 01:19:46.289] [INFO] channels - /r/littlespace: #helpers: : What are all of your heights +[2017-03-23 01:19:49.229] [INFO] channels - /r/littlespace: #helpers: : Duh 🙄 +[2017-03-23 01:19:54.387] [INFO] channels - /r/littlespace: #helpers: : I'm a 7 1/2 in shoe +[2017-03-23 01:20:02.630] [INFO] channels - /r/littlespace: #helpers: : 8.5, mens shoe. +[2017-03-23 01:20:11.608] [INFO] channels - /r/littlespace: #helpers: : Ryo's a 12 in men's shoes. +[2017-03-23 01:20:13.903] [INFO] channels - /r/littlespace: #helpers: : I think I'm a 6 for shoes +[2017-03-23 01:20:24.765] [INFO] channels - /r/littlespace: #helpers: : and is like 5'11 I believe +[2017-03-23 01:20:30.162] [INFO] channels - /r/littlespace: #helpers: : Or a 6.5 +[2017-03-23 01:20:38.634] [INFO] channels - /r/littlespace: #mod: : <@173239190190817280> ❤ +[2017-03-23 01:21:03.937] [INFO] channels - /r/littlespace: #helpers: : I'm a 10 in women's shoes +[2017-03-23 01:21:06.244] [INFO] channels - /r/littlespace: #mod: : I'm going to have so many more little cute girly stuff when I move though... +[2017-03-23 01:21:10.337] [INFO] channels - /r/littlespace: #helpers: : I think that's like 8.5 men's. +[2017-03-23 01:21:12.386] [INFO] channels - /r/littlespace: #mod: : because why the fuck not +[2017-03-23 01:21:17.475] [INFO] channels - /r/littlespace: #helpers: : I'm like a tiny little Asian here +[2017-03-23 01:21:20.194] [INFO] channels - /r/littlespace: #helpers: : Damnit +[2017-03-23 01:21:20.525] [INFO] channels - /r/littlespace: #mod: : paint the entire house pink +[2017-03-23 01:21:23.205] [INFO] channels - /r/littlespace: #mod: : and then show me +[2017-03-23 01:21:25.410] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> TWINS +[2017-03-23 01:21:27.117] [INFO] channels - /r/littlespace: #helpers: : I have stalks for ankles/legs though +[2017-03-23 01:21:35.153] [INFO] channels - /r/littlespace: #mod: : with glitter? +[2017-03-23 01:21:35.949] [INFO] channels - /r/littlespace: #mod: : :) +[2017-03-23 01:21:41.108] [INFO] channels - /r/littlespace: #helpers: : YAY TWINS +[2017-03-23 01:21:47.368] [INFO] channels - /r/littlespace: #helpers: : My legs are long +[2017-03-23 01:21:51.690] [INFO] channels - /r/littlespace: #helpers: : https://www.amazon.com/Vans-Unisex-Disney-Donald-Shoes-Donald/dp/B00ZIKQRMC/ref=pd_sim_309_4?_encoding=UTF8&pd_rd_i=B00ZIKQRMC&pd_rd_r=9128NH1SF75X5JEP6CTD&pd_rd_w=ZUgSk&pd_rd_wg=4AGuE&refRID=9128NH1SF75X5JEP6CTD +[2017-03-23 01:21:54.132] [INFO] channels - /r/littlespace: #helpers: : I think my legs are too long but idk +[2017-03-23 01:21:55.643] [INFO] channels - /r/littlespace: #helpers: : I like these +[2017-03-23 01:22:09.630] [INFO] channels - /r/littlespace: #helpers: : Yuck the lift for my flat smells +[2017-03-23 01:22:18.154] [INFO] channels - /r/littlespace: #helpers: : ew like what +[2017-03-23 01:22:22.293] [INFO] channels - /r/littlespace: #helpers: : why am i curious about that +[2017-03-23 01:22:36.669] [INFO] channels - /r/littlespace: #mod: : I'm still so hesitant to talk about Crossdressing and what not when I'm little. Like I know Meep and ARiel wouldn't judge, but it feel so awkward being open about it +[2017-03-23 01:22:49.895] [INFO] channels - /r/littlespace: #mod: : We don't mind! +[2017-03-23 01:22:55.755] [INFO] channels - /r/littlespace: #mod: : I actually encourage Austin to do it lol +[2017-03-23 01:23:04.115] [INFO] channels - /r/littlespace: #helpers: : Hahahah +[2017-03-23 01:23:13.705] [INFO] channels - /r/littlespace: #mod: : He goes through the binge/purge cycles with it though, and hasn't had interest for awhile. +[2017-03-23 01:23:18.232] [INFO] channels - /r/littlespace: #mod: : Me too. +[2017-03-23 01:23:23.217] [INFO] channels - /r/littlespace: #mod: : But I'd really like to get him back into it. +[2017-03-23 01:23:26.369] [INFO] channels - /r/littlespace: #helpers: : like, unwashed bodies and really cheap cologne and cigarettes +[2017-03-23 01:23:28.493] [INFO] channels - /r/littlespace: #helpers: : I'm anywhere from a 7.5-8 in shoes +[2017-03-23 01:23:28.624] [INFO] channels - /r/littlespace: #helpers: : *yuck* +[2017-03-23 01:23:30.050] [INFO] channels - /r/littlespace: #helpers: : Ew +[2017-03-23 01:23:30.788] [INFO] channels - /r/littlespace: #mod: : Just be dominant. Make him. :) +[2017-03-23 01:23:31.431] [INFO] channels - /r/littlespace: #helpers: : Oh +[2017-03-23 01:23:35.598] [INFO] channels - /r/littlespace: #helpers: : That smells like a ghetto bar. +[2017-03-23 01:23:37.173] [INFO] channels - /r/littlespace: #helpers: : So a whorehouse +[2017-03-23 01:23:39.568] [INFO] channels - /r/littlespace: #mod: : Oh god, I would not be against Daryan forcing me to.. +[2017-03-23 01:23:41.763] [INFO] channels - /r/littlespace: #mod: : she wont' though +[2017-03-23 01:23:42.011] [INFO] channels - /r/littlespace: #helpers: : ^ +[2017-03-23 01:23:51.809] [INFO] channels - /r/littlespace: #helpers: : No no I insist yours was better +[2017-03-23 01:23:55.773] [INFO] channels - /r/littlespace: #helpers: : yuck. both are bad, right +[2017-03-23 01:24:09.993] [INFO] channels - /r/littlespace: #helpers: : i've never been into ghetto bars nor a whorehouse, i wouldn't know +[2017-03-23 01:24:28.438] [INFO] channels - /r/littlespace: #mod: : Daryan will never be dominant. She has panic attacks after she tries to be. +[2017-03-23 01:24:30.929] [INFO] channels - /r/littlespace: #mod: : That's the majority of our sex. I'm the dominant one. The problem right now is that, while we have girl clothes for him, he doesn't fit into a lot of them anymore, and I don't want to go buy a ton of girl clothes for him. +[2017-03-23 01:24:43.949] [INFO] channels - /r/littlespace: #mod: : Nah, nah, just embarass him. +[2017-03-23 01:24:52.199] [INFO] channels - /r/littlespace: #helpers: : I haven't either, but that's what I imagine they would smell like. +[2017-03-23 01:24:53.000] [INFO] channels - /r/littlespace: #mod: : Take him to the store and say, "go try these on" +[2017-03-23 01:24:57.072] [INFO] channels - /r/littlespace: #mod: : Kidding. +[2017-03-23 01:24:58.888] [INFO] channels - /r/littlespace: #mod: : I would ie. +[2017-03-23 01:25:06.080] [INFO] channels - /r/littlespace: #mod: : Don't think I haven't done that. +[2017-03-23 01:25:07.928] [INFO] channels - /r/littlespace: #mod: : I'm mean +[2017-03-23 01:25:20.888] [INFO] channels - /r/littlespace: #helpers: : oh my god +[2017-03-23 01:25:24.208] [INFO] channels - /r/littlespace: #helpers: : you guys are so tiny it's so cute +[2017-03-23 01:25:25.033] [INFO] channels - /r/littlespace: #helpers: : fdhjkafhdjksfh +[2017-03-23 01:25:35.018] [INFO] channels - /r/littlespace: #helpers: : obviously, i just converted +[2017-03-23 01:25:45.878] [INFO] channels - /r/littlespace: #helpers: : lol +[2017-03-23 01:25:59.870] [INFO] channels - /r/littlespace: #helpers: : If you used our system, you wouldn't need to convert. +[2017-03-23 01:26:05.737] [INFO] channels - /r/littlespace: #helpers: : _adds that to <@294300653587660800>'s list._ +[2017-03-23 01:26:06.078] [INFO] channels - /r/littlespace: #helpers: : pfft +[2017-03-23 01:26:28.139] [INFO] channels - /r/littlespace: #mod: : Once, I made him wear his cage and a thong to walmart, it was at like 2 in the morning, and we were looking at clothes, and I'd find a cute skirt or something and hold it up to him and tell him it'd look really cute on him. There weren't a lot of people there, and we went to a walmart on the other side of town just in case, but I think being in public was the main thing. I wasn't being too terribly loud, but just loud enough so that people *could* hear if they walked past. +[2017-03-23 01:26:36.024] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> do you guys have like, security shorts or something along those lines? usually those are gr8 if you're wearing dresses, especially A line dresses +[2017-03-23 01:26:48.132] [INFO] channels - /r/littlespace: #mod: : I would die. +[2017-03-23 01:27:05.238] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112> for some reason, i still don't have the option to add you on facebook 😦 +[2017-03-23 01:27:10.815] [INFO] channels - /r/littlespace: #mod: : I'm satisfied with my care. +[2017-03-23 01:27:11.057] [INFO] channels - /r/littlespace: #mod: : You have been good, have a lollipop! https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif +[2017-03-23 01:27:16.188] [INFO] channels - /r/littlespace: #mod: : But I kinda miss having a dominant GF though. I had one for awhile. But that's why I love daryan so much too. It's a different kind of bond. +[2017-03-23 01:27:19.317] [INFO] channels - /r/littlespace: #helpers: : I don't know what those are. I've got some tight shorts that are made for like running or cycling or something. They'd probably be good for under dresses. +[2017-03-23 01:27:31.605] [INFO] channels - /r/littlespace: #helpers: : oh yeah it's something like that +[2017-03-23 01:27:34.677] [INFO] channels - /r/littlespace: #mod: : Exactly +[2017-03-23 01:27:35.600] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> I added you! +[2017-03-23 01:27:39.462] [INFO] channels - /r/littlespace: #helpers: : ADD ME +[2017-03-23 01:27:39.555] [INFO] channels - /r/littlespace: #mod: : I'm satisfied with my care +[2017-03-23 01:27:43.418] [INFO] channels - /r/littlespace: #helpers: : i didn't receive your invitation! +[2017-03-23 01:27:45.406] [INFO] channels - /r/littlespace: #helpers: : I DON'T EVEN USE IT THOUGH +[2017-03-23 01:27:47.376] [INFO] channels - /r/littlespace: #helpers: : wait really +[2017-03-23 01:27:48.739] [INFO] channels - /r/littlespace: #helpers: : BUT ADD ME +[2017-03-23 01:27:52.144] [INFO] channels - /r/littlespace: #helpers: : I'll have to figure it out tomorrow +[2017-03-23 01:27:53.782] [INFO] channels - /r/littlespace: #mod: : I'm satisfied with my care. +[2017-03-23 01:27:53.972] [INFO] channels - /r/littlespace: #mod: : You have been good, have a lollipop! https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif +[2017-03-23 01:27:56.476] [INFO] channels - /r/littlespace: #mod: : YAY! +[2017-03-23 01:27:57.529] [INFO] channels - /r/littlespace: #helpers: : I'm supposed to be sleeping. +[2017-03-23 01:27:58.773] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> it's like boy shorts, but longer. i think. +[2017-03-23 01:27:59.995] [INFO] channels - /r/littlespace: #helpers: : 😦 oopsie +[2017-03-23 01:28:00.742] [INFO] channels - /r/littlespace: #mod: : DOES THIS WORK IN GENERAL +[2017-03-23 01:28:03.401] [INFO] channels - /r/littlespace: #mod: : Not yet. +[2017-03-23 01:28:07.240] [INFO] channels - /r/littlespace: #mod: : It will when it gets pushed to Baymax. +[2017-03-23 01:28:10.745] [INFO] channels - /r/littlespace: #mod: : Thor is my dev bot. +[2017-03-23 01:28:12.866] [INFO] channels - /r/littlespace: #helpers: : but you're sad! you're supposed to stay up and roll around with us until you're happy! +[2017-03-23 01:28:18.488] [INFO] channels - /r/littlespace: #helpers: : Aww haha +[2017-03-23 01:28:19.687] [INFO] channels - /r/littlespace: #helpers: : Yeah! Just like that! +[2017-03-23 01:28:23.029] [INFO] channels - /r/littlespace: #helpers: : I think it'd work! +[2017-03-23 01:28:26.714] [INFO] channels - /r/littlespace: #helpers: : I'm feeling better thanks to you guys though ❤ +[2017-03-23 01:28:29.395] [INFO] channels - /r/littlespace: #helpers: : Sounds like Ko just missed some points. ❤ +[2017-03-23 01:28:29.796] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112> go to sleeps! +[2017-03-23 01:28:32.239] [INFO] channels - /r/littlespace: #helpers: : so off to bed I go. +[2017-03-23 01:28:35.275] [INFO] channels - /r/littlespace: #helpers: : And eat lots of ice cream +[2017-03-23 01:28:36.929] [INFO] channels - /r/littlespace: #helpers: : yay!! ❤ good night! +[2017-03-23 01:28:39.509] [INFO] channels - /r/littlespace: #helpers: : ice cream is the best +[2017-03-23 01:28:42.679] [INFO] channels - /r/littlespace: #helpers: : I'm probably gonna head to bed too soon +[2017-03-23 01:28:45.253] [INFO] channels - /r/littlespace: #helpers: : actually, sorbet. ice cream would kill me +[2017-03-23 01:28:48.898] [INFO] channels - /r/littlespace: #helpers: : nooooooooooooooo +[2017-03-23 01:28:51.210] [INFO] channels - /r/littlespace: #helpers: : It's almost midnight and way past my bedtime. +[2017-03-23 01:28:52.199] [INFO] channels - /r/littlespace: #helpers: : i'll be stuck with war, again! +[2017-03-23 01:28:53.385] [INFO] channels - /r/littlespace: #helpers: : Don't worry Meep, I won't leave you! +[2017-03-23 01:28:58.486] [INFO] channels - /r/littlespace: #mod: : Okay! +[2017-03-23 01:29:02.181] [INFO] channels - /r/littlespace: #helpers: : i shall cling onto you like a koala bear! +[2017-03-23 01:29:02.506] [INFO] channels - /r/littlespace: #helpers: : until closer to 5am, anyway. +[2017-03-23 01:29:05.307] [INFO] channels - /r/littlespace: #helpers: : Deal. +[2017-03-23 01:29:09.032] [INFO] channels - /r/littlespace: #helpers: : That's so late +[2017-03-23 01:29:10.259] [INFO] channels - /r/littlespace: #helpers: : Small asian women, unite! +[2017-03-23 01:29:11.632] [INFO] channels - /r/littlespace: #helpers: : aka, 6pm my time. whoop whoop +[2017-03-23 01:29:12.800] [INFO] channels - /r/littlespace: #helpers: : I will dream about eating the ice cream, yes. +[2017-03-23 01:29:12.940] [INFO] channels - /r/littlespace: #helpers: : Good night guys!! Thank you! ❤ +[2017-03-23 01:29:16.460] [INFO] channels - /r/littlespace: #helpers: : How you stay up that long, I don't know. +[2017-03-23 01:29:17.944] [INFO] channels - /r/littlespace: #helpers: : small (fake) asian women, unite! +[2017-03-23 01:29:25.308] [INFO] channels - /r/littlespace: #helpers: : What do you mean blue? +[2017-03-23 01:29:28.386] [INFO] channels - /r/littlespace: #helpers: : I get up for work at noon. +[2017-03-23 01:29:30.048] [INFO] channels - /r/littlespace: #helpers: : It's almost midnight and I'm struggling to keep my eyes open. +[2017-03-23 01:29:39.489] [INFO] channels - /r/littlespace: #helpers: : it's only 2pm here and i'm struggling too 😦 +[2017-03-23 01:29:42.916] [INFO] channels - /r/littlespace: #helpers: : 😦 +[2017-03-23 01:29:47.678] [INFO] channels - /r/littlespace: #helpers: : We need more naps. +[2017-03-23 01:30:00.697] [INFO] channels - /r/littlespace: #helpers: : LOVE U +[2017-03-23 01:30:06.137] [INFO] channels - /r/littlespace: #helpers: : blue, do the crying emoji. +[2017-03-23 01:30:10.249] [INFO] channels - /r/littlespace: #helpers: : also blue try "Nike shorts" +[2017-03-23 01:30:14.374] [INFO] channels - /r/littlespace: #helpers: : Bike +[2017-03-23 01:30:18.617] [INFO] channels - /r/littlespace: #helpers: : That's what they're called +[2017-03-23 01:30:20.721] [INFO] channels - /r/littlespace: #helpers: : Get them +[2017-03-23 01:30:23.873] [INFO] channels - /r/littlespace: #helpers: : For dresses +[2017-03-23 01:30:25.863] [INFO] channels - /r/littlespace: #helpers: : But, you two have fun! Oh, <@234126386703499264> and <@274917231778070528> what are your favorite animals? +[2017-03-23 01:30:41.984] [INFO] channels - /r/littlespace: #helpers: : And I totally will. I think I might have a pair, actually. +[2017-03-23 01:30:48.247] [INFO] channels - /r/littlespace: #mod: : Seriously Blue, : cry: +[2017-03-23 01:30:51.433] [INFO] channels - /r/littlespace: #mod: : without that space. +[2017-03-23 01:31:00.606] [INFO] channels - /r/littlespace: #mod: : 😢 +[2017-03-23 01:31:00.889] [INFO] channels - /r/littlespace: #mod: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-23 01:31:01.140] [INFO] channels - /r/littlespace: #mod: : and fist bump, in asterisks +[2017-03-23 01:31:02.312] [INFO] channels - /r/littlespace: #helpers: : Awesome! +[2017-03-23 01:31:03.976] [INFO] channels - /r/littlespace: #helpers: : Ih +[2017-03-23 01:31:04.717] [INFO] channels - /r/littlespace: #mod: : Awww +[2017-03-23 01:31:06.067] [INFO] channels - /r/littlespace: #helpers: : Uh +[2017-03-23 01:31:10.687] [INFO] channels - /r/littlespace: #mod: : *fist bump* +[2017-03-23 01:31:10.899] [INFO] channels - /r/littlespace: #mod: : Ba-la-la-la-la! https://cdn.discordapp.com/attachments/265064665099403264/294327036388835328/giphy-3.gif +[2017-03-23 01:31:17.473] [INFO] channels - /r/littlespace: #mod: : And find a way to use heart attack in a sentence. +[2017-03-23 01:31:17.648] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. **CLEAR!** https://cdn.discordapp.com/attachments/265064665099403264/294302721429995520/tumblr_n9h0l4ODbC1ry7whco1_1280.gif +[2017-03-23 01:31:18.955] [INFO] channels - /r/littlespace: #mod: : That one is my favorite +[2017-03-23 01:31:20.375] [INFO] channels - /r/littlespace: #mod: : Like I did. +[2017-03-23 01:31:29.094] [INFO] channels - /r/littlespace: #mod: : Have a heart attack, you dick. +[2017-03-23 01:31:29.293] [INFO] channels - /r/littlespace: #mod: : My hands are equipped with defibrillators. **CLEAR!** https://cdn.discordapp.com/attachments/265064665099403264/294302721429995520/tumblr_n9h0l4ODbC1ry7whco1_1280.gif +[2017-03-23 01:31:29.609] [INFO] channels - /r/littlespace: #helpers: : I like cats am I simple? Probably. I guess owls +[2017-03-23 01:31:39.112] [INFO] channels - /r/littlespace: #helpers: : Bats +[2017-03-23 01:31:40.232] [INFO] channels - /r/littlespace: #helpers: : sooooooooooo. i just got a phone call from an insurance centre +[2017-03-23 01:31:40.828] [INFO] channels - /r/littlespace: #mod: : Now say ow. +[2017-03-23 01:31:41.018] [INFO] channels - /r/littlespace: #helpers: : Ugh +[2017-03-23 01:31:49.549] [INFO] channels - /r/littlespace: #helpers: : Give me all the cute flying things +[2017-03-23 01:31:51.999] [INFO] channels - /r/littlespace: #helpers: : and i told them i wasn't interested in the financial sector, then THEY STARTED SELLING THEIR PRODUCTS +[2017-03-23 01:31:54.052] [INFO] channels - /r/littlespace: #helpers: : Oh! +[2017-03-23 01:31:58.584] [INFO] channels - /r/littlespace: #helpers: : I can make that work! I'm going to spend tomorrow working on small packages for you guys! +[2017-03-23 01:32:02.011] [INFO] channels - /r/littlespace: #helpers: : Simple +[2017-03-23 01:32:02.922] [INFO] channels - /r/littlespace: #mod: : ow +[2017-03-23 01:32:03.118] [INFO] channels - /r/littlespace: #mod: : Hello. I am Baymax, your personal Discord companion. https://cdn.discordapp.com/attachments/265064665099403264/294326730703896577/giphy-2.gif +[2017-03-23 01:32:03.137] [INFO] channels - /r/littlespace: #helpers: : i love.... cats. and bunnies. a lot. i like red pandas too +[2017-03-23 01:32:04.350] [INFO] channels - /r/littlespace: #helpers: : you? +[2017-03-23 01:32:04.496] [INFO] channels - /r/littlespace: #helpers: : Kill them +[2017-03-23 01:32:07.342] [INFO] channels - /r/littlespace: #mod: : That's awesome. +[2017-03-23 01:32:08.454] [INFO] channels - /r/littlespace: #helpers: : omg fhdjskafghjkldh i love you blue +[2017-03-23 01:32:09.036] [INFO] channels - /r/littlespace: #mod: : So cute. +[2017-03-23 01:32:10.925] [INFO] channels - /r/littlespace: #helpers: : ❤ +[2017-03-23 01:32:16.217] [INFO] channels - /r/littlespace: #helpers: : 😄 +[2017-03-23 01:32:31.793] [INFO] channels - /r/littlespace: #helpers: : y'all, after that whole thing with paperboy, i'm scared of posting my face on media sharing again +[2017-03-23 01:32:40.989] [INFO] channels - /r/littlespace: #helpers: : loooool so i'll just torment you all with my cute face over here ❤ +[2017-03-23 01:32:44.665] [INFO] channels - /r/littlespace: #helpers: : I like giraffes and elephants and dogs and rhinos and hippos (even though they're dicks), and sloths and dinosaurs. +[2017-03-23 01:32:50.764] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> i support this! +[2017-03-23 01:32:54.538] [INFO] channels - /r/littlespace: #helpers: : OMG I LOVE HIPPOS TOO +[2017-03-23 01:32:56.341] [INFO] channels - /r/littlespace: #helpers: : Well if you want to be scared of anything just look at aeotz +[2017-03-23 01:33:02.760] [INFO] channels - /r/littlespace: #helpers: : blue, by any any chance, do you play animal crossing? +[2017-03-23 01:33:03.770] [INFO] channels - /r/littlespace: #helpers: : Hippos are adorable +[2017-03-23 01:33:06.006] [INFO] channels - /r/littlespace: #helpers: : I do not +[2017-03-23 01:33:07.780] [INFO] channels - /r/littlespace: #helpers: : Wait +[2017-03-23 01:33:10.730] [INFO] channels - /r/littlespace: #helpers: : you should. +[2017-03-23 01:33:19.587] [INFO] channels - /r/littlespace: #helpers: : Maybe. I think I might have started it on an emulator, but I can't remember. +[2017-03-23 01:33:21.853] [INFO] channels - /r/littlespace: #helpers: : you know why? +[2017-03-23 01:33:25.880] [INFO] channels - /r/littlespace: #helpers: : no why! +[2017-03-23 01:33:28.128] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:33:33.929] [INFO] channels - /r/littlespace: #helpers: : http://animalcrossing.wikia.com/wiki/Merengue +[2017-03-23 01:33:37.796] [INFO] channels - /r/littlespace: #helpers: : i'm so jealous of your hair. +[2017-03-23 01:33:41.338] [INFO] channels - /r/littlespace: #helpers: : D: +[2017-03-23 01:33:43.724] [INFO] channels - /r/littlespace: #helpers: : she'll be the reason why you will want to play animal crossing +[2017-03-23 01:33:50.537] [INFO] channels - /r/littlespace: #helpers: : I love meringue +[2017-03-23 01:33:53.742] [INFO] channels - /r/littlespace: #helpers: : i love her hair a lot fhjlfhdsj'f +[2017-03-23 01:33:54.954] [INFO] channels - /r/littlespace: #helpers: : Or +[2017-03-23 01:33:56.979] [INFO] channels - /r/littlespace: #helpers: : RHINO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!111 +[2017-03-23 01:33:57.172] [INFO] channels - /r/littlespace: #helpers: : i love meringue too +[2017-03-23 01:34:01.756] [INFO] channels - /r/littlespace: #helpers: : SO CUTE +[2017-03-23 01:34:05.453] [INFO] channels - /r/littlespace: #helpers: : I KNOW RIGHT +[2017-03-23 01:34:08.541] [INFO] channels - /r/littlespace: #helpers: : FHSDJK'LAFHJDH I LOVE HER SO MUCH +[2017-03-23 01:34:11.161] [INFO] channels - /r/littlespace: #helpers: : Okay, I will have to play. +[2017-03-23 01:34:12.650] [INFO] channels - /r/littlespace: #helpers: : Blue! I might be going to the zoo with daryan! I'll get some pictures of the hippos for you. :D +[2017-03-23 01:34:19.558] [INFO] channels - /r/littlespace: #helpers: : omg omg omg I NEED TO GO TO THE ZOO +[2017-03-23 01:34:29.053] [INFO] channels - /r/littlespace: #helpers: : Yes! Our zoo recently got meerkats and I want to go back to see them so bad. +[2017-03-23 01:34:32.492] [INFO] channels - /r/littlespace: #helpers: : Meep, the one nearby is one of the best in the country. +[2017-03-23 01:34:35.664] [INFO] channels - /r/littlespace: #helpers: : And it's free. :D +[2017-03-23 01:34:41.175] [INFO] channels - /r/littlespace: #helpers: : I need to go to a zoo +[2017-03-23 01:34:43.194] [INFO] channels - /r/littlespace: #helpers: : I NEED IT +[2017-03-23 01:34:52.970] [INFO] channels - /r/littlespace: #helpers: : Yes same +[2017-03-23 01:34:53.708] [INFO] channels - /r/littlespace: #helpers: : have i ever shown you guys a photo of my cg and i?! +[2017-03-23 01:34:57.434] [INFO] channels - /r/littlespace: #helpers: : Alright childrens, Team Mom is going to sleep now. Play nicely. God, that sounded creepy. +[2017-03-23 01:35:01.928] [INFO] channels - /r/littlespace: #helpers: : I HAVE SEEN IT +[2017-03-23 01:35:05.145] [INFO] channels - /r/littlespace: #helpers: : bye mum +[2017-03-23 01:35:05.259] [INFO] channels - /r/littlespace: #helpers: : http://www.stltoday.com/travel/travels-with-amy/st-louis-zoo-named-rd-best-in-u-s-th/article_986aa2e4-6f7d-56b8-9aec-8b5850bf3ec1.html +[2017-03-23 01:35:06.428] [INFO] channels - /r/littlespace: #helpers: : lmfao +[2017-03-23 01:35:17.784] [INFO] channels - /r/littlespace: #helpers: : I NEED TO GO TO THE ZOOOOOOOOOOOOO +[2017-03-23 01:35:22.765] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> bye mom, love youuuu. ❤ +[2017-03-23 01:35:24.811] [INFO] channels - /r/littlespace: #helpers: : Good night blue! +[2017-03-23 01:35:24.854] [INFO] channels - /r/littlespace: #helpers: : Lol +[2017-03-23 01:35:29.600] [INFO] channels - /r/littlespace: #helpers: : *incoming photo of my cg and i being cute. i hope* +[2017-03-23 01:35:32.262] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:35:39.881] [INFO] channels - /r/littlespace: #helpers: : ^^^^^ +[2017-03-23 01:35:43.856] [INFO] channels - /r/littlespace: #helpers: : Aaaawwwh +[2017-03-23 01:35:43.886] [INFO] channels - /r/littlespace: #helpers: : Cute! +[2017-03-23 01:35:49.523] [INFO] channels - /r/littlespace: #helpers: : I HAD NO MAKEUP ON GOD +[2017-03-23 01:35:56.971] [INFO] channels - /r/littlespace: #helpers: : cos i ate all of my lipstick away 😂 +[2017-03-23 01:35:58.932] [INFO] channels - /r/littlespace: #helpers: : Still cuuuute +[2017-03-23 01:36:05.940] [INFO] channels - /r/littlespace: #helpers: : but fjdhlksahfjdh he's a squishy old man +[2017-03-23 01:36:06.710] [INFO] channels - /r/littlespace: #helpers: : makeup is lame anyway +[2017-03-23 01:36:15.672] [INFO] channels - /r/littlespace: #helpers: : I had no makeup on this morning +[2017-03-23 01:36:18.889] [INFO] channels - /r/littlespace: #helpers: : I love makeup +[2017-03-23 01:36:25.590] [INFO] channels - /r/littlespace: #helpers: : i don't put makeup when i'm at home wew +[2017-03-23 01:36:37.685] [INFO] channels - /r/littlespace: #helpers: : or if i'm going around my area. if i'm going to school tho, i'll do some +[2017-03-23 01:36:42.740] [INFO] channels - /r/littlespace: #helpers: : Sometimes I do...*just for fun* +[2017-03-23 01:36:46.223] [INFO] channels - /r/littlespace: #helpers: : *same* +[2017-03-23 01:36:52.971] [INFO] channels - /r/littlespace: #helpers: : Like uh this +[2017-03-23 01:36:54.126] [INFO] channels - /r/littlespace: #helpers: : i just like oh i feel like doing makeup! *pulls out my makeup stuff* +[2017-03-23 01:37:04.162] [INFO] channels - /r/littlespace: #helpers: : then i finish doing them, admire myself, take selfies, and then remove them all +[2017-03-23 01:37:12.536] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:37:18.898] [INFO] channels - /r/littlespace: #helpers: : Bad picture +[2017-03-23 01:37:22.290] [INFO] channels - /r/littlespace: #helpers: : I take it back +[2017-03-23 01:37:28.501] [INFO] channels - /r/littlespace: #helpers: : I like it! +[2017-03-23 01:37:33.045] [INFO] channels - /r/littlespace: #helpers: : I LIKE IT TOO +[2017-03-23 01:38:20.695] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:38:39.685] [INFO] channels - /r/littlespace: #helpers: : i am trying to look for my makeup photos in my conversation with my cg, but all i find are maniac smiles and no makeup selfies LOL +[2017-03-23 01:38:39.742] [INFO] channels - /r/littlespace: #helpers: : Better +[2017-03-23 01:38:45.947] [INFO] channels - /r/littlespace: #helpers: : LMFAO +[2017-03-23 01:38:58.836] [INFO] channels - /r/littlespace: #helpers: : lol +[2017-03-23 01:39:07.356] [INFO] channels - /r/littlespace: #helpers: : SO +[2017-03-23 01:39:13.712] [INFO] channels - /r/littlespace: #helpers: : I heard from bae +[2017-03-23 01:39:42.613] [INFO] channels - /r/littlespace: #helpers: : But I'm unsatisfied +[2017-03-23 01:39:45.130] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:39:48.627] [INFO] channels - /r/littlespace: #helpers: : And I feel like a shifty human +[2017-03-23 01:39:50.127] [INFO] channels - /r/littlespace: #helpers: : how is he? laugh at my photos, please +[2017-03-23 01:39:51.994] [INFO] channels - /r/littlespace: #helpers: : shifty. +[2017-03-23 01:39:58.039] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-23 01:39:58.283] [INFO] channels - /r/littlespace: #helpers: : *mic drop* +[2017-03-23 01:40:14.065] [INFO] channels - /r/littlespace: #helpers: : WHY ARE YOU SO CUTE +[2017-03-23 01:40:16.777] [INFO] channels - /r/littlespace: #helpers: : i really don't have cute, makeup photos. fuck +[2017-03-23 01:40:33.778] [INFO] channels - /r/littlespace: #helpers: : i'm full of weird, spastic faces 😂 +[2017-03-23 01:40:50.816] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:40:54.032] [INFO] channels - /r/littlespace: #helpers: : He's not doing good +[2017-03-23 01:40:59.373] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:41:17.864] [INFO] channels - /r/littlespace: #helpers: : oh my god ❤ he still thinks of you and he loves you a lot!!! +[2017-03-23 01:42:27.952] [INFO] channels - /r/littlespace: #helpers: : Lol yeah I know he does. I'm just scared he's going to go dark and stop talking. Hopefully he's a little more talkative tomorrow +[2017-03-23 01:42:35.964] [INFO] channels - /r/littlespace: #helpers: : I mean I feel bad that I'm being selfish +[2017-03-23 01:43:22.458] [INFO] channels - /r/littlespace: #helpers: : But I had no one to stand by me when I was going thorough stuff with my grandpa. I know how it feels. I want him to feel loved and not alone. +[2017-03-23 01:43:43.363] [INFO] channels - /r/littlespace: #helpers: : i don't think you're selfish, though +[2017-03-23 01:43:52.379] [INFO] channels - /r/littlespace: #helpers: : like. i think that it's a legit thing that you're facing and it's a huge fear,really +[2017-03-23 01:44:07.753] [INFO] channels - /r/littlespace: #media_sharing: : +[2017-03-23 01:44:20.941] [INFO] channels - /r/littlespace: #media_sharing: : This page in my coloring book is a facepalm +[2017-03-23 01:44:27.625] [INFO] channels - /r/littlespace: #media_sharing: : 🤦‍♀️ +[2017-03-23 01:44:52.386] [INFO] channels - /r/littlespace: #media_sharing: : lol +[2017-03-23 01:44:54.228] [INFO] channels - /r/littlespace: #helpers: : Being alone is my biggest fear aside from death +[2017-03-23 01:45:04.289] [INFO] channels - /r/littlespace: #helpers: : If I'm ever alone with my thoughts +[2017-03-23 01:45:08.839] [INFO] channels - /r/littlespace: #helpers: : It would be bad +[2017-03-23 01:45:09.161] [INFO] channels - /r/littlespace: #helpers: : yeah, i know +[2017-03-23 01:45:12.625] [INFO] channels - /r/littlespace: #helpers: : i KNOW HOW YOU FEEL OMG +[2017-03-23 01:45:26.200] [INFO] channels - /r/littlespace: #helpers: : let's side track a little +[2017-03-23 01:45:30.130] [INFO] channels - /r/littlespace: #helpers: : The anxiety and depression are horrible +[2017-03-23 01:45:31.633] [INFO] channels - /r/littlespace: #helpers: : Yes +[2017-03-23 01:45:33.450] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:45:36.688] [INFO] channels - /r/littlespace: #helpers: : i love my eye makeup here +[2017-03-23 01:45:41.340] [INFO] channels - /r/littlespace: #helpers: : it's so metallic so metal i love +[2017-03-23 01:45:51.874] [INFO] channels - /r/littlespace: #helpers: : GORGEOUS +[2017-03-23 01:45:54.307] [INFO] channels - /r/littlespace: #helpers: : and yes. fuck that. i know how you feel. i'm here for you, especially at night! +[2017-03-23 01:46:02.178] [INFO] channels - /r/littlespace: #helpers: : I think you would benefit from naturals! +[2017-03-23 01:46:05.288] [INFO] channels - /r/littlespace: #helpers: : I like that picture! +[2017-03-23 01:46:08.702] [INFO] channels - /r/littlespace: #helpers: : naturals meaning...... +[2017-03-23 01:46:12.981] [INFO] channels - /r/littlespace: #helpers: : Thank you babe! I'm here for you as well +[2017-03-23 01:46:21.684] [INFO] channels - /r/littlespace: #helpers: : fsdhj'lfagh'j i like that too. it's a nice gem from all that shitty spastic af photos +[2017-03-23 01:46:22.683] [INFO] channels - /r/littlespace: #helpers: : I'M HERE TOO +[2017-03-23 01:46:25.454] [INFO] channels - /r/littlespace: #helpers: : _feels left out_ +[2017-03-23 01:46:30.843] [INFO] channels - /r/littlespace: #helpers: : YEAH LIKE WAR STAYS UP AT 5AM ANYWAY +[2017-03-23 01:46:32.730] [INFO] channels - /r/littlespace: #helpers: : *till +[2017-03-23 01:46:32.958] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:46:39.492] [INFO] channels - /r/littlespace: #helpers: : OH MY GOD I ALMOST BOUGHT IT +[2017-03-23 01:46:49.015] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:46:50.897] [INFO] channels - /r/littlespace: #helpers: : but i'm like a loser when it comes to eye makeup, so i bought missha's LINE series +[2017-03-23 01:46:55.623] [INFO] channels - /r/littlespace: #helpers: : IT'S SO BEAUTIFUL IT SMELLS SO GOOD +[2017-03-23 01:46:56.426] [INFO] channels - /r/littlespace: #helpers: : Get it you won't be disappointed +[2017-03-23 01:47:01.273] [INFO] channels - /r/littlespace: #helpers: : i have a marc jacobs' palette though +[2017-03-23 01:47:05.822] [INFO] channels - /r/littlespace: #helpers: : i'm not even halfway through it +[2017-03-23 01:47:15.874] [INFO] channels - /r/littlespace: #helpers: : Lol so? +[2017-03-23 01:47:24.269] [INFO] channels - /r/littlespace: #helpers: : I have an urban decay and like +[2017-03-23 01:47:30.226] [INFO] channels - /r/littlespace: #helpers: : *attempting to be a good kid and not buy too many palettes* +[2017-03-23 01:47:35.353] [INFO] channels - /r/littlespace: #helpers: : Two other tiny top Faced palettes +[2017-03-23 01:47:42.433] [INFO] channels - /r/littlespace: #helpers: : And a couple other ransoms +[2017-03-23 01:47:45.403] [INFO] channels - /r/littlespace: #helpers: : Lol +[2017-03-23 01:47:48.510] [INFO] channels - /r/littlespace: #helpers: : top faced +[2017-03-23 01:47:50.318] [INFO] channels - /r/littlespace: #helpers: : I need diversity +[2017-03-23 01:47:54.929] [INFO] channels - /r/littlespace: #helpers: : Yeah +[2017-03-23 01:47:55.832] [INFO] channels - /r/littlespace: #helpers: : oh, but +[2017-03-23 01:48:00.590] [INFO] channels - /r/littlespace: #helpers: : GET THE DAMN MARC JACOBS PALETTE +[2017-03-23 01:48:01.747] [INFO] channels - /r/littlespace: #helpers: : Phone + thumbs +[2017-03-23 01:48:18.822] [INFO] channels - /r/littlespace: #helpers: : Is marc cruelty free +[2017-03-23 01:48:23.056] [INFO] channels - /r/littlespace: #helpers: : i THINK so +[2017-03-23 01:48:29.141] [INFO] channels - /r/littlespace: #helpers: : Hmmm I'll do research +[2017-03-23 01:48:36.071] [INFO] channels - /r/littlespace: #helpers: : wait let me check +[2017-03-23 01:48:42.701] [INFO] channels - /r/littlespace: #helpers: : I was thinking about getting the new too faced palette +[2017-03-23 01:48:50.806] [INFO] channels - /r/littlespace: #helpers: : yeah, everything is cruelty free for marc jacobs +[2017-03-23 01:48:51.271] [INFO] channels - /r/littlespace: #helpers: : BECAUSE I LOVE THEM +[2017-03-23 01:48:56.399] [INFO] channels - /r/littlespace: #helpers: : oh good!! +[2017-03-23 01:49:05.622] [INFO] channels - /r/littlespace: #helpers: : i'm sad that high end brands like, ysl and chanel isn't cruelty free. i didn't know that, until after i bought them +[2017-03-23 01:49:07.855] [INFO] channels - /r/littlespace: #helpers: : and i feel so annoyed +[2017-03-23 01:49:14.713] [INFO] channels - /r/littlespace: #helpers: : because YSL concealers are the only ones that work on my skin tone +[2017-03-23 01:49:17.078] [INFO] channels - /r/littlespace: #helpers: : I know how you feel +[2017-03-23 01:49:20.384] [INFO] channels - /r/littlespace: #helpers: : (and i'm too lazy to search around) +[2017-03-23 01:49:21.937] [INFO] channels - /r/littlespace: #helpers: : Wish mac was +[2017-03-23 01:49:33.439] [INFO] channels - /r/littlespace: #helpers: : actually the NARS one is pretty good, but they're IN A FUCKING POT +[2017-03-23 01:49:39.471] [INFO] channels - /r/littlespace: #helpers: : how am i gonna bring it around oh my god. no. +[2017-03-23 01:49:42.461] [INFO] channels - /r/littlespace: #helpers: : Find a dupe I'm sure there's a cruelty free one +[2017-03-23 01:49:55.324] [INFO] channels - /r/littlespace: #helpers: : lol I need a powder based foundation +[2017-03-23 01:49:58.885] [INFO] channels - /r/littlespace: #helpers: : http://www.crueltyfreekitty.com/news/marc-jacobs-cruelty-free/ +[2017-03-23 01:50:01.223] [INFO] channels - /r/littlespace: #helpers: : Also poor <@200944723035160576> +[2017-03-23 01:50:09.781] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> ? +[2017-03-23 01:50:18.930] [INFO] channels - /r/littlespace: #helpers: : if you're into korean makeup, you can consider getting innisfree's powder foundation +[2017-03-23 01:50:20.829] [INFO] channels - /r/littlespace: #helpers: : it's pretty good +[2017-03-23 01:50:28.338] [INFO] channels - /r/littlespace: #helpers: : very finely milled i love it +[2017-03-23 01:50:41.393] [INFO] channels - /r/littlespace: #helpers: : but i'm trying not to use foundation nowadays. i'm just covering up with concealer nowadays +[2017-03-23 01:50:55.907] [INFO] channels - /r/littlespace: #helpers: : Hmmm I will consider it I'm pretty fair skinned (thanks Ireland) with pink undertones +[2017-03-23 01:51:07.839] [INFO] channels - /r/littlespace: #helpers: : You have to deal with makeup chat +[2017-03-23 01:51:27.382] [INFO] channels - /r/littlespace: #helpers: : i'm fair skin with warm undertones, i think. actually i'm not sure if i'm cool or warm. i can't stand it +[2017-03-23 01:51:33.017] [INFO] channels - /r/littlespace: #helpers: : You have no idea how intently i'm watching this chat, Ariel. +[2017-03-23 01:51:51.412] [INFO] channels - /r/littlespace: #helpers: : *feeling the sarcasm bleeding through* +[2017-03-23 01:51:54.214] [INFO] channels - /r/littlespace: #helpers: : My little space involves a bunch of girliness, including makeup, dresses, etc... +[2017-03-23 01:51:57.636] [INFO] channels - /r/littlespace: #helpers: : so not sarcasm. +[2017-03-23 01:52:07.103] [INFO] channels - /r/littlespace: #helpers: : oh my god. i love you war. you're gonna be my sister < +[2017-03-23 01:52:13.902] [INFO] channels - /r/littlespace: #helpers: : He's so perf +[2017-03-23 01:52:15.485] [INFO] channels - /r/littlespace: #helpers: : SISTERS FOREVER +[2017-03-23 01:52:16.618] [INFO] channels - /r/littlespace: #helpers: : ikr +[2017-03-23 01:52:25.979] [INFO] channels - /r/littlespace: #helpers: : if my caregiver can actually like, try to differentiate my makeup for me +[2017-03-23 01:52:35.420] [INFO] channels - /r/littlespace: #helpers: : *actually* he does. he knows every single lipstick shade i have +[2017-03-23 01:52:39.899] [INFO] channels - /r/littlespace: #helpers: : he even picks them out +[2017-03-23 01:52:50.280] [INFO] channels - /r/littlespace: #helpers: : Well mikey picked out my outfit and undies today I wanted to show him ): +[2017-03-23 01:52:53.126] [INFO] channels - /r/littlespace: #helpers: : Off subject, ```[1:50 AM] Unlucky13: So today i got told hashbrowns appropriate potato latkes even though they only have to ingredients in common oil and potato +[1:50 AM] Unlucky13: Appropriation +[1:51 AM] WARBIRD199: Interesting. +[1:51 AM] Unlucky13: Yep +[1:51 AM] Unlucky13: Like wtf +NEW MESSAGES +[1:51 AM] Unlucky13: Imma be honest i find the concept of appropriation to be a bunch of snow flake bullshit +[1:51 AM] Unlucky13: And umm +[1:51 AM] Unlucky13: Im nonbinary so``` +[2017-03-23 01:52:57.876] [INFO] channels - /r/littlespace: #helpers: : I'm so fucking confused +[2017-03-23 01:53:06.190] [INFO] channels - /r/littlespace: #helpers: : wha'ts going on +[2017-03-23 01:53:16.181] [INFO] channels - /r/littlespace: #helpers: : lol I saw that in the playground +[2017-03-23 01:53:35.293] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:53:49.542] [INFO] channels - /r/littlespace: #helpers: : but i have no idea what the fuck she's talking about +[2017-03-23 01:53:53.832] [INFO] channels - /r/littlespace: #helpers: : oh wow keiju is there too +[2017-03-23 01:54:08.486] [INFO] channels - /r/littlespace: #helpers: : amazing neither do i know what that person's talking about. latke's so much better than hashbrown +[2017-03-23 01:54:17.385] [INFO] channels - /r/littlespace: #helpers: : I love hashbrowns. +[2017-03-23 01:54:28.677] [INFO] channels - /r/littlespace: #helpers: : i prefer latkes. garlic powder. onion. yes +[2017-03-23 01:54:33.590] [INFO] channels - /r/littlespace: #helpers: : I love both +[2017-03-23 01:54:36.342] [INFO] channels - /r/littlespace: #helpers: : Shrug +[2017-03-23 01:54:39.357] [INFO] channels - /r/littlespace: #helpers: : Ugh +[2017-03-23 01:54:47.776] [INFO] channels - /r/littlespace: #helpers: : i need more makeup products +[2017-03-23 01:54:52.078] [INFO] channels - /r/littlespace: #helpers: : *crying* +[2017-03-23 01:54:54.506] [INFO] channels - /r/littlespace: #helpers: : YES +[2017-03-23 01:55:01.380] [INFO] channels - /r/littlespace: #helpers: : I have a Sephora credit card +[2017-03-23 01:55:04.148] [INFO] channels - /r/littlespace: #helpers: : 😅 +[2017-03-23 01:55:09.909] [INFO] channels - /r/littlespace: #helpers: : i NEED +[2017-03-23 01:55:12.953] [INFO] channels - /r/littlespace: #helpers: : oH MY GOD +[2017-03-23 01:55:27.987] [INFO] channels - /r/littlespace: #helpers: : Yeah I pay it off when I use it though so I'm pretty good +[2017-03-23 01:55:35.366] [INFO] channels - /r/littlespace: #helpers: : I'M SO SAD because like i bought fresh's tinted lip balm and things were going so well, until i started having a FLAKY FLAKY FLAKY LIPS +[2017-03-23 01:55:44.267] [INFO] channels - /r/littlespace: #helpers: : I could do some damage tho +[2017-03-23 01:55:44.286] [INFO] channels - /r/littlespace: #helpers: : and the skin around my lips were fucking flaking off +[2017-03-23 01:55:46.947] [INFO] channels - /r/littlespace: #helpers: : and i was legit crying +[2017-03-23 01:55:50.258] [INFO] channels - /r/littlespace: #helpers: : Ahhh fresh is good tho +[2017-03-23 01:55:52.587] [INFO] channels - /r/littlespace: #helpers: : ): +[2017-03-23 01:55:56.033] [INFO] channels - /r/littlespace: #helpers: : when i saw it flaking off i actually ran to my cg and cried +[2017-03-23 01:56:03.142] [INFO] channels - /r/littlespace: #helpers: : My lips are super dry right now +[2017-03-23 01:56:12.538] [INFO] channels - /r/littlespace: #helpers: : i was like "i wanted to pan this shit and it's making me sad i AM SAD PAPABEAR MAKE THINGS BETTER FOR ME" +[2017-03-23 01:56:16.353] [INFO] channels - /r/littlespace: #helpers: : Can't wait until my lip smackers get here! +[2017-03-23 01:56:33.648] [INFO] channels - /r/littlespace: #helpers: : and then he was like "you need to get less affected by your makeup. here, go get another lip balm" +[2017-03-23 01:56:41.869] [INFO] channels - /r/littlespace: #helpers: : Which reminds me I have to go and get yours at the pharmacy +[2017-03-23 01:56:48.285] [INFO] channels - /r/littlespace: #helpers: : OH YESSSSSAAAAAAAAAA +[2017-03-23 01:56:51.447] [INFO] channels - /r/littlespace: #helpers: : Yesss +[2017-03-23 01:57:11.969] [INFO] channels - /r/littlespace: #helpers: : Wow, my heart is racing for some reason (i assume from openly admitting my littlespace. Not many people know that.) +[2017-03-23 01:57:12.786] [INFO] channels - /r/littlespace: #helpers: : weird. +[2017-03-23 01:57:28.622] [INFO] channels - /r/littlespace: #helpers: : opening your littlespace with us? embrace it!!! +[2017-03-23 01:57:36.065] [INFO] channels - /r/littlespace: #helpers: : we don't judge ❤ +[2017-03-23 01:57:37.988] [INFO] channels - /r/littlespace: #helpers: : I'm just not that open about it. +[2017-03-23 01:57:49.901] [INFO] channels - /r/littlespace: #helpers: : Awwwh you're so precious💙💖 +[2017-03-23 01:57:51.238] [INFO] channels - /r/littlespace: #helpers: : it's okay, y'know +[2017-03-23 01:58:00.092] [INFO] channels - /r/littlespace: #helpers: : We're all besties here! +[2017-03-23 01:58:01.509] [INFO] channels - /r/littlespace: #helpers: : like. we can be pink and glittery and gush over cute girly shit +[2017-03-23 01:58:06.834] [INFO] channels - /r/littlespace: #helpers: : Yessss +[2017-03-23 01:58:11.226] [INFO] channels - /r/littlespace: #helpers: : Now, i want to be clear, you'll never see me in my pink onesie. Just saying. +[2017-03-23 01:58:15.017] [INFO] channels - /r/littlespace: #helpers: : 😦 +[2017-03-23 01:58:16.573] [INFO] channels - /r/littlespace: #helpers: : I WANT TO +[2017-03-23 01:58:17.502] [INFO] channels - /r/littlespace: #helpers: : Like my notebook for lines +[2017-03-23 01:58:42.268] [INFO] channels - /r/littlespace: #helpers: : i don't think my cg is a switch, but he loves my pink shit so +[2017-03-23 01:58:49.880] [INFO] channels - /r/littlespace: #helpers: : he steals my pink things sometimes +[2017-03-23 01:58:59.433] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 01:59:04.439] [INFO] channels - /r/littlespace: #helpers: : and he likes to talk about shoes with me. *cries* +[2017-03-23 01:59:06.899] [INFO] channels - /r/littlespace: #helpers: : Mikey is definitely 100% dom +[2017-03-23 01:59:08.870] [INFO] channels - /r/littlespace: #helpers: : OH MY GOD I NEED THAT I NEED THAT I NEED THAT +[2017-03-23 01:59:14.944] [INFO] channels - /r/littlespace: #helpers: : Forever 21! +[2017-03-23 01:59:22.263] [INFO] channels - /r/littlespace: #helpers: : I didn't used to be a switch either. Daryan is my first little. +[2017-03-23 01:59:39.249] [INFO] channels - /r/littlespace: #helpers: : And she'll tell you upfront that I'm not very good at handling her littlespace, and I know that. +[2017-03-23 01:59:39.771] [INFO] channels - /r/littlespace: #helpers: : f21 hates me. h&m hates me. the only places i shop for my clothes are from zara and mango lol +[2017-03-23 01:59:45.514] [INFO] channels - /r/littlespace: #helpers: : oh, why? +[2017-03-23 01:59:48.157] [INFO] channels - /r/littlespace: #helpers: : because I struggle to be big. +[2017-03-23 01:59:54.353] [INFO] channels - /r/littlespace: #helpers: : ahhhh *hugs* +[2017-03-23 02:00:05.927] [INFO] channels - /r/littlespace: #helpers: : Like, *I* know how to act little, but I don't know how to respond to other littles. +[2017-03-23 02:00:18.761] [INFO] channels - /r/littlespace: #helpers: : validate them, i guess +[2017-03-23 02:00:32.456] [INFO] channels - /r/littlespace: #helpers: : i like responding to littles in their little space by validating and playing with them *shrug* +[2017-03-23 02:00:53.719] [INFO] channels - /r/littlespace: #helpers: : like wew you like pacifiers? they're so cute! +[2017-03-23 02:01:51.321] [INFO] channels - /r/littlespace: #helpers: : Yeah. +[2017-03-23 02:01:57.073] [INFO] channels - /r/littlespace: #helpers: : and some of it with daryan is the baby talk. +[2017-03-23 02:01:59.093] [INFO] channels - /r/littlespace: #helpers: : I'm not good with that. +[2017-03-23 02:02:06.913] [INFO] channels - /r/littlespace: #helpers: : i don't even do it in my own littlespac.e +[2017-03-23 02:02:09.361] [INFO] channels - /r/littlespace: #helpers: : but again, when i'm in littlespace, i babble about history and cute stuff too fast and too quickly and +[2017-03-23 02:02:18.267] [INFO] channels - /r/littlespace: #helpers: : people can't catch it and i get angry and huffy lol +[2017-03-23 02:02:22.309] [INFO] channels - /r/littlespace: #helpers: : oh god i'm sorry war +[2017-03-23 02:02:32.563] [INFO] channels - /r/littlespace: #helpers: : i can't stand that but i'm just like oh okay *moves along* +[2017-03-23 02:02:35.909] [INFO] channels - /r/littlespace: #helpers: : but I'm not going to tell her no, because I don't want her to think I dno't want her to be little. +[2017-03-23 02:02:41.203] [INFO] channels - /r/littlespace: #helpers: : Well, it's better in person than in text. +[2017-03-23 02:02:47.252] [INFO] channels - /r/littlespace: #helpers: : but in person is hard too. +[2017-03-23 02:02:49.257] [INFO] channels - /r/littlespace: #helpers: : yeah +[2017-03-23 02:02:50.775] [INFO] channels - /r/littlespace: #helpers: : that's true +[2017-03-23 02:03:16.330] [INFO] channels - /r/littlespace: #helpers: : because then it's hard to see her as my girlfriend... and more... an annoying little kid (Because I don't have the patience for little kids, usually, which is strange...considering...) +[2017-03-23 02:03:27.851] [INFO] channels - /r/littlespace: #helpers: : ... that you're a little, right +[2017-03-23 02:03:31.819] [INFO] channels - /r/littlespace: #helpers: : Exactly. +[2017-03-23 02:03:33.070] [INFO] channels - /r/littlespace: #helpers: : Is baby talk super annoying +[2017-03-23 02:03:41.087] [INFO] channels - /r/littlespace: #helpers: : Yes. +[2017-03-23 02:03:57.167] [INFO] channels - /r/littlespace: #helpers: : idk. i have a lot of patience for kids, but i have like, zero patience for baby talk. irl and online +[2017-03-23 02:04:13.990] [INFO] channels - /r/littlespace: #helpers: : So when I do it it's not cute?! +[2017-03-23 02:04:16.657] [INFO] channels - /r/littlespace: #helpers: : but <@234126386703499264>, I wuv you! +[2017-03-23 02:04:18.352] [INFO] channels - /r/littlespace: #helpers: : i have friends who baby talk even though they're not littles though +[2017-03-23 02:04:33.113] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> i love you so much it hides my annoyance with baby talk +[2017-03-23 02:04:38.423] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> *cringing* +[2017-03-23 02:04:40.288] [INFO] channels - /r/littlespace: #helpers: : That was cancerous to type +[2017-03-23 02:04:41.977] [INFO] channels - /r/littlespace: #helpers: : I know. +[2017-03-23 02:05:02.103] [INFO] channels - /r/littlespace: #helpers: : ```[2:00 AM] Unlucky13: Insomnia +[2:01 AM] Unlucky13: https://youtu.be/HuO8Z12Ri1U +[2:01 AM] Unlucky13: Also this . +[2:01 AM] Unlucky13: Is bothering me``` +[2017-03-23 02:05:06.732] [INFO] channels - /r/littlespace: #helpers: : I want to tell Em that I don't care... but... +[2017-03-23 02:05:11.059] [INFO] channels - /r/littlespace: #helpers: : https://youtu.be/HuO8Z12Ri1U +[2017-03-23 02:05:13.259] [INFO] channels - /r/littlespace: #helpers: : that's what she linked. +[2017-03-23 02:05:14.930] [INFO] channels - /r/littlespace: #helpers: : Okay guys +[2017-03-23 02:05:18.187] [INFO] channels - /r/littlespace: #helpers: : For real +[2017-03-23 02:05:24.674] [INFO] channels - /r/littlespace: #helpers: : Do I do it often? +[2017-03-23 02:05:24.895] [INFO] channels - /r/littlespace: #helpers: : ummmmm lol +[2017-03-23 02:05:28.885] [INFO] channels - /r/littlespace: #helpers: : no, i don't think so +[2017-03-23 02:05:39.482] [INFO] channels - /r/littlespace: #helpers: : not really, no +[2017-03-23 02:05:40.230] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 02:05:41.665] [INFO] channels - /r/littlespace: #helpers: : I use chat speak ironically +[2017-03-23 02:05:46.481] [INFO] channels - /r/littlespace: #helpers: : i'm sad. i'm very sad. +[2017-03-23 02:05:47.206] [INFO] channels - /r/littlespace: #general: : I'm so bored. Someone amuse me... +[2017-03-23 02:05:52.504] [INFO] channels - /r/littlespace: #helpers: : i don't get jelly. i DON'T. GET. JELLY. +[2017-03-23 02:05:59.579] [INFO] channels - /r/littlespace: #helpers: : He said patpat so cute +[2017-03-23 02:06:06.065] [INFO] channels - /r/littlespace: #helpers: : he has always done that since i met him +[2017-03-23 02:06:09.939] [INFO] channels - /r/littlespace: #helpers: : it's fucking funny bc he says that irl too +[2017-03-23 02:06:15.254] [INFO] channels - /r/littlespace: #helpers: : and i'm like "CAN'T YOU JUST PAT ME?????????????" +[2017-03-23 02:06:27.157] [INFO] channels - /r/littlespace: #helpers: : then he messes up my hair +[2017-03-23 02:06:28.458] [INFO] channels - /r/littlespace: #helpers: : Also guys who turn on read receipts 🙌🙌👌👌👌 +[2017-03-23 02:06:32.401] [INFO] channels - /r/littlespace: #helpers: : IKR +[2017-03-23 02:06:35.372] [INFO] channels - /r/littlespace: #general: : I have to be at a notary for another hour :( +[2017-03-23 02:06:43.425] [INFO] channels - /r/littlespace: #helpers: : My anxiety +[2017-03-23 02:06:47.093] [INFO] channels - /r/littlespace: #helpers: : Phew +[2017-03-23 02:06:47.810] [INFO] channels - /r/littlespace: #helpers: : no ateoz, i don't want to amuse you *rolls eyes* you can get your love from other places +[2017-03-23 02:06:48.301] [INFO] channels - /r/littlespace: #general: : They're not even serving coffee +[2017-03-23 02:06:55.218] [INFO] channels - /r/littlespace: #helpers: : i turn off read recipts for a lot of people +[2017-03-23 02:07:10.337] [INFO] channels - /r/littlespace: #helpers: : I leave it on always +[2017-03-23 02:07:13.523] [INFO] channels - /r/littlespace: #helpers: : actually, it's off generally. i only turn on for like, my cg, and my other best friend because i like to *stalk her* +[2017-03-23 02:07:19.732] [INFO] channels - /r/littlespace: #helpers: : I want people to know when I'm ignoring them +[2017-03-23 02:07:24.842] [INFO] channels - /r/littlespace: #helpers: : DON'T IGNORE ME +[2017-03-23 02:07:28.939] [INFO] channels - /r/littlespace: #helpers: : lol I'm not +[2017-03-23 02:07:34.942] [INFO] channels - /r/littlespace: #helpers: : I just get sidetracked +[2017-03-23 02:07:36.531] [INFO] channels - /r/littlespace: #helpers: : Adhd +[2017-03-23 02:07:38.574] [INFO] channels - /r/littlespace: #helpers: : k i just turned on +[2017-03-23 02:07:42.705] [INFO] channels - /r/littlespace: #helpers: : my read recipts for you +[2017-03-23 02:07:43.733] [INFO] channels - /r/littlespace: #helpers: : AHHH +[2017-03-23 02:07:46.810] [INFO] channels - /r/littlespace: #helpers: : bless +[2017-03-23 02:07:53.621] [INFO] channels - /r/littlespace: #helpers: : I'm gonna share my location with you too +[2017-03-23 02:07:59.951] [INFO] channels - /r/littlespace: #helpers: : You can stalk me in America +[2017-03-23 02:08:10.498] [INFO] channels - /r/littlespace: #helpers: : wew +[2017-03-23 02:08:11.259] [INFO] channels - /r/littlespace: #helpers: : bless +[2017-03-23 02:08:12.803] [INFO] channels - /r/littlespace: #helpers: : i love you +[2017-03-23 02:08:14.311] [INFO] channels - /r/littlespace: #helpers: : that's awesome +[2017-03-23 02:08:17.834] [INFO] channels - /r/littlespace: #helpers: : i can share mine too +[2017-03-23 02:08:46.529] [INFO] channels - /r/littlespace: #helpers: : Hahah I love you too! +[2017-03-23 02:08:47.905] [INFO] channels - /r/littlespace: #helpers: : did you just +[2017-03-23 02:08:51.215] [INFO] channels - /r/littlespace: #helpers: : share for indefinitely +[2017-03-23 02:08:51.742] [INFO] channels - /r/littlespace: #helpers: : or +[2017-03-23 02:08:54.358] [INFO] channels - /r/littlespace: #helpers: : 1 hour +[2017-03-23 02:08:58.091] [INFO] channels - /r/littlespace: #helpers: : Indefinitely +[2017-03-23 02:08:58.367] [INFO] channels - /r/littlespace: #helpers: : cos i put mine as 1 hour LOL +[2017-03-23 02:09:00.389] [INFO] channels - /r/littlespace: #helpers: : OH MY GOD +[2017-03-23 02:09:02.005] [INFO] channels - /r/littlespace: #helpers: : Lmfao +[2017-03-23 02:09:18.132] [INFO] channels - /r/littlespace: #helpers: : 😅😅😅 +[2017-03-23 02:09:28.493] [INFO] channels - /r/littlespace: #helpers: : omg +[2017-03-23 02:09:29.386] [INFO] channels - /r/littlespace: #helpers: : fhjsklahfdjk +[2017-03-23 02:09:43.993] [INFO] channels - /r/littlespace: #helpers: : test message +[2017-03-23 02:09:53.984] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 02:09:57.850] [INFO] channels - /r/littlespace: #helpers: : I AM SO HAPPY +[2017-03-23 02:09:59.033] [INFO] channels - /r/littlespace: #helpers: : grr, why doesn't it work +[2017-03-23 02:10:02.426] [INFO] channels - /r/littlespace: #helpers: : I CAN GET JELLY TOMORROW +[2017-03-23 02:10:44.614] [INFO] channels - /r/littlespace: #helpers: : yay! +[2017-03-23 02:10:58.217] [INFO] channels - /r/littlespace: #helpers: : Awwwwhhh so cute!! +[2017-03-23 02:11:08.568] [INFO] channels - /r/littlespace: #helpers: : https://www.sephora.sg/products/marc-jacobs-style-eye-con-no7/v/216-enigma < i have this palette, i love it +[2017-03-23 02:11:09.771] [INFO] channels - /r/littlespace: #helpers: : What are you testing war +[2017-03-23 02:11:15.289] [INFO] channels - /r/littlespace: #helpers: : graphs +[2017-03-23 02:11:44.782] [INFO] channels - /r/littlespace: #helpers: : Woooah expensive +[2017-03-23 02:11:50.697] [INFO] channels - /r/littlespace: #helpers: : yea 😢 +[2017-03-23 02:11:54.841] [INFO] channels - /r/littlespace: #helpers: : i got it as a present!! +[2017-03-23 02:12:00.887] [INFO] channels - /r/littlespace: #helpers: : i feel like getting another palette from them cos they're really good +[2017-03-23 02:12:03.757] [INFO] channels - /r/littlespace: #helpers: : they're very buttery and smooth +[2017-03-23 02:12:06.795] [INFO] channels - /r/littlespace: #helpers: : I understand the not getting more thing tho lol +[2017-03-23 02:12:21.551] [INFO] channels - /r/littlespace: #helpers: : Ahhhh swatch it for me maybe?! +[2017-03-23 02:12:28.129] [INFO] channels - /r/littlespace: #helpers: : OH YA +[2017-03-23 02:12:28.806] [INFO] channels - /r/littlespace: #helpers: : Graphs! +[2017-03-23 02:12:29.014] [INFO] channels - /r/littlespace: #helpers: : SURE +[2017-03-23 02:12:32.572] [INFO] channels - /r/littlespace: #helpers: : sunlight or room light? +[2017-03-23 02:12:38.941] [INFO] channels - /r/littlespace: #helpers: : Hmmm +[2017-03-23 02:12:43.106] [INFO] channels - /r/littlespace: #helpers: : like cos the other room's in curtains and all +[2017-03-23 02:12:48.740] [INFO] channels - /r/littlespace: #helpers: : i can do both lmao it's very sunny today +[2017-03-23 02:13:01.811] [INFO] channels - /r/littlespace: #helpers: : That's good! I thought it was rainy +[2017-03-23 02:13:03.459] [INFO] channels - /r/littlespace: #helpers: : i can even show you my makeup collection +[2017-03-23 02:13:05.805] [INFO] channels - /r/littlespace: #helpers: : it's VERY SUNNY +[2017-03-23 02:13:08.543] [INFO] channels - /r/littlespace: #helpers: : YES +[2017-03-23 02:13:13.588] [INFO] channels - /r/littlespace: #helpers: : iokay brb +[2017-03-23 02:13:18.588] [INFO] channels - /r/littlespace: #helpers: : I wish I were home I'd show you all of mine! +[2017-03-23 02:13:20.693] [INFO] channels - /r/littlespace: #helpers: : Okay!! +[2017-03-23 02:13:40.134] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> you're a good kid +[2017-03-23 02:13:44.417] [INFO] channels - /r/littlespace: #helpers: : Am I? +[2017-03-23 02:13:49.020] [INFO] channels - /r/littlespace: #helpers: : Yup! +[2017-03-23 02:14:07.928] [INFO] channels - /r/littlespace: #helpers: : You're working diligently +[2017-03-23 02:14:12.454] [INFO] channels - /r/littlespace: #helpers: : Patpat +[2017-03-23 02:14:16.371] [INFO] channels - /r/littlespace: #helpers: : You're a good kid too. D: +[2017-03-23 02:14:17.309] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 02:14:21.882] [INFO] channels - /r/littlespace: #helpers: : Ahhhh I need to wash my brushes +[2017-03-23 02:14:27.681] [INFO] channels - /r/littlespace: #helpers: : Oh my +[2017-03-23 02:14:44.143] [INFO] channels - /r/littlespace: #helpers: : It's honestly not a lot, I just started collecting makeup really +[2017-03-23 02:15:04.934] [INFO] channels - /r/littlespace: #helpers: : I just started last year! +[2017-03-23 02:15:19.460] [INFO] channels - /r/littlespace: #helpers: : My favorite makeup look: +[2017-03-23 02:15:26.785] [INFO] channels - /r/littlespace: #helpers: : I have this really good lip oil omg and I think ko would love it bc rilakkuma +[2017-03-23 02:15:57.347] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 02:16:11.495] [INFO] channels - /r/littlespace: #general: : <@224490259428147211> think of boobs it might help you +[2017-03-23 02:16:37.887] [INFO] channels - /r/littlespace: #helpers: : NO WONDER IT WASN'T WORKING +[2017-03-23 02:16:45.510] [INFO] channels - /r/littlespace: #helpers: : I forgot to restart the app... +[2017-03-23 02:16:58.078] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 02:17:42.312] [INFO] channels - /r/littlespace: #helpers: : That's just one swipe? +[2017-03-23 02:17:45.688] [INFO] channels - /r/littlespace: #helpers: : Not bad!! +[2017-03-23 02:17:59.851] [INFO] channels - /r/littlespace: #general: : I'm also NC! :3 +[2017-03-23 02:18:03.722] [INFO] channels - /r/littlespace: #helpers: : I THINK WE HAVE FHE SAME SKIN COLOR MAYBE +[2017-03-23 02:18:09.246] [INFO] channels - /r/littlespace: #general: : I think someone else here was too. :3 +[2017-03-23 02:18:33.954] [INFO] channels - /r/littlespace: #helpers: : i built up a few because i couldnt see them LOL +[2017-03-23 02:18:35.515] [INFO] channels - /r/littlespace: #helpers: : REALLY +[2017-03-23 02:18:56.121] [INFO] channels - /r/littlespace: #helpers: : HAHAH THATS GREAT. they look nice though! +[2017-03-23 02:18:59.711] [INFO] channels - /r/littlespace: #helpers: : Yeah! +[2017-03-23 02:19:03.257] [INFO] channels - /r/littlespace: #helpers: : OH MY GOD do you want to see my lipstick swatches +[2017-03-23 02:19:08.871] [INFO] channels - /r/littlespace: #general: : Haha, how would boobs help me? +[2017-03-23 02:19:11.578] [INFO] channels - /r/littlespace: #helpers: : i'm supposed to do a lipstick swatch to see how many similar ones i have +[2017-03-23 02:19:12.066] [INFO] channels - /r/littlespace: #helpers: : LOL +[2017-03-23 02:19:16.603] [INFO] channels - /r/littlespace: #general: : And why aren't you sleeping? +[2017-03-23 02:19:17.423] [INFO] channels - /r/littlespace: #helpers: : Kinda blueish pinkish undertones +[2017-03-23 02:19:18.986] [INFO] channels - /r/littlespace: #helpers: : my irl best friend ordered me to do that +[2017-03-23 02:19:25.078] [INFO] channels - /r/littlespace: #helpers: : Hhah awwwh +[2017-03-23 02:19:27.490] [INFO] channels - /r/littlespace: #helpers: : i think so! blue red lipsticks never fit me +[2017-03-23 02:19:45.034] [INFO] channels - /r/littlespace: #helpers: : Yeah cool skin +[2017-03-23 02:19:46.197] [INFO] channels - /r/littlespace: #helpers: : okay brb. let me hunt all my lipsticks down and do a nice swatch +[2017-03-23 02:19:49.606] [INFO] channels - /r/littlespace: #helpers: : I KNEW IT. FUCK IT +[2017-03-23 02:19:54.075] [INFO] channels - /r/littlespace: #helpers: : I don't think I have yellow undertones +[2017-03-23 02:19:56.396] [INFO] channels - /r/littlespace: #helpers: : i wanted a nice blue red lipstick. and i can't use this +[2017-03-23 02:20:00.030] [INFO] channels - /r/littlespace: #helpers: : i think i do? cos asian and all +[2017-03-23 02:20:06.946] [INFO] channels - /r/littlespace: #helpers: : There's like a test to hold up a white paper +[2017-03-23 02:20:16.780] [INFO] channels - /r/littlespace: #helpers: : Yellow is like Italian to me +[2017-03-23 02:20:20.986] [INFO] channels - /r/littlespace: #helpers: : Olive skin and all +[2017-03-23 02:20:23.751] [INFO] channels - /r/littlespace: #helpers: : I dunno +[2017-03-23 02:21:17.541] [INFO] channels - /r/littlespace: #general: : If you think of that you wont be bored +[2017-03-23 02:21:27.470] [INFO] channels - /r/littlespace: #general: : Becuse I can't sleep +[2017-03-23 02:21:35.387] [INFO] channels - /r/littlespace: #helpers: : Em is still ranting to me, and I still have no idea what she's going on about. +[2017-03-23 02:21:37.743] [INFO] channels - /r/littlespace: #helpers: : ... +[2017-03-23 02:21:49.687] [INFO] channels - /r/littlespace: #helpers: : But I'm kinda taunting her at this point. +[2017-03-23 02:21:59.985] [INFO] channels - /r/littlespace: #helpers: : just by saying random words +[2017-03-23 02:22:02.398] [INFO] channels - /r/littlespace: #helpers: : hoping I get them correct +[2017-03-23 02:22:16.664] [INFO] channels - /r/littlespace: #helpers: : ```[2:07 AM] Unlucky13: To me it sounds like someone is hurt because they are a special snowflake who doesnt understand criticism and is a complete asshole because white people opress me becausw euro centric beautt standards +[2:08 AM] WARBIRD199: Hrm, i don't disagree +[2:08 AM] Unlucky13: But whatever +[2:17 AM] Unlucky13: Like im sorry for being white +[2:18 AM] WARBIRD199: White privilege? +[2:19 AM] Unlucky13: Yep +[2:19 AM] Unlucky13: Well "dominant culture" which means western which means white +[2:20 AM] WARBIRD199: Good point. +[2:20 AM] Unlucky13: Which means +[2:21 AM] Unlucky13: Im sorry my white skin offends you +[2:21 AM] Unlucky13: ALSO ITS FUCKING AMERICA +[2:21 AM] WARBIRD199: ^ This. +NEW MESSAGES +[2:21 AM] Unlucky13: ITS A GOD DAMN MELTING POT THE ONLY CULTURE WE HAVE IS FLAGS PAINTED ON OUR BACKS AND EAGLES!! +[2:22 AM] Unlucky13: And freedom``` +[2017-03-23 02:22:18.341] [INFO] channels - /r/littlespace: #helpers: : >.> +[2017-03-23 02:23:00.206] [INFO] channels - /r/littlespace: #helpers: : Uber can sum this one up for me. +[2017-03-23 02:23:02.209] [INFO] channels - /r/littlespace: #helpers: : .ud 0fg +[2017-03-23 02:23:02.516] [INFO] channels - /r/littlespace: #helpers: : Zero fucks given (Syn. for NFG, no fucks given) + +It means just what it sounds like. () +[2017-03-23 02:23:14.375] [INFO] channels - /r/littlespace: #helpers: : Hahhah +[2017-03-23 02:23:36.112] [INFO] channels - /r/littlespace: #general: : That would just serve to make me horny. +[2017-03-23 02:23:43.052] [INFO] channels - /r/littlespace: #general: : But yeah +[2017-03-23 02:23:55.849] [INFO] channels - /r/littlespace: #general: : Boobs are pretty great now that you mentioned it +[2017-03-23 02:24:18.652] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 02:24:20.156] [INFO] channels - /r/littlespace: #helpers: : Gag +[2017-03-23 02:24:25.111] [INFO] channels - /r/littlespace: #general: : Wish I could give a nice loving home to all the boobs. +[2017-03-23 02:24:40.086] [INFO] channels - /r/littlespace: #helpers: : ... +[2017-03-23 02:24:45.124] [INFO] channels - /r/littlespace: #helpers: : ```[2:23 AM] WARBIRD199: Bleh. +NEW MESSAGES +[2:24 AM] Unlucky13: So you cant appropriate western cultures because they are the dominant culture +[2:24 AM] Unlucky13: So like i said +[2:24 AM] Unlucky13: Only white people typically appropriate``` +[2017-03-23 02:24:53.609] [INFO] channels - /r/littlespace: #helpers: : i wonder how long she's just going to go on +[2017-03-23 02:25:14.906] [INFO] channels - /r/littlespace: #helpers: : Until she's gone from sjw to sxsw +[2017-03-23 02:25:17.851] [INFO] channels - /r/littlespace: #helpers: : Lmfaooo +[2017-03-23 02:25:21.885] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 02:25:36.814] [INFO] channels - /r/littlespace: #helpers: : I really like the bottom one. However, not for me. +[2017-03-23 02:25:36.935] [INFO] channels - /r/littlespace: #general: : A bra? +[2017-03-23 02:25:50.987] [INFO] channels - /r/littlespace: #general: : I said home, it prison. +[2017-03-23 02:25:53.619] [INFO] channels - /r/littlespace: #helpers: : LOVE THE BOTTOM +[2017-03-23 02:26:01.934] [INFO] channels - /r/littlespace: #helpers: : AND THE THIRD FROM THE TOP +[2017-03-23 02:26:04.997] [INFO] channels - /r/littlespace: #general: : Its not! +[2017-03-23 02:26:17.503] [INFO] channels - /r/littlespace: #general: : Bras are not prison? +[2017-03-23 02:26:23.019] [INFO] channels - /r/littlespace: #general: : They're support +[2017-03-23 02:26:41.108] [INFO] channels - /r/littlespace: #general: : What she said +[2017-03-23 02:26:44.665] [INFO] channels - /r/littlespace: #helpers: : oh that's a local brand i think +[2017-03-23 02:26:47.953] [INFO] channels - /r/littlespace: #helpers: : it's a liquid lipstick +[2017-03-23 02:26:52.934] [INFO] channels - /r/littlespace: #general: : Better than most dudes I tell ya whaut +[2017-03-23 02:27:05.841] [INFO] channels - /r/littlespace: #helpers: : the only liquid lipstick i can use tbh +[2017-03-23 02:27:16.030] [INFO] channels - /r/littlespace: #general: : Oookay +[2017-03-23 02:27:20.246] [INFO] channels - /r/littlespace: #helpers: : I love liquid lipstick +[2017-03-23 02:27:23.963] [INFO] channels - /r/littlespace: #helpers: : https://fauxfayc.com/collections/mini-lipstick/products/fauxstix-liquid-xctasy-pill?variant=33052864390 +[2017-03-23 02:27:30.007] [INFO] channels - /r/littlespace: #helpers: : Like crime makes amazing ones +[2017-03-23 02:27:32.064] [INFO] channels - /r/littlespace: #helpers: : i love the bottom ones too!! it's so pastel and cute +[2017-03-23 02:27:36.280] [INFO] channels - /r/littlespace: #helpers: : and IT'S NYX +[2017-03-23 02:27:54.284] [INFO] channels - /r/littlespace: #helpers: : i'm in a mlbb mood nowadays, but i broke my colourpop's mlbb one so i'm sad +[2017-03-23 02:28:00.495] [INFO] channels - /r/littlespace: #general: : All I know is that when I see a trapped pair of boobs, I wanna free them. +[2017-03-23 02:28:11.006] [INFO] channels - /r/littlespace: #helpers: : it's so tough to find a nice mlbb for me. too dark and i'll look too sick. too light and i'll look pastel +[2017-03-23 02:28:21.025] [INFO] channels - /r/littlespace: #general: : I bet if the guys had big boobs the would complain if they wherent allowed bras +[2017-03-23 02:28:31.576] [INFO] channels - /r/littlespace: #helpers: : ateoz's being creepy. he's like a boob lover +[2017-03-23 02:28:35.800] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 02:28:43.270] [INFO] channels - /r/littlespace: #helpers: : Cringy +[2017-03-23 02:28:49.468] [INFO] channels - /r/littlespace: #helpers: : i'm gonna show this to my cg. gross +[2017-03-23 02:29:08.883] [INFO] channels - /r/littlespace: #general: : Maybe :) +[2017-03-23 02:29:12.058] [INFO] channels - /r/littlespace: #helpers: : Lol go for it +[2017-03-23 02:29:35.890] [INFO] channels - /r/littlespace: #helpers: : I think I'm gonna head to bed or try to +[2017-03-23 02:29:42.332] [INFO] channels - /r/littlespace: #helpers: : If I can't I'll come back 💙 +[2017-03-23 02:29:51.950] [INFO] channels - /r/littlespace: #helpers: : Sweet dreams, bestie. ❤ +[2017-03-23 02:29:58.829] [INFO] channels - /r/littlespace: #helpers: : good night ❤ +[2017-03-23 02:30:13.568] [INFO] channels - /r/littlespace: #helpers: : Night you two! 💙 +[2017-03-23 02:30:18.563] [INFO] channels - /r/littlespace: #helpers: : i'm gonna shower and probably colour +[2017-03-23 02:30:20.300] [INFO] channels - /r/littlespace: #helpers: : woohoo! +[2017-03-23 02:30:27.273] [INFO] channels - /r/littlespace: #helpers: : I won't leave you yet, <@234126386703499264>! +[2017-03-23 02:30:31.654] [INFO] channels - /r/littlespace: #helpers: : though, i am starting to get tired. +[2017-03-23 02:30:32.333] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=Yq94NXeBOu4 <@200944723035160576> +[2017-03-23 02:30:36.045] [INFO] channels - /r/littlespace: #helpers: : 😦 +[2017-03-23 02:30:41.613] [INFO] channels - /r/littlespace: #helpers: : go and rest!! you slept really late yesterday +[2017-03-23 02:30:58.850] [INFO] channels - /r/littlespace: #helpers: : i will once i get logstash working again +[2017-03-23 02:31:04.666] [INFO] channels - /r/littlespace: #helpers: : i restarted it and now it just... doesn't work +[2017-03-23 02:31:05.184] [INFO] channels - /r/littlespace: #helpers: : lol +[2017-03-23 02:31:16.026] [INFO] channels - /r/littlespace: #helpers: : yikes. good luck +[2017-03-23 02:31:19.822] [INFO] channels - /r/littlespace: #helpers: : it's not even starting... the process is running, just not loading. +[2017-03-23 02:32:38.514] [INFO] channels - /r/littlespace: #general: : Omg +[2017-03-23 02:32:44.973] [INFO] channels - /r/littlespace: #general: : My battery is low now. +[2017-03-23 02:33:02.294] [INFO] channels - /r/littlespace: #helpers: : holy crap, i think it's starting to load now. +[2017-03-23 02:33:07.726] [INFO] channels - /r/littlespace: #helpers: : wait, that was a tease. +[2017-03-23 02:33:13.853] [INFO] channels - /r/littlespace: #helpers: : It pegged my CPUs momentarily. +[2017-03-23 02:33:14.845] [INFO] channels - /r/littlespace: #general: : I should go offline, Laters. +[2017-03-23 02:33:19.494] [INFO] channels - /r/littlespace: #helpers: : tell it to stop teasing you! +[2017-03-23 02:33:30.636] [INFO] channels - /r/littlespace: #helpers: : Also, that video is good! +[2017-03-23 02:33:44.900] [INFO] channels - /r/littlespace: #helpers: : i love that band a lot +[2017-03-23 02:33:46.269] [INFO] channels - /r/littlespace: #helpers: : it's amazing +[2017-03-23 02:33:55.819] [INFO] channels - /r/littlespace: #helpers: : you should listen to their debut album ZABA it's sooo lush +[2017-03-23 02:33:57.897] [INFO] channels - /r/littlespace: #general: : Good night +[2017-03-23 02:34:28.971] [INFO] channels - /r/littlespace: #helpers: : Sometimes I like when Youtube says "Watch it again" +[2017-03-23 02:34:29.278] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=uT3SBzmDxGk +[2017-03-23 02:36:47.894] [INFO] channels - /r/littlespace: #helpers: : ikr, same +[2017-03-23 02:37:05.450] [INFO] channels - /r/littlespace: #helpers: : oh right, what games do you play? +[2017-03-23 02:42:26.374] [INFO] channels - /r/littlespace: #helpers: : I play a lot of games. +[2017-03-23 02:42:34.711] [INFO] channels - /r/littlespace: #helpers: : .steam WARBIRD199 +[2017-03-23 02:42:35.532] [INFO] channels - /r/littlespace: #helpers: : WARBIRD199: Last Online 38 hrs, 46 mins ago | Most Played (last 2 weeks): Tom Clancy's Ghost Recon® Wildlands @ 13.1 hours (Total: 21 hours) | Steam ID: STEAM_0:1:31940666 | http://steamcommunity.com/id/WARBIRD199 +[2017-03-23 02:47:54.215] [INFO] channels - /r/littlespace: #helpers: : https://www.youtube.com/watch?v=DNPto4GFwx4 +[2017-03-23 02:55:25.439] [INFO] channels - /r/littlespace: #helpers: : Testing. +[2017-03-23 03:01:07.066] [INFO] channels - /r/littlespace: #helpers: : sozzzz i was showering +[2017-03-23 03:01:15.004] [INFO] channels - /r/littlespace: #helpers: : I may have just created the most awesome graph ever. +[2017-03-23 03:01:16.389] [INFO] channels - /r/littlespace: #helpers: : gonna add you on steam 😄 +[2017-03-23 03:01:21.457] [INFO] channels - /r/littlespace: #helpers: : pics or it didnt happen +[2017-03-23 03:01:35.131] [INFO] channels - /r/littlespace: #helpers: : I can give you better than a picture. +[2017-03-23 03:01:36.028] [INFO] channels - /r/littlespace: #helpers: : Hang on. +[2017-03-23 03:01:51.547] [INFO] channels - /r/littlespace: #helpers: : Unless you're mobile, I assume this wouldn't appear well on a phone +[2017-03-23 03:02:24.037] [INFO] channels - /r/littlespace: #helpers: : i'm not on mobile now +[2017-03-23 03:02:37.128] [INFO] channels - /r/littlespace: #helpers: : Well, hang on then. :) +[2017-03-23 03:02:56.256] [INFO] channels - /r/littlespace: #helpers: : okay!!! +[2017-03-23 03:11:13.661] [INFO] channels - /r/littlespace: #helpers: : *waiting patiently* +[2017-03-23 03:13:40.260] [INFO] channels - /r/littlespace: #helpers: : sorry, i may have just temporarily broke it +[2017-03-23 03:13:42.563] [INFO] channels - /r/littlespace: #helpers: : tryin to fix it lol +[2017-03-23 03:13:52.669] [INFO] channels - /r/littlespace: #helpers: : i'm not ignoring you, meeeep ❤ +[2017-03-23 03:16:26.611] [INFO] channels - /r/littlespace: #helpers: : Don't worry!! +[2017-03-23 03:16:31.338] [INFO] channels - /r/littlespace: #helpers: : Arrrrrgh +[2017-03-23 03:16:51.479] [INFO] channels - /r/littlespace: #helpers: : I hate periods bc like. I keep having weird period induced issues like migraine and +[2017-03-23 03:16:53.154] [INFO] channels - /r/littlespace: #helpers: : Ugh +[2017-03-23 03:16:55.092] [INFO] channels - /r/littlespace: #helpers: : Nausea +[2017-03-23 03:17:03.490] [INFO] channels - /r/littlespace: #helpers: : And diarrhoea and yuck I hate it +[2017-03-23 03:17:10.912] [INFO] channels - /r/littlespace: #helpers: : ❤️ +[2017-03-23 03:17:14.238] [INFO] channels - /r/littlespace: #helpers: : I get migraines often, obviously, not due to periods, but I can relate to that. +[2017-03-23 03:17:18.285] [INFO] channels - /r/littlespace: #helpers: : And they trigger hard nausea for me. +[2017-03-23 03:17:22.878] [INFO] channels - /r/littlespace: #helpers: : Oh YES IKR +[2017-03-23 03:17:29.351] [INFO] channels - /r/littlespace: #helpers: : When I was on the uber I was dying +[2017-03-23 03:17:43.268] [INFO] channels - /r/littlespace: #helpers: : That guy smoked a lot before driving, so like, there's a lingering cigarette smell +[2017-03-23 03:17:57.897] [INFO] channels - /r/littlespace: #helpers: : Aww. That's terrible. +[2017-03-23 03:18:12.553] [INFO] channels - /r/littlespace: #helpers: : I don't know what triggers my migraines, but they hit at just the wrong times. +[2017-03-23 03:18:29.334] [INFO] channels - /r/littlespace: #helpers: : The last super bad one I had, I ended up leaving work +[2017-03-23 03:18:31.506] [INFO] channels - /r/littlespace: #helpers: : It's never a right time to get migraines +[2017-03-23 03:18:39.349] [INFO] channels - /r/littlespace: #helpers: : whcih doesn't happen often, I normally just go take a nap +[2017-03-23 03:18:56.945] [INFO] channels - /r/littlespace: #helpers: : I realise that my migraines are very linked with my sinuses...... and sigh +[2017-03-23 03:19:02.254] [INFO] channels - /r/littlespace: #helpers: : At least taking a nap helps +[2017-03-23 03:19:25.282] [INFO] channels - /r/littlespace: #helpers: : Okay! Here! https://elk.linuxrocker.com/goto/23cacb2452ccab260f2745ec574ace95 +[2017-03-23 03:19:26.528] [INFO] channels - /r/littlespace: #helpers: : I need medication, nap + good night's sleep + chilli. Loads of hot piping tear inducing chilli +[2017-03-23 03:19:27.574] [INFO] channels - /r/littlespace: #helpers: : Click that! +[2017-03-23 03:19:35.391] [INFO] channels - /r/littlespace: #helpers: : You should see four graphs. +[2017-03-23 03:19:42.521] [INFO] channels - /r/littlespace: #helpers: : Okay I'm gonna click that when I'm on the laptop again +[2017-03-23 03:19:55.777] [INFO] channels - /r/littlespace: #helpers: : I *might* be being sulky in the toilet right now +[2017-03-23 03:20:42.269] [INFO] channels - /r/littlespace: #helpers: : and as i confirmed, it looks awful on mobile +[2017-03-23 03:20:57.062] [INFO] channels - /r/littlespace: #mod: : <@&173241636304715776>, here's your new Discord statistics panel: https://elk.linuxrocker.com/goto/23cacb2452ccab260f2745ec574ace95 +[2017-03-23 13:23:32.644] [INFO] channels - /r/littlespace: #vent: : But we'll be OK. I'm sure of it :) +[2017-03-23 13:23:52.538] [INFO] channels - /r/littlespace: #helpers: : actually, rants and raves might not.... be a bad one. +[2017-03-23 13:23:58.898] [INFO] channels - /r/littlespace: #helpers: : ow +[2017-03-23 13:23:59.076] [INFO] channels - /r/littlespace: #helpers: : Hello. I am Baymax, your personal Discord companion. https://cdn.discordapp.com/attachments/265064665099403264/294326730703896577/giphy-2.gif +[2017-03-23 13:24:06.643] [INFO] channels - /r/littlespace: #helpers: : Okay, dev-baymax is working again. +[2017-03-23 13:24:17.229] [INFO] channels - /r/littlespace: #vent: : Are you sure? +[2017-03-23 13:24:28.430] [INFO] channels - /r/littlespace: #vent: : Yus +[2017-03-23 13:24:37.816] [INFO] channels - /r/littlespace: #vent: : I just dont want to be abandoned again 😦 +[2017-03-23 13:24:59.342] [INFO] channels - /r/littlespace: #helpers: : "I just don't want to be abandoned again!" +[2017-03-23 13:25:08.779] [INFO] channels - /r/littlespace: #helpers: : oh go cry me a river and build me a bridge +[2017-03-23 13:25:46.436] [INFO] channels - /r/littlespace: #vent: : I know it sucks bman +[2017-03-23 13:25:58.329] [INFO] channels - /r/littlespace: #helpers: : Heading to work. Talk to you in a bit. +[2017-03-23 13:26:13.366] [INFO] channels - /r/littlespace: #general: : <@274917231778070528> haha thanks! +[2017-03-23 13:26:14.627] [INFO] channels - /r/littlespace: #vent: : But force love is not satisfying. +[2017-03-23 13:26:46.327] [INFO] channels - /r/littlespace: #vent: : Im not forcing anything +[2017-03-23 13:26:48.179] [INFO] channels - /r/littlespace: #general: : It was a randomly generated name by Microsoft Games back in the day, and I liked it +[2017-03-23 13:27:21.717] [INFO] channels - /r/littlespace: #vent: : I just mean if she doesn't want it, there's nothing to be done. +[2017-03-23 13:27:22.611] [INFO] channels - /r/littlespace: #general: : toenails turn a pretty orange and fall off in autumn +[2017-03-23 13:28:11.216] [INFO] channels - /r/littlespace: #vent: : Although I'm filling a lot of blanks from my imagination cause I don't know the full story. +[2017-03-23 13:28:29.717] [INFO] channels - /r/littlespace: #vent: : So maybe I'm just talking nonsense. +[2017-03-23 13:28:43.277] [INFO] channels - /r/littlespace: #helpers: : FUCKING RIGHT. Lemme just be a little baby and talk about all my prior relationship problems in public. Like go fuck yourself with something hard and sandpapery. I have no respect for people that whine without asking for help. I mean it's a different story if you're going to whine and be like "well what can/should I do" we should literally just send them to the letters to no one subreddit do they can shut the fuck up. Phew I feel better. +[2017-03-23 13:28:54.680] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-23 13:28:54.903] [INFO] channels - /r/littlespace: #helpers: : *gives <@!274917231778070528> a freshly made Oatmeal Raisin cookie.* +[2017-03-23 13:29:01.420] [INFO] channels - /r/littlespace: #helpers: : God bless +[2017-03-23 13:29:07.030] [INFO] channels - /r/littlespace: #vent: : *soaks ateoz shirt* +[2017-03-23 13:29:37.932] [INFO] channels - /r/littlespace: #vent: : Im sure she'll be back, we've had gaps before. Im just scared that THIS will be the time she leaves +[2017-03-23 13:29:48.650] [INFO] channels - /r/littlespace: #vent: : Aw, I hate seeing you sad Keiju, what's wrong? +[2017-03-23 13:30:17.194] [INFO] channels - /r/littlespace: #general: : Ewwwwie +[2017-03-23 13:30:39.243] [INFO] channels - /r/littlespace: #general: : Also you're welcome! That's clever back in the day I was "vicious crayon" +[2017-03-23 13:30:44.606] [INFO] channels - /r/littlespace: #general: : Fitting I guess hahah +[2017-03-23 13:31:12.235] [INFO] channels - /r/littlespace: #general: : That's not bad +[2017-03-23 13:31:28.272] [INFO] channels - /r/littlespace: #general: : I think the only game I had that for was Fallout 3 +[2017-03-23 13:32:59.144] [INFO] channels - /r/littlespace: #vent: : I just miss my Big alot and I havent been able to nap at all today +[2017-03-23 13:34:02.583] [INFO] channels - /r/littlespace: #general: : Ohhh that was back for like...silly pre installed games on my first laptop lol or second rather! +[2017-03-23 13:34:32.831] [INFO] channels - /r/littlespace: #helpers: : .yt victim avenged +[2017-03-23 13:34:33.549] [INFO] channels - /r/littlespace: #helpers: : Avenged Sevenfold - Victim Lyrics - https://youtu.be/QSxGnrx6GPU [ 821,042 views | 4.91 rating w/ 5,310 likes (102 dislikes) | Duration: 7m26s | Uploaded: 2011-09-24 by Miss Wynter ] +[2017-03-23 13:35:01.118] [INFO] channels - /r/littlespace: #general: : <@274917231778070528> what are you playing now adays? +[2017-03-23 13:35:04.548] [INFO] channels - /r/littlespace: #helpers: : Still one of my favourites. +[2017-03-23 13:38:35.715] [INFO] channels - /r/littlespace: #general: : I'm gonna drag you over to the gaming channel just so we don't get too nerdy +[2017-03-23 13:38:49.696] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> i got your package today +[2017-03-23 13:38:52.621] [INFO] channels - /r/littlespace: #gaming: : <@294520326669336577> I've been playing a lot of Overwatch and the Sims 4. +[2017-03-23 13:39:01.006] [INFO] channels - /r/littlespace: #gaming: : Kind of in a lazy gaming sort of mood really +[2017-03-23 13:39:02.823] [INFO] channels - /r/littlespace: #helpers: : yay! +[2017-03-23 13:39:12.161] [INFO] channels - /r/littlespace: #helpers: : build that shit! +[2017-03-23 13:39:20.437] [INFO] channels - /r/littlespace: #helpers: : you find instructions online +[2017-03-23 13:39:20.895] [INFO] channels - /r/littlespace: #gaming: : Being a super filthy casual to be completely honest +[2017-03-23 13:39:21.235] [INFO] channels - /r/littlespace: #gaming: : I totally get it +[2017-03-23 13:39:48.131] [INFO] channels - /r/littlespace: #helpers: : I will! +[2017-03-23 13:39:49.657] [INFO] channels - /r/littlespace: #gaming: : Now that I'm out of college, I want to be stubborn and old +[2017-03-23 13:39:59.377] [INFO] channels - /r/littlespace: #gaming: : I heard that. +[2017-03-23 13:40:01.683] [INFO] channels - /r/littlespace: #gaming: : I don't want to learn new things, haha +[2017-03-23 13:40:08.411] [INFO] channels - /r/littlespace: #gaming: : Okay not that hahah +[2017-03-23 13:40:14.346] [INFO] channels - /r/littlespace: #gaming: : I want to be a lazy forever study +[2017-03-23 13:40:14.640] [INFO] channels - /r/littlespace: #gaming: : new games +[2017-03-23 13:40:24.402] [INFO] channels - /r/littlespace: #gaming: : Student* +[2017-03-23 13:40:27.288] [INFO] channels - /r/littlespace: #gaming: : Blah +[2017-03-23 13:40:42.943] [INFO] channels - /r/littlespace: #gaming: : Hahah I just want to restart Fallout 4 and Skyrim +[2017-03-23 13:41:01.897] [INFO] channels - /r/littlespace: #gaming: : I'm playing skyrim now, might switch to an old RTS or something soon +[2017-03-23 13:41:12.310] [INFO] channels - /r/littlespace: #gaming: : been playing the special edition +[2017-03-23 13:41:19.003] [INFO] channels - /r/littlespace: #gaming: : runs kind of better, which is nice +[2017-03-23 13:42:16.010] [INFO] channels - /r/littlespace: #gaming: : Ah I have yet to download that +[2017-03-23 13:42:21.263] [INFO] channels - /r/littlespace: #gaming: : Oy vey +[2017-03-23 13:42:24.050] [INFO] channels - /r/littlespace: #gaming: : I'm behind +[2017-03-23 13:42:28.018] [INFO] channels - /r/littlespace: #gaming: : no need, if skyrim runs fine +[2017-03-23 13:42:38.754] [INFO] channels - /r/littlespace: #gaming: : it doesn't look that much better +[2017-03-23 13:42:44.106] [INFO] channels - /r/littlespace: #gaming: : I haven't even played skyrim since last year +[2017-03-23 13:44:25.964] [INFO] channels - /r/littlespace: #gaming: : I like to play it during winter +[2017-03-23 13:47:19.610] [INFO] channels - /r/littlespace: #gaming: : Hows sims 4? +[2017-03-23 13:47:51.912] [INFO] channels - /r/littlespace: #gaming: : +[2017-03-23 13:52:24.449] [INFO] channels - /r/littlespace: #mod: : <@173239190190817280> did you look at the link i posted earlier? +[2017-03-23 13:52:36.049] [INFO] channels - /r/littlespace: #mod: : nay +[2017-03-23 13:52:41.990] [INFO] channels - /r/littlespace: #mod: : You should. +[2017-03-23 13:56:29.348] [INFO] channels - /r/littlespace: #gaming: : Sims 4 is good. I miss the open worldyness of sims 3 tho @DecidiousFoot#7400 +[2017-03-23 13:59:48.766] [INFO] channels - /r/littlespace: #gaming: : Yeah, that's a shame they got rid of that +[2017-03-23 14:00:23.515] [INFO] channels - /r/littlespace: #gaming: : vicariously living out your dating life? that's what I do +[2017-03-23 14:01:54.353] [INFO] channels - /r/littlespace: #gaming: : not to sound too pathetic +[2017-03-23 14:01:56.760] [INFO] channels - /r/littlespace: #gaming: : eh too late +[2017-03-23 14:11:20.557] [INFO] channels - /r/littlespace: #gaming: : Hahah nah I just make sims that look like people I hate and kill them and or make their lives a living hell +[2017-03-23 14:11:29.495] [INFO] channels - /r/littlespace: #gaming: : ¯\_(ツ)_/¯ +[2017-03-23 14:12:52.059] [INFO] channels - /r/littlespace: #gaming: : DELETE THE DOORS +[2017-03-23 14:12:55.584] [INFO] channels - /r/littlespace: #gaming: : NO FRIDGE FOR YOU +[2017-03-23 14:14:39.530] [INFO] channels - /r/littlespace: #gaming: : There was this thing with a painting goblin you could do to make a lot of money. +[2017-03-23 14:15:45.980] [INFO] channels - /r/littlespace: #gaming: : http://m.imgur.com/gallery/NrJku9x +[2017-03-23 14:16:49.574] [INFO] channels - /r/littlespace: #gaming: : hahahaha +[2017-03-23 14:17:10.413] [INFO] channels - /r/littlespace: #gaming: : IVE HEARD TALES OF THE PAINTING GOBLIN +[2017-03-23 14:18:44.781] [INFO] channels - /r/littlespace: #gaming: : LMFAO THATS GREAT +[2017-03-23 14:18:51.598] [INFO] channels - /r/littlespace: #gaming: : I made the gary clones from fallout new vegas in sims 3, where I made 9 identical clones who all lived in a fault and were evil, crazy, kleptos +[2017-03-23 14:18:55.933] [INFO] channels - /r/littlespace: #gaming: : Also psa to all Clawbert players: +[2017-03-23 14:19:09.183] [INFO] channels - /r/littlespace: #gaming: : +[2017-03-23 14:19:14.519] [INFO] channels - /r/littlespace: #gaming: : The spellword is: LOVEKLEPTOCAT +[2017-03-23 14:19:39.582] [INFO] channels - /r/littlespace: #gaming: : Speaking of kleptos apparently +[2017-03-23 14:19:55.856] [INFO] channels - /r/littlespace: #gaming: : http://suptg.thisisnotatrueending.com/archive/26531617/ +[2017-03-23 14:20:41.977] [INFO] channels - /r/littlespace: #gaming: : because they related so much, they often fell in love with eachother +[2017-03-23 14:20:58.150] [INFO] channels - /r/littlespace: #gaming: : but because they were evil, selfish assholes, they also fought a lot +[2017-03-23 14:25:17.497] [INFO] channels - /r/littlespace: #gaming: : i think i'll get back into the sims +[2017-03-23 14:25:42.007] [INFO] channels - /r/littlespace: #gaming: : because when i wanted more disk space on my computer i had a fit and deleted damn near everythig +[2017-03-23 14:25:51.463] [INFO] channels - /r/littlespace: #gaming: : including the sims 4 and all of my custom content +[2017-03-23 14:26:17.609] [INFO] channels - /r/littlespace: #general: : **** back +[2017-03-23 14:26:27.941] [INFO] channels - /r/littlespace: #gaming: : so woop woop time to redownload things for like 30 hours +[2017-03-23 14:27:36.071] [INFO] channels - /r/littlespace: #general: : Hiya wicked +[2017-03-23 14:27:53.182] [INFO] channels - /r/littlespace: #gaming: : OH YES BB GET BACK INTO IT +[2017-03-23 14:28:01.288] [INFO] channels - /r/littlespace: #gaming: : And we can share cc :3 +[2017-03-23 14:28:57.566] [INFO] channels - /r/littlespace: #general: : **** hey +[2017-03-23 14:30:28.569] [INFO] channels - /r/littlespace: #gaming: : pls send me good cc link i never saved any of them +[2017-03-23 14:30:37.267] [INFO] channels - /r/littlespace: #gaming: : cept the tv heads i found once i know where to get those again +[2017-03-23 14:30:48.458] [INFO] channels - /r/littlespace: #gaming: : i'll share those those are stupid cue +[2017-03-23 14:30:50.486] [INFO] channels - /r/littlespace: #gaming: : *cute +[2017-03-23 14:31:12.022] [INFO] channels - /r/littlespace: #general: : **** It quiet +[2017-03-23 14:32:08.067] [INFO] channels - /r/littlespace: #gaming: : When you need more space, you buy another hdd cuteboo :p +[2017-03-23 14:32:16.424] [INFO] channels - /r/littlespace: #general: : Hahah I knooo +[2017-03-23 14:33:04.703] [INFO] channels - /r/littlespace: #gaming: : Ahhh I get a lot of stuff from Tumblr and tsr +[2017-03-23 14:40:05.193] [INFO] channels - /r/littlespace: #general: : **** Do you live local to your CG? +[2017-03-23 14:40:07.143] [INFO] channels - /r/littlespace: #helpers: : I'm at work. Weeeee. +[2017-03-23 14:40:29.277] [INFO] channels - /r/littlespace: #helpers: : ```[1:29 PM] Bman: Im sure she'll be back, we've had gaps before. Im just scared that THIS will be the time she leaves +``` + +I demand a wide river, with a 6 lane bridge. +[2017-03-23 14:40:54.929] [INFO] channels - /r/littlespace: #helpers: : Heh +[2017-03-23 14:40:58.212] [INFO] channels - /r/littlespace: #helpers: : This one time +[2017-03-23 14:41:02.591] [INFO] channels - /r/littlespace: #helpers: : Unlike the last four +[2017-03-23 14:41:07.083] [INFO] channels - /r/littlespace: #helpers: : this one time, in band camp +[2017-03-23 14:41:08.678] [INFO] channels - /r/littlespace: #helpers: : It'll for sure happen this time +[2017-03-23 14:41:34.104] [INFO] channels - /r/littlespace: #helpers: : #wasteBmanstime2k17 +[2017-03-23 14:42:16.794] [INFO] channels - /r/littlespace: #general: : Nope! We're currently long distance +[2017-03-23 14:42:18.527] [INFO] channels - /r/littlespace: #general: : ): +[2017-03-23 14:42:26.490] [INFO] channels - /r/littlespace: #general: : Why wassup wicked +[2017-03-23 14:42:38.228] [INFO] channels - /r/littlespace: #general: : (Heh alliteration) +[2017-03-23 14:43:08.032] [INFO] channels - /r/littlespace: #general: : **** I was just curious +[2017-03-23 14:44:02.419] [INFO] channels - /r/littlespace: #general: : I think I figured out what happens to the foot during the fall. Its toenails come off or something. +[2017-03-23 14:44:17.449] [INFO] channels - /r/littlespace: #general: : Lol @DecidiousFoot#7400 said that before +[2017-03-23 14:44:41.912] [INFO] channels - /r/littlespace: #helpers: : somtimes +[2017-03-23 14:44:46.200] [INFO] channels - /r/littlespace: #helpers: : sometimes +[2017-03-23 14:44:46.365] [INFO] channels - /r/littlespace: #helpers: : some crimes +[2017-03-23 14:44:59.051] [INFO] channels - /r/littlespace: #helpers: : Hah +[2017-03-23 14:45:05.218] [INFO] channels - /r/littlespace: #general: : **** I am not sure I can do a long distance Daddy. Maybe +[2017-03-23 14:45:22.814] [INFO] channels - /r/littlespace: #helpers: : If I were bman's girlfriend... I'd magically have a heart attack and disappear forever. +[2017-03-23 14:45:23.073] [INFO] channels - /r/littlespace: #helpers: : My hands are equipped with defibrillators. **CLEAR!** https://cdn.discordapp.com/attachments/265064665099403264/294302721429995520/tumblr_n9h0l4ODbC1ry7whco1_1280.gif +[2017-03-23 14:45:27.959] [INFO] channels - /r/littlespace: #helpers: : No, Thor, not today. +[2017-03-23 14:45:33.310] [INFO] channels - /r/littlespace: #helpers: : Just leave me be. +[2017-03-23 14:45:38.739] [INFO] channels - /r/littlespace: #helpers: : It's just a phrase +[2017-03-23 14:45:49.781] [INFO] channels - /r/littlespace: #general: : **** Where did you meet your Daddy? +[2017-03-23 14:45:50.399] [INFO] channels - /r/littlespace: #helpers: : "No mom it's just a phase!" +[2017-03-23 14:45:57.915] [INFO] channels - /r/littlespace: #helpers: : I am so funneh +[2017-03-23 14:46:00.312] [INFO] channels - /r/littlespace: #helpers: : Ehehehe +[2017-03-23 14:46:10.630] [INFO] channels - /r/littlespace: #helpers: : Question +[2017-03-23 14:46:38.731] [INFO] channels - /r/littlespace: #helpers: : Is it possible for me to reach through my phone and flick bman in the middle of the forehead? +[2017-03-23 14:46:49.709] [INFO] channels - /r/littlespace: #general: : Reddit! +[2017-03-23 14:47:22.986] [INFO] channels - /r/littlespace: #general: : God bless reddit and the almighty interwebs +[2017-03-23 14:47:25.444] [INFO] channels - /r/littlespace: #general: : **** Ah okay. I never had any luck +[2017-03-23 14:47:52.037] [INFO] channels - /r/littlespace: #helpers: : YES IT IS +[2017-03-23 14:48:37.185] [INFO] channels - /r/littlespace: #general: : Yeah I actually met him through r4r and we started hanging out playing vidya games and such and from there we started dating and now we're slowly, *slowly* getting into the cgl dynamic +[2017-03-23 14:49:38.326] [INFO] channels - /r/littlespace: #general: : **** ohh nice +[2017-03-23 14:49:46.151] [INFO] channels - /r/littlespace: #general: : **** Most of the guys I met just wanted sex +[2017-03-23 14:49:56.156] [INFO] channels - /r/littlespace: #general: : So true. +[2017-03-23 14:50:07.401] [INFO] channels - /r/littlespace: #general: : Long distance is never fun in any kind of relationship. But sometimes it's all we've got. +[2017-03-23 14:50:12.467] [INFO] channels - /r/littlespace: #general: : **** Or they wanted to collect littles +[2017-03-23 14:50:29.690] [INFO] channels - /r/littlespace: #general: : **** I wasn't saying anything bad about it +[2017-03-23 14:50:45.746] [INFO] channels - /r/littlespace: #general: : I know. I'm just sayong +[2017-03-23 14:50:51.730] [INFO] channels - /r/littlespace: #general: : Saying.* +[2017-03-23 14:50:53.983] [INFO] channels - /r/littlespace: #general: : Ugh that's lame +[2017-03-23 14:51:00.273] [INFO] channels - /r/littlespace: #general: : I'm sorry wicked +[2017-03-23 14:51:35.846] [INFO] channels - /r/littlespace: #general: : **** Not your fault +[2017-03-23 14:51:54.013] [INFO] channels - /r/littlespace: #general: : I wasn't really intentionally looking for someone to date or "be with" I just wanted a new friend +[2017-03-23 14:52:02.584] [INFO] channels - /r/littlespace: #general: : Good to know there are girls who have trouble finding someone :p +[2017-03-23 14:52:05.319] [INFO] channels - /r/littlespace: #general: : And I found one of the best friends I ever had +[2017-03-23 14:52:15.199] [INFO] channels - /r/littlespace: #general: : And then I fell in love with the dork +[2017-03-23 14:52:22.957] [INFO] channels - /r/littlespace: #general: : ¯\_(ツ)_/¯ +[2017-03-23 14:52:27.774] [INFO] channels - /r/littlespace: #general: : I'm being very mushy +[2017-03-23 14:53:14.627] [INFO] channels - /r/littlespace: #general: : That happened to me ariel. +[2017-03-23 14:53:38.376] [INFO] channels - /r/littlespace: #general: : **** Gee thanks, ateoz. lol +[2017-03-23 14:54:10.139] [INFO] channels - /r/littlespace: #general: : Haha, I'm just jealous when I see how much attention women get in comparison to me :p +[2017-03-23 14:54:24.251] [INFO] channels - /r/littlespace: #general: : **** I get no attention +[2017-03-23 14:55:12.359] [INFO] channels - /r/littlespace: #general: : I literally never got a response to any of my replies. Ever +[2017-03-23 14:56:00.954] [INFO] channels - /r/littlespace: #general: : Anyway, happy thoughts :) +[2017-03-23 14:56:11.225] [INFO] channels - /r/littlespace: #general: : pls take all of the attention i get i have like 6 boys trying to be my daddy rn +[2017-03-23 14:56:11.693] [INFO] channels - /r/littlespace: #general: : **** I sometimes got replies and mostly from creeps +[2017-03-23 14:56:14.774] [INFO] channels - /r/littlespace: #general: : **** Fake daddies +[2017-03-23 14:56:47.043] [INFO] channels - /r/littlespace: #general: : Lucky cuteboo haha +[2017-03-23 14:57:15.658] [INFO] channels - /r/littlespace: #general: : i don't want them pls take them off of my tiny little hands +[2017-03-23 14:57:17.665] [INFO] channels - /r/littlespace: #general: : **** Boys? Eww, no thanks. +[2017-03-23 14:57:32.985] [INFO] channels - /r/littlespace: #general: : i'm too nice to be like "nah i'm good" +[2017-03-23 14:57:47.004] [INFO] channels - /r/littlespace: #general: : Totes, I don't like boys either. +[2017-03-23 14:59:18.514] [INFO] channels - /r/littlespace: #general: : Don't you already have a daddy cuteboo? +[2017-03-23 14:59:50.859] [INFO] channels - /r/littlespace: #general: : Oh? +[2017-03-23 15:00:07.380] [INFO] channels - /r/littlespace: #helpers: : Soon +[2017-03-23 15:00:30.793] [INFO] channels - /r/littlespace: #general: : yup +[2017-03-23 15:00:33.629] [INFO] channels - /r/littlespace: #general: : that is my issue +[2017-03-23 15:00:52.635] [INFO] channels - /r/littlespace: #general: : So where do all the offers come from? +[2017-03-23 15:00:59.305] [INFO] channels - /r/littlespace: #general: : Randos? +[2017-03-23 15:01:05.600] [INFO] channels - /r/littlespace: #general: : otherwise rather than like subtly ignoring their advances i'd be like "line up boiss" +[2017-03-23 15:01:10.036] [INFO] channels - /r/littlespace: #general: : yeah +[2017-03-23 15:01:37.583] [INFO] channels - /r/littlespace: #general: : **** Gross +[2017-03-23 15:01:40.228] [INFO] channels - /r/littlespace: #general: : The curse of being a cute.. And also a boo I guess. +[2017-03-23 15:03:29.874] [INFO] channels - /r/littlespace: #general: : Angels in America is weird. +[2017-03-23 15:05:44.466] [INFO] channels - /r/littlespace: #general: : But at least Tony Montana is in it. +[2017-03-23 15:08:44.683] [INFO] channels - /r/littlespace: #general: : Aaanyway. Going to bed. Good night o/ +[2017-03-23 15:08:55.926] [INFO] channels - /r/littlespace: #general: : Night! +[2017-03-23 15:08:59.646] [INFO] channels - /r/littlespace: #helpers: : When will then be now? +[2017-03-23 15:09:22.456] [INFO] channels - /r/littlespace: #general: : Night! +[2017-03-23 15:09:33.224] [INFO] channels - /r/littlespace: #general: : **** Bye +[2017-03-23 15:09:54.751] [INFO] channels - /r/littlespace: #gaming: : Why have I not been following the Sonic the Hedgehog fb page?? It's gold xD +[2017-03-23 15:10:45.299] [INFO] channels - /r/littlespace: #general: : hai 😄 +[2017-03-23 15:10:58.526] [INFO] channels - /r/littlespace: #helpers: : What the hell am I looking at? When does this happen in the movie? + +Now, you're looking at now, sir. Everything that happens now is happening now. + +What happened to then? + +We passed then. +[2017-03-23 15:18:07.733] [INFO] channels - /r/littlespace: #mod: : what link +[2017-03-23 15:18:11.525] [INFO] channels - /r/littlespace: #general: : Hiya +[2017-03-23 15:18:16.034] [INFO] channels - /r/littlespace: #mod: : +[2017-03-23 15:18:19.270] [INFO] channels - /r/littlespace: #mod: : I pinned it. +[2017-03-23 15:18:27.629] [INFO] channels - /r/littlespace: #mod: : it doesn't view well on mobile though +[2017-03-23 15:18:29.924] [INFO] channels - /r/littlespace: #mod: : i advise a PC> +[2017-03-23 15:18:34.395] [INFO] channels - /r/littlespace: #helpers: : WAIT +[2017-03-23 15:18:36.252] [INFO] channels - /r/littlespace: #mod: : im at my laptop +[2017-03-23 15:18:38.598] [INFO] channels - /r/littlespace: #helpers: : WHAT IS THAT FROM +[2017-03-23 15:21:04.585] [INFO] channels - /r/littlespace: #mod: : but what i pinned is awesome. +[2017-03-23 15:21:10.657] [INFO] channels - /r/littlespace: #mod: : and I honestly can't believe it works. +[2017-03-23 15:22:15.154] [INFO] channels - /r/littlespace: #show_and_tell: : Oh I figured out my favorite little movie!! Trolls!! Very much love that movie. But Wreck it Ralph is also up there!! +[2017-03-23 15:22:24.617] [INFO] channels - /r/littlespace: #helpers: : Spaceballs. :) +[2017-03-23 15:22:34.429] [INFO] channels - /r/littlespace: #helpers: : .yt when will then be now +[2017-03-23 15:22:45.054] [INFO] channels - /r/littlespace: #helpers: : Ahhh +[2017-03-23 15:22:50.910] [INFO] channels - /r/littlespace: #helpers: : .yt when will then be now +[2017-03-23 15:22:53.718] [INFO] channels - /r/littlespace: #helpers: : COME ON UBERBOT +[2017-03-23 15:23:01.267] [INFO] channels - /r/littlespace: #helpers: : COMB THE DESERT +[2017-03-23 15:23:07.242] [INFO] channels - /r/littlespace: #helpers: : We ain't found SHIT. +[2017-03-23 15:23:18.903] [INFO] channels - /r/littlespace: #general: : How is u? +[2017-03-23 15:23:29.473] [INFO] channels - /r/littlespace: #helpers: : I don't get to make Spaceballs references too often. +[2017-03-23 15:23:38.892] [INFO] channels - /r/littlespace: #helpers: : I think the last movie I referenced was Half Baked... lol +[2017-03-23 15:23:55.900] [INFO] channels - /r/littlespace: #helpers: : Daryan was going to the store... and she asked if I needed anything... +[2017-03-23 15:24:14.633] [INFO] channels - /r/littlespace: #helpers: : I said "Yeah, get me a box of condoms and... what is it... we used to eat it all the time back in the day. Oh yeah, pussy." +[2017-03-23 15:24:25.988] [INFO] channels - /r/littlespace: #helpers: : oh god, she was so embarrassed because I didn't know I was on speaker with her mother around... +[2017-03-23 15:24:35.308] [INFO] channels - /r/littlespace: #helpers: : but I was laughing so hard... +[2017-03-23 15:26:20.705] [INFO] channels - /r/littlespace: #general: : Hello! +[2017-03-23 15:27:09.570] [INFO] channels - /r/littlespace: #general: : **** Eeek reddit is changing. :( +[2017-03-23 15:28:47.040] [INFO] channels - /r/littlespace: #general: : In what? +[2017-03-23 15:32:24.576] [INFO] channels - /r/littlespace: #general: : whats changing with reddit? +[2017-03-23 15:32:26.116] [INFO] channels - /r/littlespace: #general: : **** everything +[2017-03-23 15:33:06.948] [INFO] channels - /r/littlespace: #vent: : I fucking hate my life. +[2017-03-23 15:33:21.839] [INFO] channels - /r/littlespace: #general: : is there a blog post on reddit about it? +[2017-03-23 15:33:38.522] [INFO] channels - /r/littlespace: #helpers: : VENT INCOMING. I HATE MY FUCKING LIFE +[2017-03-23 15:34:10.568] [INFO] channels - /r/littlespace: #vent: : Depressed because I accidentally misread a due date and had to turn in my story for writing late. +[2017-03-23 15:34:35.626] [INFO] channels - /r/littlespace: #general: : **** Yeah +[2017-03-23 15:34:55.016] [INFO] channels - /r/littlespace: #vent: : I had three weeks and my work ethic and time management sucks +[2017-03-23 15:34:59.409] [INFO] channels - /r/littlespace: #general: : **** Hold on +[2017-03-23 15:35:23.798] [INFO] channels - /r/littlespace: #vent: : I don't feel like I can do anything anymore +[2017-03-23 15:36:08.686] [INFO] channels - /r/littlespace: #general: : **** https://www.reddit.com/r/announcements/comments/60p3n1/tldr_today_were_testing_out_a_new_feature_that/ +[2017-03-23 15:36:15.895] [INFO] channels - /r/littlespace: #general: : thank you 😃 +[2017-03-23 15:36:28.037] [INFO] channels - /r/littlespace: #general: : **** Welcome +[2017-03-23 15:37:12.175] [INFO] channels - /r/littlespace: #vent: : And now i get to go to club and watch everyone else have fun playing tabletops while everyone ignores me +[2017-03-23 15:37:29.173] [INFO] channels - /r/littlespace: #vent: : : ( +[2017-03-23 15:38:49.227] [INFO] channels - /r/littlespace: #general: : hmmm, it doesnt look too bad, but the profile pages are not really something I think i'll use. +[2017-03-23 15:41:56.700] [INFO] channels - /r/littlespace: #general: : **** I dont think we will have a choice +[2017-03-23 15:42:09.730] [INFO] channels - /r/littlespace: #general: : **** Anyway, bathey time +[2017-03-23 15:42:12.439] [INFO] channels - /r/littlespace: #general: : **** BAI +[2017-03-23 15:42:19.196] [INFO] channels - /r/littlespace: #general: : bai 👋 +[2017-03-23 15:44:56.413] [INFO] channels - /r/littlespace: #general: : It says the users can opt out of it, if wanted. +[2017-03-23 15:47:13.579] [INFO] channels - /r/littlespace: #show_and_tell: : @Yasha#5150 oh man I love Wreck-It Ralph! such a cute movie 😊 +[2017-03-23 15:49:26.471] [INFO] channels - /r/littlespace: #helpers: : That's hilarious. Vent away +[2017-03-23 15:50:38.108] [INFO] channels - /r/littlespace: #general: : I was supposed to do a design study for that but I never got an email date confirmation)): +[2017-03-23 15:50:47.868] [INFO] channels - /r/littlespace: #helpers: : I was referring to <#276765230321762305> <@274917231778070528> +[2017-03-23 15:51:20.905] [INFO] channels - /r/littlespace: #helpers: : Oh +[2017-03-23 15:51:24.532] [INFO] channels - /r/littlespace: #helpers: : Just saw that now +[2017-03-23 15:53:29.176] [INFO] channels - /r/littlespace: #helpers: : god, you're slow. :) +[2017-03-23 15:53:30.775] [INFO] channels - /r/littlespace: #helpers: : ❤ +[2017-03-23 15:56:03.993] [INFO] channels - /r/littlespace: #helpers: : I was driving lmfao +[2017-03-23 15:56:10.925] [INFO] channels - /r/littlespace: #general: : Is there anyone that would mind listening to me whine one on one? +[2017-03-23 15:56:41.135] [INFO] channels - /r/littlespace: #helpers: : Dolly is looking for help. +[2017-03-23 15:56:43.810] [INFO] channels - /r/littlespace: #general: : I need to vent but i don't really want to do it in the vent chat. i'd rather just have one on one bitch time +[2017-03-23 15:56:50.302] [INFO] channels - /r/littlespace: #helpers: : I should tell her to message bman +[2017-03-23 15:56:53.253] [INFO] channels - /r/littlespace: #helpers: : Heh +[2017-03-23 15:56:53.852] [INFO] channels - /r/littlespace: #general: : Its understandable if no one wants to bother. +[2017-03-23 15:58:13.375] [INFO] channels - /r/littlespace: #general: : sorry dolly, im awful at listening to people, i hope everything is ok with you though. +[2017-03-23 15:59:42.272] [INFO] channels - /r/littlespace: #helpers: : oh god lol +[2017-03-23 15:59:48.061] [INFO] channels - /r/littlespace: #helpers: : that's some prime support +[2017-03-23 15:59:59.266] [INFO] channels - /r/littlespace: #helpers: : premier* +[2017-03-23 16:00:47.854] [INFO] channels - /r/littlespace: #general: : its okay +[2017-03-23 16:00:52.645] [INFO] channels - /r/littlespace: #general: : its understandable +[2017-03-23 16:01:41.753] [INFO] channels - /r/littlespace: #helpers: : Also prime +[2017-03-23 16:01:55.206] [INFO] channels - /r/littlespace: #general: : nothing is okay. nothing ever gonna be okay. I should just fucking learn how to not speak or show emotions that others don't want to bother with. +[2017-03-23 16:03:17.495] [INFO] channels - /r/littlespace: #helpers: : I think they would just scream at each other +[2017-03-23 16:03:33.336] [INFO] channels - /r/littlespace: #helpers: : i would pay to see that +[2017-03-23 16:03:43.605] [INFO] channels - /r/littlespace: #helpers: : *grabs popcorn* +[2017-03-23 16:03:46.661] [INFO] channels - /r/littlespace: #helpers: : *fistbump* +[2017-03-23 16:03:47.010] [INFO] channels - /r/littlespace: #helpers: : Ba-la-la-la-la! https://cdn.discordapp.com/attachments/265064665099403264/294327036388835328/giphy-3.gif +[2017-03-23 16:04:13.428] [INFO] channels - /r/littlespace: #general: : Heya <@276998213314281474> I would be happy to listen to you I'm just going to move us over to <#276765230321762305> 😊 +[2017-03-23 16:04:28.259] [INFO] channels - /r/littlespace: #vent: : <@276998213314281474> what's going on? +[2017-03-23 16:04:44.036] [INFO] channels - /r/littlespace: #vent: : Would you mind if i privet noted you it <@274917231778070528> +[2017-03-23 16:05:05.453] [INFO] channels - /r/littlespace: #vent: : i'd prefer to do this one on one with someone if thats okay with you +[2017-03-23 16:07:23.704] [INFO] channels - /r/littlespace: #general: : Yay I bought a. Tsum Tsum blind bag and got Baymax! +[2017-03-23 16:07:47.074] [INFO] channels - /r/littlespace: #media_sharing: : +[2017-03-23 16:08:44.339] [INFO] channels - /r/littlespace: #helpers: : YES, DM US +[2017-03-23 16:15:57.366] [INFO] channels - /r/littlespace: #media_sharing: : <@224490259428147211> Late on this but: Optimum Nutrition shirt, nice. That's the only protein I get. Their banana cream is delicious. +[2017-03-23 16:25:32.109] [INFO] channels - /r/littlespace: #helpers: : Can I just say +[2017-03-23 16:25:44.905] [INFO] channels - /r/littlespace: #helpers: : Dolly's spelling and grammar sucks +[2017-03-23 16:25:49.223] [INFO] channels - /r/littlespace: #helpers: : I'm never talking to her again +[2017-03-23 16:26:03.039] [INFO] channels - /r/littlespace: #helpers: : It literally pissed me off trying to figure out what the hell shes talking about +[2017-03-23 16:26:50.636] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> okay good. You're not a vampire. But you need more sleep. And I'm sorry about that cops thing it's ridiculous. I hope things will be better, eventually. But 💛 sending love from all the way from Singapore to wherever you are, right now +[2017-03-23 16:27:05.514] [INFO] channels - /r/littlespace: #helpers: : And yes I miss you both too. And. YOU ALL TALK TOO MUCH +[2017-03-23 16:27:37.141] [INFO] channels - /r/littlespace: #helpers: : I know +[2017-03-23 16:27:42.495] [INFO] channels - /r/littlespace: #helpers: : It's been a rough day bb +[2017-03-23 16:27:55.040] [INFO] channels - /r/littlespace: #helpers: : Also she's freaking messaging me now +[2017-03-23 16:27:56.468] [INFO] channels - /r/littlespace: #helpers: : Meh +[2017-03-23 16:28:09.503] [INFO] channels - /r/littlespace: #helpers: : Good luck. Send screenshots if you need support +[2017-03-23 16:28:24.608] [INFO] channels - /r/littlespace: #general: : AHHHHH IM KELLY <@184867971770875904> +[2017-03-23 16:28:26.326] [INFO] channels - /r/littlespace: #helpers: : And I'm sorry baby. Message me if you need cute cat videos. +[2017-03-23 16:28:37.793] [INFO] channels - /r/littlespace: #general: : -.- +[2017-03-23 16:29:19.937] [INFO] channels - /r/littlespace: #helpers: : Hahaha oh you know I will. +[2017-03-23 16:29:24.977] [INFO] channels - /r/littlespace: #helpers: : Also I would love cute cats +[2017-03-23 16:29:57.230] [INFO] channels - /r/littlespace: #general: : I would if I wasn't on my phone <@276998213314281474> +[2017-03-23 16:30:05.554] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> good morning! Did you sleep well? +[2017-03-23 16:30:19.668] [INFO] channels - /r/littlespace: #general: : I got it <@108737203361812480> (: also I'm sorry you're having a poop day +[2017-03-23 16:30:56.057] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> I hope it gets better ❤ +[2017-03-23 16:31:17.949] [INFO] channels - /r/littlespace: #helpers: : Right back at you <@200944723035160576> 💙 +[2017-03-23 16:31:20.650] [INFO] channels - /r/littlespace: #helpers: : I slept okay? But it's 530 and I have a dull ache behind my eye and some points on my head and fuck my sinuses are clogging and draining all the time it's not fun +[2017-03-23 16:31:28.396] [INFO] channels - /r/littlespace: #helpers: : Awww. ;( +[2017-03-23 16:31:33.474] [INFO] channels - /r/littlespace: #helpers: : 😢 +[2017-03-23 16:31:33.780] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-23 16:31:48.161] [INFO] channels - /r/littlespace: #helpers: : I'm sorry I'm whiny. The headache and the sinus issue is getting to me +[2017-03-23 16:32:02.477] [INFO] channels - /r/littlespace: #helpers: : You're not being whiny. You're not feeling well. I'd complain too. +[2017-03-23 16:32:08.257] [INFO] channels - /r/littlespace: #helpers: : Nothing weong with that. +[2017-03-23 16:32:09.431] [INFO] channels - /r/littlespace: #helpers: : wrong* +[2017-03-23 16:32:29.121] [INFO] channels - /r/littlespace: #helpers: : And I had a fever before I slept too, so like. I fucking hate periods. +[2017-03-23 16:32:34.513] [INFO] channels - /r/littlespace: #helpers: : I listen to Team Mom (shamless ping <@173239190190817280>) all the time. :P +[2017-03-23 16:32:43.521] [INFO] channels - /r/littlespace: #helpers: : complain all the time* +[2017-03-23 16:33:13.700] [INFO] channels - /r/littlespace: #helpers: : Team Mom is the best team. Maybe it's a January baby trait to be always whiny 😅 +[2017-03-23 16:33:34.489] [INFO] channels - /r/littlespace: #helpers: : maybe. :) +[2017-03-23 16:34:27.384] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 16:34:38.638] [INFO] channels - /r/littlespace: #helpers: : Omg abort Mission abort abort +[2017-03-23 16:34:51.561] [INFO] channels - /r/littlespace: #helpers: : Omg what +[2017-03-23 16:35:41.215] [INFO] channels - /r/littlespace: #helpers: : I'm confused. +[2017-03-23 16:35:47.535] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> enlighten me +[2017-03-23 16:36:01.588] [INFO] channels - /r/littlespace: #helpers: : also, charge your phone. +[2017-03-23 16:36:18.493] [INFO] channels - /r/littlespace: #general: : Oh my day is fine. I just feel bad atm. +[2017-03-23 16:36:26.329] [INFO] channels - /r/littlespace: #helpers: : I'm lazy. Don't whine +[2017-03-23 16:36:41.508] [INFO] channels - /r/littlespace: #helpers: : i'm just telling you what to do, :P +[2017-03-23 16:37:19.136] [INFO] channels - /r/littlespace: #helpers: : Okay tldr I was telling this new Dom that like hey y'know there are different live online communities you can interact with, since he and his little are both new to it +[2017-03-23 16:37:43.624] [INFO] channels - /r/littlespace: #helpers: : So I gave a shameless plug to our discord server +[2017-03-23 16:38:44.938] [INFO] channels - /r/littlespace: #helpers: : SO PROUD +[2017-03-23 16:38:49.135] [INFO] channels - /r/littlespace: #helpers: : i mean, it's not for everyone, can't help that. +[2017-03-23 16:38:55.173] [INFO] channels - /r/littlespace: #helpers: : Don't be like those overbearing daddy doms over here ❤️ +[2017-03-23 16:39:10.760] [INFO] channels - /r/littlespace: #helpers: : go write some lines! +[2017-03-23 16:39:13.572] [INFO] channels - /r/littlespace: #helpers: : Just kidding. +[2017-03-23 16:39:14.647] [INFO] channels - /r/littlespace: #helpers: : YEAH but like looooool which server isn't as bad as that one, though? +[2017-03-23 16:39:34.587] [INFO] channels - /r/littlespace: #helpers: : Idk I don't like the other two that I know tbh so +[2017-03-23 16:39:44.182] [INFO] channels - /r/littlespace: #helpers: : I'm just biased. +[2017-03-23 16:40:14.495] [INFO] channels - /r/littlespace: #helpers: : Don't make me write lines! I'm a history major I love writing. And lines don't really hurt or bore me *am weird* +[2017-03-23 16:40:52.542] [INFO] channels - /r/littlespace: #helpers: : writing lines is fun to me too. +[2017-03-23 16:41:11.531] [INFO] channels - /r/littlespace: #helpers: : but i mean, our server is the best. we have the userbase. which most of them lack. +[2017-03-23 16:42:34.783] [INFO] channels - /r/littlespace: #helpers: : Best server is best +[2017-03-23 16:43:14.526] [INFO] channels - /r/littlespace: #vent: : <@276998213314281474> I can 1 on 1 if you want +[2017-03-23 16:43:45.117] [INFO] channels - /r/littlespace: #general: : same +[2017-03-23 16:49:20.000] [INFO] channels - /r/littlespace: #helpers: : Yeah. So I.... don't know what I should do. I mean, like..... yeah. But as an advocate for someone who deserves to get enabled and be, y'know, better and happier, I think I'll just link some over to that little who's looking for it lol +[2017-03-23 16:49:25.043] [INFO] channels - /r/littlespace: #helpers: : *am too nice* +[2017-03-23 16:50:40.075] [INFO] channels - /r/littlespace: #helpers: : that could owrk +[2017-03-23 16:52:04.634] [INFO] channels - /r/littlespace: #helpers: : Yeaaaah +[2017-03-23 16:52:22.812] [INFO] channels - /r/littlespace: #gaming: : +[2017-03-23 16:52:23.957] [INFO] channels - /r/littlespace: #helpers: : What post was this +[2017-03-23 16:52:44.666] [INFO] channels - /r/littlespace: #helpers: : Remember that one. Where joshua the big wanted to look for friends for his new little +[2017-03-23 16:52:54.076] [INFO] channels - /r/littlespace: #helpers: : Ahhhh right +[2017-03-23 16:52:56.163] [INFO] channels - /r/littlespace: #media_sharing: : <@274917231778070528> right now apparently. +[2017-03-23 16:53:01.113] [INFO] channels - /r/littlespace: #helpers: : Yeah, I told them that hey maybe you can consider joining the discord server to meet more friends +[2017-03-23 16:53:06.950] [INFO] channels - /r/littlespace: #general: : My day is okay doing adulting +[2017-03-23 16:53:28.528] [INFO] channels - /r/littlespace: #media_sharing: : Accurate +[2017-03-23 16:53:35.921] [INFO] channels - /r/littlespace: #media_sharing: : ONEHUNDREDPERCENT +[2017-03-23 16:53:57.090] [INFO] channels - /r/littlespace: #helpers: : Ahhh yes! Okay and that was their response lol +[2017-03-23 16:54:19.683] [INFO] channels - /r/littlespace: #helpers: : They FUCKING +[2017-03-23 16:54:21.516] [INFO] channels - /r/littlespace: #helpers: : IGNORED +[2017-03-23 16:54:22.540] [INFO] channels - /r/littlespace: #helpers: : ME +[2017-03-23 16:54:29.802] [INFO] channels - /r/littlespace: #helpers: : Oh +[2017-03-23 16:54:32.662] [INFO] channels - /r/littlespace: #helpers: : Niiiiiiice +[2017-03-23 16:54:36.604] [INFO] channels - /r/littlespace: #helpers: : *flips a table* +[2017-03-23 16:54:41.561] [INFO] channels - /r/littlespace: #helpers: : Well I guess we don't need them then +[2017-03-23 16:54:50.258] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-23 16:54:50.545] [INFO] channels - /r/littlespace: #helpers: : *mic drop* +[2017-03-23 16:55:05.566] [INFO] channels - /r/littlespace: #helpers: : Yes we don't need them +[2017-03-23 16:56:32.280] [INFO] channels - /r/littlespace: #helpers: : This may complicate the code but is there a way to have the bot react by "if @username is used before ! cookie" can you have baymax give a specific user a cookie +[2017-03-23 16:56:51.610] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> ^ +[2017-03-23 16:58:48.809] [INFO] channels - /r/littlespace: #helpers: : I plan on adding that Ariel. +[2017-03-23 16:58:56.528] [INFO] channels - /r/littlespace: #helpers: : In the mean time, people have to get their own cookies. +[2017-03-23 16:59:09.333] [INFO] channels - /r/littlespace: #helpers: : can i have not a nasty raisin cookie +[2017-03-23 16:59:59.452] [INFO] channels - /r/littlespace: #vent: : i don't want to talk +[2017-03-23 17:00:03.985] [INFO] channels - /r/littlespace: #vent: : i don't want to speak +[2017-03-23 17:00:09.784] [INFO] channels - /r/littlespace: #vent: : i don't want to anything any more +[2017-03-23 17:00:44.805] [INFO] channels - /r/littlespace: #vent: : if i could then i'd just turn off my brain and feelings and turn it back on in a few years +[2017-03-23 17:01:18.893] [INFO] channels - /r/littlespace: #helpers: : 😢 +[2017-03-23 17:01:19.104] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-23 17:02:02.912] [INFO] channels - /r/littlespace: #vent: : but thank you for the offer <@141672667827798017> +[2017-03-23 17:03:03.833] [INFO] channels - /r/littlespace: #vent: : life would be so much easier if we could turn our feelings off 😦 +[2017-03-23 17:03:14.474] [INFO] channels - /r/littlespace: #helpers: : Blue, you will take what Baymax gives you. +[2017-03-23 17:03:19.485] [INFO] channels - /r/littlespace: #helpers: : And you will like it. +[2017-03-23 17:03:31.937] [INFO] channels - /r/littlespace: #helpers: : Now tell him you're satisfied with your care. +[2017-03-23 17:03:47.271] [INFO] channels - /r/littlespace: #helpers: : I'm satisfied with my care. +[2017-03-23 17:03:47.454] [INFO] channels - /r/littlespace: #helpers: : You have been good, have a lollipop! https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif +[2017-03-23 17:03:53.656] [INFO] channels - /r/littlespace: #helpers: : Otherwise, you'll hurt his feelings. +[2017-03-23 17:04:15.243] [INFO] channels - /r/littlespace: #helpers: : I'm satisfied with my care. +[2017-03-23 17:04:15.420] [INFO] channels - /r/littlespace: #helpers: : You have been good, have a lollipop! https://cdn.discordapp.com/attachments/265064665099403264/294333704749449216/Baemax-baymax-lollipop.gif +[2017-03-23 17:04:28.432] [INFO] channels - /r/littlespace: #helpers: : have a heart attack +[2017-03-23 17:04:28.777] [INFO] channels - /r/littlespace: #helpers: : My hands are equipped with defibrillators. **CLEAR!** https://cdn.discordapp.com/attachments/265064665099403264/294302721429995520/tumblr_n9h0l4ODbC1ry7whco1_1280.gif +[2017-03-23 17:04:30.995] [INFO] channels - /r/littlespace: #helpers: : Haha +[2017-03-23 17:04:34.536] [INFO] channels - /r/littlespace: #helpers: : Lmfaooo +[2017-03-23 17:04:37.687] [INFO] channels - /r/littlespace: #helpers: : ow. +[2017-03-23 17:04:39.330] [INFO] channels - /r/littlespace: #helpers: : Ow. +[2017-03-23 17:04:39.771] [INFO] channels - /r/littlespace: #helpers: : Hello. I am Baymax, your personal Discord companion. https://cdn.discordapp.com/attachments/265064665099403264/294326730703896577/giphy-2.gif +[2017-03-23 17:04:44.092] [INFO] channels - /r/littlespace: #helpers: : ow +[2017-03-23 17:04:44.386] [INFO] channels - /r/littlespace: #helpers: : Hello. I am Baymax, your personal Discord companion. https://cdn.discordapp.com/attachments/265064665099403264/294326730703896577/giphy-2.gif +[2017-03-23 17:05:12.744] [INFO] channels - /r/littlespace: #helpers: : I am satisfied with my care. +[2017-03-23 17:05:22.432] [INFO] channels - /r/littlespace: #helpers: : Whoops +[2017-03-23 17:05:26.029] [INFO] channels - /r/littlespace: #vent: : Yep... +[2017-03-23 17:05:26.269] [INFO] channels - /r/littlespace: #helpers: : USE CONTRACTIONS +[2017-03-23 17:05:28.633] [INFO] channels - /r/littlespace: #vent: : It would be +[2017-03-23 17:05:39.798] [INFO] channels - /r/littlespace: #helpers: : I SPEAK ENGLISH GUD +[2017-03-23 17:06:00.249] [INFO] channels - /r/littlespace: #helpers: : pics or it didn't happen +[2017-03-23 17:06:10.860] [INFO] channels - /r/littlespace: #general: : idk what i wanna draw today.I'm doing good having a sketch aday so far i don't wanna kill the streak *nerdy art little fills* +[2017-03-23 17:06:37.185] [INFO] channels - /r/littlespace: #general: : feels* +[2017-03-23 17:06:47.790] [INFO] channels - /r/littlespace: #helpers: : I'm sorry +[2017-03-23 17:06:52.026] [INFO] channels - /r/littlespace: #helpers: : Wtf did I just read +[2017-03-23 17:06:56.131] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 17:07:02.108] [INFO] channels - /r/littlespace: #vent: : does anyone have any song suggestions with a sad angry feel? +[2017-03-23 17:07:05.057] [INFO] channels - /r/littlespace: #general: : you have to show us when you are done! +[2017-03-23 17:07:15.385] [INFO] channels - /r/littlespace: #vent: : what kinda sad angry +[2017-03-23 17:07:17.455] [INFO] channels - /r/littlespace: #general: : IDK what i draw now though +[2017-03-23 17:07:18.703] [INFO] channels - /r/littlespace: #vent: : want some teen angst? +[2017-03-23 17:07:22.919] [INFO] channels - /r/littlespace: #gaming: : I....realised I may have just made a massive mistake in pso, and it seems I'm gonna lose 40+ hours of progress >_< +[2017-03-23 17:07:35.920] [INFO] channels - /r/littlespace: #general: : ooh +[2017-03-23 17:07:53.564] [INFO] channels - /r/littlespace: #general: : what do you like drawing? +[2017-03-23 17:07:54.450] [INFO] channels - /r/littlespace: #helpers: : Her English is as *flawless* as ever +[2017-03-23 17:08:07.869] [INFO] channels - /r/littlespace: #general: : hehe anime games original characters fan art +[2017-03-23 17:08:12.753] [INFO] channels - /r/littlespace: #helpers: : It's just perfect, right Meep? +[2017-03-23 17:08:13.899] [INFO] channels - /r/littlespace: #general: : hehe new things +[2017-03-23 17:08:22.684] [INFO] channels - /r/littlespace: #general: : hmm +[2017-03-23 17:08:52.504] [INFO] channels - /r/littlespace: #helpers: : I know right. I'm so not getting a mild migraine from deciphering what she's attempting to talk about +[2017-03-23 17:08:53.587] [INFO] channels - /r/littlespace: #helpers: : i just can't fucking send a message with out using the word fucking either. +[2017-03-23 17:08:57.649] [INFO] channels - /r/littlespace: #helpers: : them fucking millenials man +[2017-03-23 17:09:01.484] [INFO] channels - /r/littlespace: #general: : I considered drawing Tipsumati, Louisoix's cane from FFXIV +[2017-03-23 17:09:02.876] [INFO] channels - /r/littlespace: #vent: : <@276998213314281474> +[2017-03-23 17:09:08.560] [INFO] channels - /r/littlespace: #helpers: : Aren't we all Millennials +[2017-03-23 17:09:13.880] [INFO] channels - /r/littlespace: #helpers: : maybe you guys. +[2017-03-23 17:09:17.066] [INFO] channels - /r/littlespace: #helpers: : _is a old man_ +[2017-03-23 17:09:32.260] [INFO] channels - /r/littlespace: #helpers: : My body may be 22, but mentally I'm like 40 +[2017-03-23 17:09:42.642] [INFO] channels - /r/littlespace: #helpers: : You're 94 though. You're just a few weeks before me. Whatever man +[2017-03-23 17:09:54.775] [INFO] channels - /r/littlespace: #helpers: : Aww, Meep is so young. ❤ +[2017-03-23 17:09:58.516] [INFO] channels - /r/littlespace: #gaming: : That's a massive mistake. What happened? +[2017-03-23 17:10:38.399] [INFO] channels - /r/littlespace: #helpers: : These graphs are filling out nicely... +[2017-03-23 17:10:41.505] [INFO] channels - /r/littlespace: #general: : oh i played 14 a bit, its a cool game. I think that sounds like a really cool thing to draw. +[2017-03-23 17:10:49.854] [INFO] channels - /r/littlespace: #helpers: : https://elk.linuxrocker.com/goto/307a31a390d0c7c51cafb1295d5b3008 +[2017-03-23 17:11:01.504] [INFO] channels - /r/littlespace: #general: : i like the moogles 😃 +[2017-03-23 17:11:35.297] [INFO] channels - /r/littlespace: #general: : I don't draw just objects so it would be a good learnign expierience for me.Oh oh oh I should try to draw King Moggle Mog and the Mogsguard eventauly +[2017-03-23 17:11:35.530] [INFO] channels - /r/littlespace: #vent: : More on pair with I"M FUCKING SORRY I"M SUCH A FUCKING FAILURE or I'M SO FUCKING DONE WITH YOUR FUCKING BULLSHIT or something like that +[2017-03-23 17:11:54.602] [INFO] channels - /r/littlespace: #vent: : ooooooh aight aight this teen angst might still worj +[2017-03-23 17:12:10.250] [INFO] channels - /r/littlespace: #vent: : this song is so sarcastic but unf does it go well with anger +[2017-03-23 17:12:15.114] [INFO] channels - /r/littlespace: #vent: : https://www.youtube.com/watch?v=aE-M8keU528 +[2017-03-23 17:12:49.732] [INFO] channels - /r/littlespace: #vent: : https://youtu.be/gs4zccNJ2zU +[2017-03-23 17:13:21.131] [INFO] channels - /r/littlespace: #general: : yes! king moggle mog! +[2017-03-23 17:13:59.534] [INFO] channels - /r/littlespace: #gaming: : phantasy star? +[2017-03-23 17:14:05.225] [INFO] channels - /r/littlespace: #helpers: : BY A FEW WEEKS +[2017-03-23 17:14:11.762] [INFO] channels - /r/littlespace: #helpers: : Does that mean I'm the youngest +[2017-03-23 17:14:18.544] [INFO] channels - /r/littlespace: #helpers: : When's your birthday? +[2017-03-23 17:15:07.168] [INFO] channels - /r/littlespace: #general: : you could draw him riding a chocobo 😃 +[2017-03-23 17:15:07.739] [INFO] channels - /r/littlespace: #helpers: : It's horrible on mobile +[2017-03-23 17:15:10.449] [INFO] channels - /r/littlespace: #helpers: : 17/01 +[2017-03-23 17:15:14.990] [INFO] channels - /r/littlespace: #helpers: : of 95? +[2017-03-23 17:15:36.109] [INFO] channels - /r/littlespace: #general: : YES TEAM MOOGLES +[2017-03-23 17:15:42.122] [INFO] channels - /r/littlespace: #general: : Kupo +[2017-03-23 17:15:44.500] [INFO] channels - /r/littlespace: #general: : KUPO! +[2017-03-23 17:15:56.133] [INFO] channels - /r/littlespace: #helpers: : Yes +[2017-03-23 17:16:10.033] [INFO] channels - /r/littlespace: #helpers: : And I'm so fucking done with your bullshit too, silly +[2017-03-23 17:16:13.774] [INFO] channels - /r/littlespace: #helpers: : Dolly* +[2017-03-23 17:16:41.513] [INFO] channels - /r/littlespace: #helpers: : Yep, you're the baby of the group. Baby Meep. :P +[2017-03-23 17:17:06.108] [INFO] channels - /r/littlespace: #vent: : I was hoping for songs like a more punky screamy angry version of perfect by linkin park. +[2017-03-23 17:17:13.521] [INFO] channels - /r/littlespace: #general: : I dun play FF :/ +[2017-03-23 17:17:38.229] [INFO] channels - /r/littlespace: #general: : you are missing out! +[2017-03-23 17:17:51.053] [INFO] channels - /r/littlespace: #helpers: : Yay!!! Now you all take care of me 💜 +[2017-03-23 17:17:55.849] [INFO] channels - /r/littlespace: #general: : I knooooooooow +[2017-03-23 17:18:12.952] [INFO] channels - /r/littlespace: #helpers: : Deal. And give you all the attention? ❤ +[2017-03-23 17:18:18.447] [INFO] channels - /r/littlespace: #general: : I played that one Kingdom Hearts game on 3DS +[2017-03-23 17:18:29.064] [INFO] channels - /r/littlespace: #helpers: : Yes of course. I'm a clingy whiny bratty princess +[2017-03-23 17:18:42.054] [INFO] channels - /r/littlespace: #helpers: : Omg yes. This is perfect. Don't you think this muffpuff is like a meep +[2017-03-23 17:19:11.084] [INFO] channels - /r/littlespace: #helpers: : Does Dolly speak English actually? +[2017-03-23 17:19:11.199] [INFO] channels - /r/littlespace: #helpers: : Actually. I don't remember what's the character's name. I nicknamed her muffpuff and I don't remember what the actual name is +[2017-03-23 17:19:15.016] [INFO] channels - /r/littlespace: #helpers: : Also THAT IS SO CUTE +[2017-03-23 17:19:19.674] [INFO] channels - /r/littlespace: #general: : what did you think of it? +[2017-03-23 17:19:37.768] [INFO] channels - /r/littlespace: #general: : Kingdom Hearts has watered down for me +[2017-03-23 17:19:40.078] [INFO] channels - /r/littlespace: #helpers: : I don't know. I think it's her primary language. That's what I gleaned via a DM with her about education +[2017-03-23 17:19:46.080] [INFO] channels - /r/littlespace: #helpers: : IKR I LOVE HER +[2017-03-23 17:20:05.622] [INFO] channels - /r/littlespace: #general: : Good gameplay, story was a fucking flaming train wreck/school us pile up +[2017-03-23 17:20:16.585] [INFO] channels - /r/littlespace: #helpers: : Kinda looks like Jack Frost from Persona.. +[2017-03-23 17:20:18.334] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 17:20:22.024] [INFO] channels - /r/littlespace: #helpers: : OH MY +[2017-03-23 17:20:27.841] [INFO] channels - /r/littlespace: #helpers: : <@222611472688218112> <@274917231778070528> +[2017-03-23 17:20:31.766] [INFO] channels - /r/littlespace: #helpers: : I need your birthdays +[2017-03-23 17:20:37.265] [INFO] channels - /r/littlespace: #helpers: : But she's cuter. My muffpuff is cuter +[2017-03-23 17:20:38.656] [INFO] channels - /r/littlespace: #helpers: : August 18th +[2017-03-23 17:20:42.898] [INFO] channels - /r/littlespace: #helpers: : YEARS +[2017-03-23 17:20:44.181] [INFO] channels - /r/littlespace: #helpers: : YEARS +[2017-03-23 17:20:47.196] [INFO] channels - /r/littlespace: #helpers: : 1994 +[2017-03-23 17:20:48.052] [INFO] channels - /r/littlespace: #helpers: : 94 for ko +[2017-03-23 17:20:51.570] [INFO] channels - /r/littlespace: #helpers: : Thank you. :) +[2017-03-23 17:21:05.063] [INFO] channels - /r/littlespace: #vent: : Search for RAMMSTEIN +[2017-03-23 17:21:14.159] [INFO] channels - /r/littlespace: #helpers: : Ko, how's your tummy? +[2017-03-23 17:21:15.750] [INFO] channels - /r/littlespace: #general: : I just think they should have went 1 2 Birth By Sleep(cause prequel/lore needs) and 3 +[2017-03-23 17:21:47.466] [INFO] channels - /r/littlespace: #general: : but know we have to make this a ridiculous franchise that diluted because of the "new lore" in order to make things relevant and more confusing +[2017-03-23 17:21:51.248] [INFO] channels - /r/littlespace: #helpers: : Good!! Ryo made me egg and rice while I was over and now I'm gonna snack on some plantain chips in class. +[2017-03-23 17:22:09.360] [INFO] channels - /r/littlespace: #helpers: : Yay!!! What time are you going home? +[2017-03-23 17:22:48.521] [INFO] channels - /r/littlespace: #general: : Maybe we should move this to <#179365624332419073>, guys? +[2017-03-23 17:22:57.164] [INFO] channels - /r/littlespace: #helpers: : 8 or 9 the latest! It's 6:22 now. +[2017-03-23 17:23:12.449] [INFO] channels - /r/littlespace: #general: : sure 😃 +[2017-03-23 17:23:13.421] [INFO] channels - /r/littlespace: #vent: : oooh +[2017-03-23 17:23:13.982] [INFO] channels - /r/littlespace: #general: : This sounds more like a discussion of gameplay, soooo.... yeah 😅 +[2017-03-23 17:23:14.517] [INFO] channels - /r/littlespace: #vent: : hmm +[2017-03-23 17:23:18.621] [INFO] channels - /r/littlespace: #vent: : idk if i can help much then +[2017-03-23 17:23:18.715] [INFO] channels - /r/littlespace: #general: : Thank you all! +[2017-03-23 17:23:25.554] [INFO] channels - /r/littlespace: #vent: : maybe knucklepuck? +[2017-03-23 17:23:33.513] [INFO] channels - /r/littlespace: #helpers: : That's so late 😱 +[2017-03-23 17:23:39.616] [INFO] channels - /r/littlespace: #vent: : I know Rammstein's Soone +[2017-03-23 17:23:43.052] [INFO] channels - /r/littlespace: #helpers: : Right. We're 12 hours away +[2017-03-23 17:24:07.270] [INFO] channels - /r/littlespace: #gaming: : <@184867971770875904> I heard the kingdom hearts story is super complicated, I have no idea what its all about. +[2017-03-23 17:24:15.146] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> dolly wants some angsty music. Give it to her! +[2017-03-23 17:24:55.541] [INFO] channels - /r/littlespace: #gaming: : You have a better chance understanding the Nier and Drakengard storyline....and Yoko Taro makes convulted as fuck stories so that should say something +[2017-03-23 17:25:20.853] [INFO] channels - /r/littlespace: #helpers: : .yt Duality - Slipknot +[2017-03-23 17:25:21.172] [INFO] channels - /r/littlespace: #helpers: : look at you, Josie, telling them to move it along! +[2017-03-23 17:25:22.346] [INFO] channels - /r/littlespace: #helpers: : Slipknot - Duality [OFFICIAL VIDEO] - https://youtu.be/6fVE8kSM43I [ 117,405,721 views | 4.84 rating w/ 540,831 likes (18,405 dislikes) | Duration: 3m34s | Uploaded: 2009-10-26 by Slipknot ] +[2017-03-23 17:30:36.859] [INFO] channels - /r/littlespace: #helpers: : !birthday +[2017-03-23 17:30:37.042] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Birthdays: arielhasfins: 1970-01-01 Nanako: 1994-08-18 WARBIRD199: 1994-12-19 bluedinosaursocks: 1995-01-07 Meep: 1995-01-17 +[2017-03-23 17:30:39.752] [INFO] channels - /r/littlespace: #helpers: : I win. +[2017-03-23 17:30:41.912] [INFO] channels - /r/littlespace: #helpers: : well, kinda. +[2017-03-23 17:30:50.726] [INFO] channels - /r/littlespace: #gaming: : I hope so too.I will still buy certain konami games cause of story and the minds that put hard work behind them but as a fellow artist fuck anyone company or person that will be petty enough to not let an artist except something as big as a award for their work and achievement . +[2017-03-23 17:30:55.016] [INFO] channels - /r/littlespace: #helpers: : !birthday +[2017-03-23 17:30:55.188] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Birthdays: arielhasfins: 1970-01-01 Nanako: 1994-08-18 WARBIRD199: 1994-12-19 bluedinosaursocks: 1995-01-07 Meep: 1995-01-17 +[2017-03-23 17:30:59.198] [INFO] channels - /r/littlespace: #gaming: : They stole that franchise from him. +[2017-03-23 17:31:09.463] [INFO] channels - /r/littlespace: #helpers: : and i'm going to leave ariel's like that until she gives it to me. >:D +[2017-03-23 17:32:26.330] [INFO] channels - /r/littlespace: #gaming: : yeah it was really nasty of them to stop him going to the award ceremony. +[2017-03-23 17:32:35.612] [INFO] channels - /r/littlespace: #gaming: : super disrepectful +[2017-03-23 17:33:04.350] [INFO] channels - /r/littlespace: #gaming: : I am so glad Sony came in and picked him up with full creative expression.And that geoff Keighly did the right thing speaking out on it. +[2017-03-23 17:33:50.037] [INFO] channels - /r/littlespace: #gaming: : Haven't beat Phantom Pain yet but I would love to get one of the original cases(had to trade my psyhical copy in sadly cause of personal issues)I imagine the original case with his name on them is gonna get rare +[2017-03-23 17:34:32.654] [INFO] channels - /r/littlespace: #gaming: : it might become a collectors item 😃 Sadly i only have the steam version +[2017-03-23 17:35:27.891] [INFO] channels - /r/littlespace: #vent: : Girl Anachronism <@276998213314281474> +[2017-03-23 17:36:57.543] [INFO] channels - /r/littlespace: #vent: : "Burials" by AFI is one hell of a break-up album, barring one song. +[2017-03-23 17:37:39.295] [INFO] channels - /r/littlespace: #vent: : If you want punky, screamy, and angry overall. They're also very good for that, depending which songs/albums. +[2017-03-23 17:38:44.697] [INFO] channels - /r/littlespace: #vent: : "break-up" was mostly in reference to the "done with your BS" line, because that's what it made me jump to. +[2017-03-23 17:42:02.977] [INFO] channels - /r/littlespace: #vent: : thank you caduceus +[2017-03-23 17:42:15.720] [INFO] channels - /r/littlespace: #vent: : <@286521217219821568> this is one of my favorite songs 😄 +[2017-03-23 17:42:25.636] [INFO] channels - /r/littlespace: #vent: : Very welcome, happy to help. +[2017-03-23 17:42:33.718] [INFO] channels - /r/littlespace: #vent: : I love it so hard +[2017-03-23 17:46:11.724] [INFO] channels - /r/littlespace: #gaming: : Sorry yeah, and yes it's Phantasy Star, took the wrong "section id" for my character, which affects my drops in the game >_< +[2017-03-23 17:46:14.593] [INFO] channels - /r/littlespace: #helpers: : She's an old lady +[2017-03-23 17:48:55.380] [INFO] channels - /r/littlespace: #helpers: : I know. :) +[2017-03-23 17:52:06.484] [INFO] channels - /r/littlespace: #gaming: : Yikes. +[2017-03-23 17:52:14.666] [INFO] channels - /r/littlespace: #gaming: : REMEMBER THAT CLAWBERT EGG I POSTED THAT SAID IT WAS THE KING OF ALL EGGS?I WAITED ALL DAY TO OPEN IT AND IT WAS ONLY 35 COINS.WHY. +[2017-03-23 17:52:32.883] [INFO] channels - /r/littlespace: #gaming: : <@234126386703499264> <@274917231778070528> +[2017-03-23 17:53:03.208] [INFO] channels - /r/littlespace: #gaming: : SOMAD +[2017-03-23 17:53:09.115] [INFO] channels - /r/littlespace: #gaming: : I'm sorry omg that is frustrating!!!!!! +[2017-03-23 17:53:18.016] [INFO] channels - /r/littlespace: #helpers: : Hrm. +[2017-03-23 17:53:19.298] [INFO] channels - /r/littlespace: #helpers: : !time +[2017-03-23 17:53:19.511] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Timezones: America/Phoenix: 2017-03-23T15:53:19-07:00 America/Chicago: 2017-03-23T17:53:19-05:00 America/New_York: 2017-03-23T18:53:19-04:00 Asia/Singapore: 2017-03-24T06:53:19+08:00 +[2017-03-23 17:53:24.095] [INFO] channels - /r/littlespace: #helpers: : Wow. That is terrible. +[2017-03-23 17:53:34.761] [INFO] channels - /r/littlespace: #helpers: : I mean, functional, but terrible. +[2017-03-23 17:54:17.089] [INFO] channels - /r/littlespace: #gaming: : I wanted to throw my phone lol i know its just a game but they made it seem like it was gonna be a good one> +[2017-03-23 17:54:40.500] [INFO] channels - /r/littlespace: #gaming: : The troll is strong >_< +[2017-03-23 17:57:27.846] [INFO] channels - /r/littlespace: #helpers: : !time +[2017-03-23 17:57:28.049] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Timezones: America/Phoenix: 2017/03/23 America/Chicago: 2017-03-23T17:57:27-05:00 America/New_York: 2017-03-23T18:57:27-04:00 Asia/Singapore: 2017-03-24T06:57:27+08:00 +[2017-03-23 17:57:45.995] [INFO] channels - /r/littlespace: #helpers: : !time +[2017-03-23 17:57:46.217] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Timezones: America/Phoenix: 2017/03/23 03:57:45 America/Chicago: 2017-03-23T17:57:45-05:00 America/New_York: 2017-03-23T18:57:46-04:00 Asia/Singapore: 2017-03-24T06:57:46+08:00 +[2017-03-23 17:57:55.161] [INFO] channels - /r/littlespace: #helpers: : !time +[2017-03-23 17:57:55.359] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Timezones: America/Phoenix: 2017/03/23 15:57:55 America/Chicago: 2017-03-23T17:57:55-05:00 America/New_York: 2017-03-23T18:57:55-04:00 Asia/Singapore: 2017-03-24T06:57:55+08:00 +[2017-03-23 17:58:14.158] [INFO] channels - /r/littlespace: #helpers: : !tiem +[2017-03-23 17:58:16.630] [INFO] channels - /r/littlespace: #helpers: : !time +[2017-03-23 17:58:16.862] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Timezones: America/Phoenix: 2017/03/23 | 15:58:16 America/Chicago: 2017/03/23 | 17:58:16 America/New_York: 2017/03/23 | 18:58:16 Asia/Singapore: 2017/03/24 | 06:58:16 +[2017-03-23 17:58:22.240] [INFO] channels - /r/littlespace: #helpers: : I win. +[2017-03-23 17:58:39.090] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> is that accurate for you? +[2017-03-23 17:58:45.787] [INFO] channels - /r/littlespace: #helpers: : Fucking arizona and their not DST shit +[2017-03-23 17:58:46.987] [INFO] channels - /r/littlespace: #helpers: : yep +[2017-03-23 17:58:58.129] [INFO] channels - /r/littlespace: #helpers: : Well, good. Less confusion now. +[2017-03-23 17:59:19.615] [INFO] channels - /r/littlespace: #helpers: : !time +[2017-03-23 17:59:19.790] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Timezones: America/Phoenix: 2017/03/23 | 15:59:19 MST America/Chicago: 2017/03/23 | 17:59:19 CDT America/New_York: 2017/03/23 | 18:59:19 EDT Asia/Singapore: 2017/03/24 | 06:59:19 SGT +[2017-03-23 17:59:40.600] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264>, also accurate for you? +[2017-03-23 17:59:57.873] [INFO] channels - /r/littlespace: #helpers: : Yep +[2017-03-23 18:00:00.454] [INFO] channels - /r/littlespace: #helpers: : Yay! +[2017-03-23 18:00:32.582] [INFO] channels - /r/littlespace: #helpers: : You've worked hard, War! +[2017-03-23 18:01:49.636] [INFO] channels - /r/littlespace: #helpers: : i always work hard, Meep. +[2017-03-23 18:01:51.312] [INFO] channels - /r/littlespace: #gaming: : I had one of those too 😫 +[2017-03-23 18:01:54.444] [INFO] channels - /r/littlespace: #helpers: : Except, I'm at work right now. +[2017-03-23 18:02:02.656] [INFO] channels - /r/littlespace: #helpers: : And I'm working on Baymax instead of working. :) +[2017-03-23 18:05:07.781] [INFO] channels - /r/littlespace: #vent: : I'm lonely 😔 +[2017-03-23 18:05:56.261] [INFO] channels - /r/littlespace: #vent: : Ever since I stopped drinking I have no one to hang out with except daddy and my family and neither live in the same city as me +[2017-03-23 18:07:02.675] [INFO] channels - /r/littlespace: #vent: : I guess I'll blast some music and clean my little apartment... +[2017-03-23 18:07:03.345] [INFO] channels - /r/littlespace: #helpers: : 😡 +[2017-03-23 18:07:52.793] [INFO] channels - /r/littlespace: #helpers: : Uh oh, I angered the Meep. +[2017-03-23 18:10:40.256] [INFO] channels - /r/littlespace: #helpers: : I am accurately 47 +[2017-03-23 18:10:55.044] [INFO] channels - /r/littlespace: #helpers: : 7-21-1992 +[2017-03-23 18:11:20.682] [INFO] channels - /r/littlespace: #helpers: : !birthday +[2017-03-23 18:11:20.845] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Birthdays: arielhasfins: 1992-07-21 Nanako: 1994-08-18 WARBIRD199: 1994-12-19 bluedinosaursocks: 1995-01-07 Meep: 1995-01-17 +[2017-03-23 18:11:26.249] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> and I are so good at moving people along +[2017-03-23 18:11:41.257] [INFO] channels - /r/littlespace: #helpers: : I moved people into gaming and into vent today +[2017-03-23 18:11:49.208] [INFO] channels - /r/littlespace: #helpers: : WHERES MY PATS <@222611472688218112> +[2017-03-23 18:11:51.653] [INFO] channels - /r/littlespace: #helpers: : You guys are good at your job. +[2017-03-23 18:11:58.270] [INFO] channels - /r/littlespace: #helpers: : _pats <@274917231778070528> for Ko._ +[2017-03-23 18:12:04.330] [INFO] channels - /r/littlespace: #helpers: : Thank youuu +[2017-03-23 18:12:04.831] [INFO] channels - /r/littlespace: #general: : Hi all +[2017-03-23 18:12:07.324] [INFO] channels - /r/littlespace: #helpers: : _pat pat pat_ +[2017-03-23 18:12:24.969] [INFO] channels - /r/littlespace: #helpers: : sorry, I'm in class! +[2017-03-23 18:12:25.591] [INFO] channels - /r/littlespace: #helpers: : I'm going to disappear again just got out of dance 💃 and headed to Wally World +[2017-03-23 18:12:29.039] [INFO] channels - /r/littlespace: #helpers: : Is okkk +[2017-03-23 18:12:31.766] [INFO] channels - /r/littlespace: #helpers: : *pats <@234126386703499264> as well* +[2017-03-23 18:12:32.783] [INFO] channels - /r/littlespace: #helpers: : have fun!! +[2017-03-23 18:12:41.535] [INFO] channels - /r/littlespace: #helpers: : I WANNA GO TO WALLY WORLD +[2017-03-23 18:12:44.051] [INFO] channels - /r/littlespace: #helpers: : Oh yeah! I'm sticker hunting for letters (: +[2017-03-23 18:12:58.606] [INFO] channels - /r/littlespace: #helpers: : Ko, come work for me and I'll go shopping. +[2017-03-23 18:13:06.174] [INFO] channels - /r/littlespace: #general: : Hello pilot <@152402328845156352> +[2017-03-23 18:13:25.469] [INFO] channels - /r/littlespace: #general: : Tips captainess csp +[2017-03-23 18:13:31.748] [INFO] channels - /r/littlespace: #general: : Cap +[2017-03-23 18:13:44.900] [INFO] channels - /r/littlespace: #general: : **** Hiya +[2017-03-23 18:13:45.327] [INFO] channels - /r/littlespace: #general: : Woop woop guys +[2017-03-23 18:15:53.338] [INFO] channels - /r/littlespace: #helpers: : Actually, i think I'm gonna go get some Pho. +[2017-03-23 18:15:54.469] [INFO] channels - /r/littlespace: #general: : Hihi +[2017-03-23 18:16:09.082] [INFO] channels - /r/littlespace: #gaming: : I wanna play +[2017-03-23 18:16:55.105] [INFO] channels - /r/littlespace: #helpers: : Looooove 🍲 +[2017-03-23 18:18:22.873] [INFO] channels - /r/littlespace: #gaming: : Ugh +[2017-03-23 18:20:12.041] [INFO] channels - /r/littlespace: #general: : How are you today? +[2017-03-23 18:20:21.324] [INFO] channels - /r/littlespace: #helpers: : Actually, i got some General Tso's instead. It sounded better. +[2017-03-23 18:20:42.320] [INFO] channels - /r/littlespace: #general: : **** Tirede +[2017-03-23 18:20:44.250] [INFO] channels - /r/littlespace: #general: : **** -e +[2017-03-23 18:20:57.185] [INFO] channels - /r/littlespace: #vent: : So wait +[2017-03-23 18:21:17.827] [INFO] channels - /r/littlespace: #general: : I'm way tired only got like an hour of sleep +[2017-03-23 18:21:23.672] [INFO] channels - /r/littlespace: #vent: : If you drink then people hang out with you? +[2017-03-23 18:21:25.264] [INFO] channels - /r/littlespace: #general: : **** :( +[2017-03-23 18:21:39.607] [INFO] channels - /r/littlespace: #general: : It was a good reason though ☺ +[2017-03-23 18:22:04.539] [INFO] channels - /r/littlespace: #general: : Sorry you're tired queen +[2017-03-23 18:22:40.687] [INFO] channels - /r/littlespace: #helpers: : I've had a lot of Pho this month. Lol +[2017-03-23 18:22:51.005] [INFO] channels - /r/littlespace: #helpers: : Like three times a week. +[2017-03-23 18:23:18.411] [INFO] channels - /r/littlespace: #general: : Hello Rachel! +[2017-03-23 18:23:21.245] [INFO] channels - /r/littlespace: #general: : I'm ready to sit and draw but cooking +[2017-03-23 18:23:34.776] [INFO] channels - /r/littlespace: #general: : I'm a bit delayed, sorry. Lol +[2017-03-23 18:24:32.983] [INFO] channels - /r/littlespace: #general: : Hellooo +[2017-03-23 18:25:03.116] [INFO] channels - /r/littlespace: #helpers: : Every time i walk into this place, i swear they say that their special is human beef. +[2017-03-23 18:25:05.475] [INFO] channels - /r/littlespace: #general: : Hello. +[2017-03-23 18:25:11.657] [INFO] channels - /r/littlespace: #helpers: : Even though i know they mean Hunan. +[2017-03-23 18:25:28.079] [INFO] channels - /r/littlespace: #general: : Hi everyone +[2017-03-23 18:25:59.419] [INFO] channels - /r/littlespace: #general: : Im newly single +[2017-03-23 18:25:59.519] [INFO] channels - /r/littlespace: #vent: : Do you go to places where people drink and that's hanging out, or do your acquaintances not associate with non-drinkers? +[2017-03-23 18:26:05.053] [INFO] channels - /r/littlespace: #general: : :'^) +[2017-03-23 18:26:26.368] [INFO] channels - /r/littlespace: #general: : **** Hi Caudceus +[2017-03-23 18:27:25.406] [INFO] channels - /r/littlespace: #general: : I got another 7 hours of work +[2017-03-23 18:27:51.474] [INFO] channels - /r/littlespace: #general: : **** Aww I sowwy, Allacat +[2017-03-23 18:28:19.792] [INFO] channels - /r/littlespace: #general: : Aww we allacat +[2017-03-23 18:28:22.706] [INFO] channels - /r/littlespace: #general: : **** _is single too, but not newly_ +[2017-03-23 18:28:26.492] [INFO] channels - /r/littlespace: #general: : Are. You okay +[2017-03-23 18:29:35.456] [INFO] channels - /r/littlespace: #general: : Allacat, congratulations and/or condolences, as appropriate. +[2017-03-23 18:29:38.695] [INFO] channels - /r/littlespace: #general: : Hey LWQ. +[2017-03-23 18:29:41.427] [INFO] channels - /r/littlespace: #general: : It was my fault +[2017-03-23 18:29:50.887] [INFO] channels - /r/littlespace: #general: : Its okay +[2017-03-23 18:30:06.634] [INFO] channels - /r/littlespace: #general: : Ok (((hugs))) +[2017-03-23 18:30:14.131] [INFO] channels - /r/littlespace: #general: : Guess I should change my name.. +[2017-03-23 18:30:43.361] [INFO] channels - /r/littlespace: #helpers: : What's Wally World? +[2017-03-23 18:30:55.728] [INFO] channels - /r/littlespace: #general: : *pet pet* +[2017-03-23 18:30:57.621] [INFO] channels - /r/littlespace: #helpers: : I just left my place and ugh I'm going to school +[2017-03-23 18:30:58.550] [INFO] channels - /r/littlespace: #general: : it ok +[2017-03-23 18:31:00.746] [INFO] channels - /r/littlespace: #general: : I'm going to cry a bit, bye everyone sorry to sad in general and not vent +[2017-03-23 18:31:24.607] [INFO] channels - /r/littlespace: #helpers: : The block that I just walked past smells like pee +[2017-03-23 18:31:52.415] [INFO] channels - /r/littlespace: #general: : You can talk if you want +[2017-03-23 18:32:10.232] [INFO] channels - /r/littlespace: #general: : **** Please talk to us/vent +[2017-03-23 18:32:25.890] [INFO] channels - /r/littlespace: #general: : That's what we're here for. +[2017-03-23 18:32:33.612] [INFO] channels - /r/littlespace: #general: : Yeah please do. Don't bottle sad things up in your heart! +[2017-03-23 18:32:52.634] [INFO] channels - /r/littlespace: #general: : **** _nods_ +[2017-03-23 18:33:29.694] [INFO] channels - /r/littlespace: #general: : *Hugs Allacat* +[2017-03-23 18:33:55.635] [INFO] channels - /r/littlespace: #general: : **** _sighs_ +[2017-03-23 18:34:47.847] [INFO] channels - /r/littlespace: #vent: : All they do is drink +[2017-03-23 18:34:49.720] [INFO] channels - /r/littlespace: #general: : **** It's such a lovely say out +[2017-03-23 18:34:52.783] [INFO] channels - /r/littlespace: #general: : **** day too +[2017-03-23 18:34:54.140] [INFO] channels - /r/littlespace: #general: : **** hehehe +[2017-03-23 18:34:54.240] [INFO] channels - /r/littlespace: #general: : But of course, if you don't want to talk, it's ok. 💛💙💜 just know that we're all here for you, okay? <@212027510131523584> *hugs* +[2017-03-23 18:35:05.217] [INFO] channels - /r/littlespace: #vent: : I don't want to hang out at bars with a bunch of drunk people +[2017-03-23 18:35:10.216] [INFO] channels - /r/littlespace: #vent: : And they don't want to do other things +[2017-03-23 18:36:02.823] [INFO] channels - /r/littlespace: #general: : **** _nods again_ +[2017-03-23 18:36:10.913] [INFO] channels - /r/littlespace: #general: : ❤ *hugs you all* thanks everyone +[2017-03-23 18:36:15.778] [INFO] channels - /r/littlespace: #vent: : They don't sound like a lot of fun then. +[2017-03-23 18:36:22.244] [INFO] channels - /r/littlespace: #general: : It means a lot, really. +[2017-03-23 18:36:33.984] [INFO] channels - /r/littlespace: #general: : **** Hey I gots a question +[2017-03-23 18:36:41.759] [INFO] channels - /r/littlespace: #vent: : Have you tried video games? I have met some amazing people through some exquisitely nerdy pursuits. Not sure what you're into. +[2017-03-23 18:37:02.380] [INFO] channels - /r/littlespace: #general: : Question for a particular person, or for the room? +[2017-03-23 18:37:02.954] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> +[2017-03-23 18:37:04.907] [INFO] channels - /r/littlespace: #helpers: : .ud Wally World +[2017-03-23 18:37:10.209] [INFO] channels - /r/littlespace: #general: : **** The room +[2017-03-23 18:37:14.259] [INFO] channels - /r/littlespace: #helpers: : Wow, uberbot is unreliable today +[2017-03-23 18:37:18.594] [INFO] channels - /r/littlespace: #helpers: : .ud Wally World +[2017-03-23 18:37:37.968] [INFO] channels - /r/littlespace: #helpers: : https://www.urbandictionary.com/define.php?term=Wally%20world +[2017-03-23 18:37:51.604] [INFO] channels - /r/littlespace: #helpers: : warbot199 never fails +[2017-03-23 18:38:07.466] [INFO] channels - /r/littlespace: #general: : **** How do I configure discord? +[2017-03-23 18:38:10.321] [INFO] channels - /r/littlespace: #vent: : Not a big video game person. I used to play some but kinda lost interest. I sorta wish I could get back into it but I worry I'd get too sucked in and spend way more time playing than I ought to +[2017-03-23 18:39:13.834] [INFO] channels - /r/littlespace: #general: : I begin by deciding which sort of discord I wish to foment. A coup? General anarchy? Lack of faith in the local currency? My goals dictate how I +[2017-03-23 18:39:17.163] [INFO] channels - /r/littlespace: #general: : ...you meant the app. +[2017-03-23 18:39:40.177] [INFO] channels - /r/littlespace: #general: : **** _giggles_ +[2017-03-23 18:39:56.111] [INFO] channels - /r/littlespace: #general: : **** Yes, the app. Ya silly. +[2017-03-23 18:40:05.219] [INFO] channels - /r/littlespace: #vent: : Understandable. If that's a danger, diving back in isn't the best idea. +[2017-03-23 18:40:20.309] [INFO] channels - /r/littlespace: #general: : Teehee. +[2017-03-23 18:40:23.560] [INFO] channels - /r/littlespace: #helpers: : Oh. That makes sense +[2017-03-23 18:40:47.501] [INFO] channels - /r/littlespace: #general: : **** _hands Cauceus a sword for his discord_ +[2017-03-23 18:41:13.661] [INFO] channels - /r/littlespace: #vent: : Dawww +[2017-03-23 18:41:48.551] [INFO] channels - /r/littlespace: #general: : **** I was thinking of getting it on my laptop but last time someone made fun of me and upset me cause I couldn't figure it out. :( +[2017-03-23 18:41:51.768] [INFO] channels - /r/littlespace: #general: : Yay food +[2017-03-23 18:42:04.100] [INFO] channels - /r/littlespace: #vent: : I rarely have time to do anything I like anymore and now that I have a little bit of time I have writer and artist block (and internet block even TT^TT) +[2017-03-23 18:42:34.997] [INFO] channels - /r/littlespace: #general: : You're considering downloading it? The desktop app, or the web app? +[2017-03-23 18:42:48.798] [INFO] channels - /r/littlespace: #general: : Paging <@200944723035160576> the king bot over here +[2017-03-23 18:43:13.684] [INFO] channels - /r/littlespace: #vent: : Oh no! Sorry <@283700490817241088> +[2017-03-23 18:43:21.266] [INFO] channels - /r/littlespace: #general: : **** Uhhhhhhhhhhhhhm I dunno. :/ +[2017-03-23 18:43:33.500] [INFO] channels - /r/littlespace: #vent: : it's okay +[2017-03-23 18:45:32.080] [INFO] channels - /r/littlespace: #general: : **** _plops in the corne_ +[2017-03-23 18:45:35.098] [INFO] channels - /r/littlespace: #general: : **** corner too +[2017-03-23 18:46:22.649] [INFO] channels - /r/littlespace: #general: : Do you have an account yet? +[2017-03-23 18:46:33.615] [INFO] channels - /r/littlespace: #vent: : I'm sorry to hear about your stitch +[2017-03-23 18:46:39.713] [INFO] channels - /r/littlespace: #general: : I *think* I can walk you through the basics if you want +[2017-03-23 18:48:02.544] [INFO] channels - /r/littlespace: #general: : **** No. +[2017-03-23 18:48:35.061] [INFO] channels - /r/littlespace: #general: : **** Hold on pwease +[2017-03-23 18:49:14.385] [INFO] channels - /r/littlespace: #general: : **** I am loading it on my laptop +[2017-03-23 18:51:51.129] [INFO] channels - /r/littlespace: #general: : Uhm I think I did it? +[2017-03-23 18:52:38.108] [INFO] channels - /r/littlespace: #general: : There's a Baymax bot? So cute +[2017-03-23 18:53:03.430] [INFO] channels - /r/littlespace: #general: : **** Ewwwwwwww yellow +[2017-03-23 18:53:05.301] [INFO] channels - /r/littlespace: #general: : **** grossssssssssssss +[2017-03-23 18:53:58.874] [INFO] channels - /r/littlespace: #general: : **** No yellow. :'( +[2017-03-23 18:54:00.468] [INFO] channels - /r/littlespace: #general: : <@294618642119917568> There's a baymax bot that I'm still in the process of writing. I haven't opened it up to our room yet. +[2017-03-23 18:54:17.665] [INFO] channels - /r/littlespace: #general: : **** Oh I saw his name +[2017-03-23 18:54:25.892] [INFO] channels - /r/littlespace: #general: : **** _doesn't want icky yellow_ +[2017-03-23 18:54:47.742] [INFO] channels - /r/littlespace: #general: : :( +[2017-03-23 18:54:54.969] [INFO] channels - /r/littlespace: #general: : **** Why sad? +[2017-03-23 18:55:02.952] [INFO] channels - /r/littlespace: #general: : Oh, I wish I had control over those colors. +[2017-03-23 18:55:16.136] [INFO] channels - /r/littlespace: #general: : **** Ohhhhhhhh. hehehehe. No worries +[2017-03-23 18:55:19.289] [INFO] channels - /r/littlespace: #general: : **** I will use irc +[2017-03-23 18:55:37.850] [INFO] channels - /r/littlespace: #general: : Actually if I close Irc, I wont see the yellow +[2017-03-23 18:55:44.510] [INFO] channels - /r/littlespace: #general: : just bounce between them like I do! +[2017-03-23 18:55:52.872] [INFO] channels - /r/littlespace: #general: : _giggles_ +[2017-03-23 18:56:00.594] [INFO] channels - /r/littlespace: #general: : Omg yay hello!!! <@294618642119917568> +[2017-03-23 18:56:08.063] [INFO] channels - /r/littlespace: #general: : HI MEEP +[2017-03-23 18:56:16.595] [INFO] channels - /r/littlespace: #general: : Hiya +[2017-03-23 18:56:22.884] [INFO] channels - /r/littlespace: #general: : HI WAR MY DARLING BESTIE ❤️ (because <@274917231778070528> isn't here) +[2017-03-23 18:56:31.650] [INFO] channels - /r/littlespace: #general: : _laughs_ +[2017-03-23 18:56:32.710] [INFO] channels - /r/littlespace: #general: : you can have two besties. D: +[2017-03-23 18:56:37.168] [INFO] channels - /r/littlespace: #general: : ❤ +[2017-03-23 18:56:48.905] [INFO] channels - /r/littlespace: #general: : Okay. Tell that to my irl friends! They're bitching about how I should only have 1 bestie +[2017-03-23 18:56:58.409] [INFO] channels - /r/littlespace: #general: : And I'm like yeah guys fine whatever *flicks hair* +[2017-03-23 18:57:10.595] [INFO] channels - /r/littlespace: #general: : "I respect your opinion, even though it's wrong." +[2017-03-23 18:57:12.702] [INFO] channels - /r/littlespace: #general: : Just say that. +[2017-03-23 18:57:12.918] [INFO] channels - /r/littlespace: #general: : _has no besties. :'(_ +[2017-03-23 18:57:20.849] [INFO] channels - /r/littlespace: #general: : I *think* I've talked to you on Reddit, queen! +[2017-03-23 18:57:25.164] [INFO] channels - /r/littlespace: #general: : <:Stitch:269314274327789569> OMGGGGGGGGGGGGGG +[2017-03-23 18:57:25.633] [INFO] channels - /r/littlespace: #general: : NO YOU CAN BE MY BESTIE TOO +[2017-03-23 18:57:35.828] [INFO] channels - /r/littlespace: #general: : you can be mine toooo! +[2017-03-23 18:57:38.162] [INFO] channels - /r/littlespace: #general: : <:PusheenParty:293182971622457355> +[2017-03-23 18:57:39.686] [INFO] channels - /r/littlespace: #general: : Have you? Probably. I am on there too +[2017-03-23 18:57:48.840] [INFO] channels - /r/littlespace: #general: : Yay besties +[2017-03-23 18:57:57.826] [INFO] channels - /r/littlespace: #general: : I'm u/strawberrynyan on Reddit! +[2017-03-23 18:58:03.480] [INFO] channels - /r/littlespace: #general: : Sooo? I think so. 😅 +[2017-03-23 18:58:06.865] [INFO] channels - /r/littlespace: #general: : OH! Yeah you pmed me +[2017-03-23 18:58:10.989] [INFO] channels - /r/littlespace: #general: : Yes!!! +[2017-03-23 18:58:11.482] [INFO] channels - /r/littlespace: #general: : I got that game +[2017-03-23 18:58:17.679] [INFO] channels - /r/littlespace: #general: : YAY!! I hope you'll like it +[2017-03-23 18:58:20.883] [INFO] channels - /r/littlespace: #general: : It's cute but slow +[2017-03-23 18:58:26.310] [INFO] channels - /r/littlespace: #general: : Yeah, it gets really slow +[2017-03-23 18:58:33.315] [INFO] channels - /r/littlespace: #general: : *and frustrating* +[2017-03-23 18:58:45.838] [INFO] channels - /r/littlespace: #general: : I gotta unlock stuff so I can pickup more eggs at once instead of one at a time +[2017-03-23 18:58:58.068] [INFO] channels - /r/littlespace: #general: : Have you managed to collect 25 gems yet for that? +[2017-03-23 18:59:16.375] [INFO] channels - /r/littlespace: #general: : No +[2017-03-23 18:59:25.050] [INFO] channels - /r/littlespace: #general: : It'll be definitely easier if you have it! And there are codes, but I'll help you to find it when I'm on my laptop in school later! +[2017-03-23 18:59:28.813] [INFO] channels - /r/littlespace: #general: : I only have eggs +[2017-03-23 18:59:47.479] [INFO] channels - /r/littlespace: #general: : Later +[2017-03-23 18:59:50.001] [INFO] channels - /r/littlespace: #general: : Hehee +[2017-03-23 19:00:10.826] [INFO] channels - /r/littlespace: #general: : i did!! +[2017-03-23 19:00:22.655] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> +[2017-03-23 19:00:23.442] [INFO] channels - /r/littlespace: #general: : i got the 20 gemmies so i have two slots +[2017-03-23 19:00:36.640] [INFO] channels - /r/littlespace: #helpers: : What's that? +[2017-03-23 19:00:42.801] [INFO] channels - /r/littlespace: #helpers: : Kung bao chicken? +[2017-03-23 19:00:46.388] [INFO] channels - /r/littlespace: #helpers: : "General Tso's Chicken" +[2017-03-23 19:00:53.122] [INFO] channels - /r/littlespace: #helpers: : 😮 +[2017-03-23 19:01:01.502] [INFO] channels - /r/littlespace: #helpers: : I've been hearing that a lot. I've never tried it, I think +[2017-03-23 19:01:13.586] [INFO] channels - /r/littlespace: #helpers: : You're missing out on the good things in life. +[2017-03-23 19:01:17.398] [INFO] channels - /r/littlespace: #general: : I downloaded gold miner though. lol +[2017-03-23 19:01:50.389] [INFO] channels - /r/littlespace: #helpers: : There's actually an American Chinese restaurant somewhere near my cg's house. I might go check it out when I feel like having some not that authentic Chinese food +[2017-03-23 19:02:06.189] [INFO] channels - /r/littlespace: #helpers: : Don't crush my dreams. +[2017-03-23 19:02:09.463] [INFO] channels - /r/littlespace: #helpers: : i feel like I'm in china right now +[2017-03-23 19:02:17.686] [INFO] channels - /r/littlespace: #general: : What's gold miner? I just recently downloaded kleptocats because my friend kept bugging me to do so +[2017-03-23 19:02:22.622] [INFO] channels - /r/littlespace: #helpers: : Oh my god +[2017-03-23 19:02:24.404] [INFO] channels - /r/littlespace: #helpers: : HAHAHAHAH +[2017-03-23 19:02:32.315] [INFO] channels - /r/littlespace: #helpers: : 你好! +[2017-03-23 19:02:46.307] [INFO] channels - /r/littlespace: #helpers: : I can do a pretty decent PRC accent' +[2017-03-23 19:02:50.990] [INFO] channels - /r/littlespace: #helpers: : And a Taiwanese OneNote +[2017-03-23 19:02:57.874] [INFO] channels - /r/littlespace: #general: : it's a game that you try and collect gold +[2017-03-23 19:03:09.428] [INFO] channels - /r/littlespace: #general: : it gets so frustrating though. Blech +[2017-03-23 19:03:19.285] [INFO] channels - /r/littlespace: #helpers: : So, strange question. +[2017-03-23 19:03:40.356] [INFO] channels - /r/littlespace: #general: : Randomly singing about flamingos to my bf +[2017-03-23 19:03:43.951] [INFO] channels - /r/littlespace: #general: : Cause why not? xD +[2017-03-23 19:03:44.128] [INFO] channels - /r/littlespace: #helpers: : Do you feel that American's have an accent? + +Kinda like we feel everyone that isn't from here has one? +[2017-03-23 19:03:48.401] [INFO] channels - /r/littlespace: #helpers: : Yes +[2017-03-23 19:04:01.853] [INFO] channels - /r/littlespace: #helpers: : Of course, there's different types of accents. I have a mixture between a Missouri accent and a southern accent. +[2017-03-23 19:04:17.888] [INFO] channels - /r/littlespace: #helpers: : Sorry I get frustrated when my American professors speak. It takes a while for me to understand accents generally so I get really really frustrated when I can't pick it up +[2017-03-23 19:04:36.312] [INFO] channels - /r/littlespace: #helpers: : I've never heard a Missouri accent before, I think +[2017-03-23 19:04:41.011] [INFO] channels - /r/littlespace: #general: : Nothing wrong with that +[2017-03-23 19:04:46.297] [INFO] channels - /r/littlespace: #helpers: : Midwesterners don't really have accents. +[2017-03-23 19:04:51.127] [INFO] channels - /r/littlespace: #helpers: : I think everyone has accents, really +[2017-03-23 19:05:10.801] [INFO] channels - /r/littlespace: #helpers: : Because we're used to listening to how people speak around us and they're very unique +[2017-03-23 19:05:12.710] [INFO] channels - /r/littlespace: #helpers: : So.. yeah +[2017-03-23 19:05:14.813] [INFO] channels - /r/littlespace: #general: : Courage! +[2017-03-23 19:05:35.528] [INFO] channels - /r/littlespace: #helpers: : I think the most annoying thing around here, is instead of "wash" it's "worsh" +[2017-03-23 19:05:43.841] [INFO] channels - /r/littlespace: #helpers: : Instead of Missouri, it's Missourah +[2017-03-23 19:05:46.065] [INFO] channels - /r/littlespace: #general: : Yes, he is one of my favorites. :3 +[2017-03-23 19:05:57.351] [INFO] channels - /r/littlespace: #helpers: : That's really interesting +[2017-03-23 19:05:57.686] [INFO] channels - /r/littlespace: #helpers: : stuff like that. +[2017-03-23 19:06:21.049] [INFO] channels - /r/littlespace: #helpers: : I think a lot of Singaporeans, me included, can't really pronounce "tree" properly, and we say "three" instead LOL +[2017-03-23 19:06:29.146] [INFO] channels - /r/littlespace: #helpers: : It's so fucking funny and sad when that happens +[2017-03-23 19:06:37.633] [INFO] channels - /r/littlespace: #helpers: : I must hear that. :P +[2017-03-23 19:06:54.758] [INFO] channels - /r/littlespace: #helpers: : but then again, all accents are adorable. +[2017-03-23 19:07:11.983] [INFO] channels - /r/littlespace: #helpers: : Idk I think my singaporean accent isn't very strong. But when I speak in mandarin..... all my PRC china and Taiwanese accents come out akdhshalfhj +[2017-03-23 19:07:28.728] [INFO] channels - /r/littlespace: #helpers: : how many languages do you know? +[2017-03-23 19:07:44.307] [INFO] channels - /r/littlespace: #general: : i wuvs hims +[2017-03-23 19:07:57.409] [INFO] channels - /r/littlespace: #general: : random blurb-omg this naruto episode is gonna make me cry +[2017-03-23 19:07:58.886] [INFO] channels - /r/littlespace: #helpers: : I know English and Chinese. I know a few Chinese dialects, like Teochew and Hokkien +[2017-03-23 19:08:18.965] [INFO] channels - /r/littlespace: #general: : Yeah, I wish they had more seasons of him on Netflix +[2017-03-23 19:08:26.383] [INFO] channels - /r/littlespace: #helpers: : I tried learning Vietnamese, but I suck at it, really. I can type and write them, but my speaking is awful. +[2017-03-23 19:08:32.679] [INFO] channels - /r/littlespace: #general: : daddy is such a butt omg +[2017-03-23 19:08:38.531] [INFO] channels - /r/littlespace: #helpers: : Out of curiousity, do they teach English in school? If so, do they teach you how to *speak* it, as well as write it? + +The reason I ask is because my coworker is Russian, and he said they teach you english there, but only how to read/write it. +[2017-03-23 19:08:44.060] [INFO] channels - /r/littlespace: #helpers: : Oh yes, definitely +[2017-03-23 19:08:48.281] [INFO] channels - /r/littlespace: #general: : i told him "I blew you a kiss, it should be there soon! Make sure to catch it!" +[2017-03-23 19:08:48.931] [INFO] channels - /r/littlespace: #helpers: : English's our first language here +[2017-03-23 19:08:49.346] [INFO] channels - /r/littlespace: #helpers: : Something about their accents being too heavy to actually speak it. +[2017-03-23 19:09:00.794] [INFO] channels - /r/littlespace: #general: : and when he told me he caught it, i asked him what he did with +[2017-03-23 19:09:21.608] [INFO] channels - /r/littlespace: #helpers: : Interesting! +[2017-03-23 19:09:24.505] [INFO] channels - /r/littlespace: #general: : and he said "Tapped it on my weenie" +[2017-03-23 19:09:29.485] [INFO] channels - /r/littlespace: #helpers: : I'm very strong with English. The reason why they made that so instead of Malay, or Chinese, is to level the playing field amongst the different ethnicities when learning/working +[2017-03-23 19:09:35.805] [INFO] channels - /r/littlespace: #general: : Well.. +[2017-03-23 19:09:36.410] [INFO] channels - /r/littlespace: #general: : lol +[2017-03-23 19:09:36.899] [INFO] channels - /r/littlespace: #general: : ruining my cutesy romance stuff +[2017-03-23 19:09:52.318] [INFO] channels - /r/littlespace: #helpers: : That makes sense. +[2017-03-23 19:10:00.862] [INFO] channels - /r/littlespace: #helpers: : English is the universal language anyway. +[2017-03-23 19:10:35.280] [INFO] channels - /r/littlespace: #helpers: : My Chinese is just plain fucking awful. It's decent? But I've not really exactly read Chinese in a while, so I'm just terrible at that. I can still speak fluently (I grow up in a Mandarin/Teochew speaking family), but I just can't read advanced Chinese without flipping out for my dictionary *is a failure* +[2017-03-23 19:10:52.710] [INFO] channels - /r/littlespace: #helpers: : Yeah! +[2017-03-23 19:11:09.690] [INFO] channels - /r/littlespace: #general: : Wow. That's... something. +[2017-03-23 19:11:25.616] [INFO] channels - /r/littlespace: #helpers: : That's interesting! I've always been interested in learning other cultures. I've always wanted to travel out of the US. +[2017-03-23 19:11:36.665] [INFO] channels - /r/littlespace: #helpers: : Specifically, I want to go to Britain and Germany. +[2017-03-23 19:11:54.057] [INFO] channels - /r/littlespace: #helpers: : Ah!!! My caregiver is good in German +[2017-03-23 19:12:12.377] [INFO] channels - /r/littlespace: #helpers: : my ancestors were german on one side, british on the other. +[2017-03-23 19:12:15.711] [INFO] channels - /r/littlespace: #helpers: : He learnt German in Uni, and he wanted to move to Germany to work (he's a chemical engineer), but the job market is bleh nowadays +[2017-03-23 19:12:21.505] [INFO] channels - /r/littlespace: #helpers: : That's interesting!! Multiculturalism! +[2017-03-23 19:12:25.897] [INFO] channels - /r/littlespace: #general: : _giggles_ +[2017-03-23 19:12:42.323] [INFO] channels - /r/littlespace: #general: : Is that your puppy? +[2017-03-23 19:12:57.804] [INFO] channels - /r/littlespace: #general: : it's not out of the ordinary for him but still +[2017-03-23 19:13:00.584] [INFO] channels - /r/littlespace: #general: : daddy pls +[2017-03-23 19:13:15.734] [INFO] channels - /r/littlespace: #helpers: : My dad and I suspect that my grandma's bloodline might be *tainted* with British blood or something, because I've got very distinct western features. ^shrug* I don't really care much for it though +[2017-03-23 19:13:33.157] [INFO] channels - /r/littlespace: #helpers: : I just got teased a lot for not looking Asian enough, or rather, singaporean Chinese like +[2017-03-23 19:13:50.729] [INFO] channels - /r/littlespace: #helpers: : <@!273692001357135872> joined the server. +[2017-03-23 19:14:02.389] [INFO] channels - /r/littlespace: #helpers: : I don't see a reason to tease, you're really pretty. *shrug* +[2017-03-23 19:14:09.085] [INFO] channels - /r/littlespace: #helpers: : and strangers actually thought that I went for plastic surgery because I look like I'm a typical K-pop star *shrug* +[2017-03-23 19:14:13.769] [INFO] channels - /r/littlespace: #general: : That's typical? +[2017-03-23 19:14:13.847] [INFO] channels - /r/littlespace: #helpers: : a person 🍩#5735 left. +[2017-03-23 19:14:15.703] [INFO] channels - /r/littlespace: #helpers: : Ahhh, thank you 💛 +[2017-03-23 19:14:16.788] [INFO] channels - /r/littlespace: #general: : _laughs_ +[2017-03-23 19:14:22.347] [INFO] channels - /r/littlespace: #helpers: : NO I WANTED TO WELCOME THEM +[2017-03-23 19:14:27.002] [INFO] channels - /r/littlespace: #helpers: : TOO BAD +[2017-03-23 19:14:31.101] [INFO] channels - /r/littlespace: #helpers: : You weren't fast enough +[2017-03-23 19:14:37.131] [INFO] channels - /r/littlespace: #helpers: : IM ON MOBILE +[2017-03-23 19:14:41.746] [INFO] channels - /r/littlespace: #helpers: : STUCK IN HEAVY TRAFFIC +[2017-03-23 19:14:42.334] [INFO] channels - /r/littlespace: #helpers: : Excuses. :) ❤ +[2017-03-23 19:14:46.718] [INFO] channels - /r/littlespace: #helpers: : ❤️ +[2017-03-23 19:14:54.074] [INFO] channels - /r/littlespace: #general: : yeah my daddy's a bit of a perv +[2017-03-23 19:14:59.721] [INFO] channels - /r/littlespace: #general: : but so am i so it works +[2017-03-23 19:15:02.868] [INFO] channels - /r/littlespace: #helpers: : But yeah, a typical singaporean would look really tan. Like my cg. And my friends +[2017-03-23 19:15:19.072] [INFO] channels - /r/littlespace: #general: : and he's very sweet when the situation calls for it +[2017-03-23 19:15:30.768] [INFO] channels - /r/littlespace: #general: : i knew i was in love with him when i started crying in front of him once +[2017-03-23 19:15:42.990] [INFO] channels - /r/littlespace: #helpers: : Let me stalk my Facebook to show you +[2017-03-23 19:16:03.398] [INFO] channels - /r/littlespace: #general: : What kind of puppy is it <@286333276849831946> +[2017-03-23 19:16:22.221] [INFO] channels - /r/littlespace: #general: : Oh, me? Chihuahua mousedog. +[2017-03-23 19:16:29.806] [INFO] channels - /r/littlespace: #general: : and he dropped everything, picked me up and put me in his lap, kissed away every single tear, worried away at me and held me, then asked me which movie i wanted to watch +[2017-03-23 19:16:34.684] [INFO] channels - /r/littlespace: #general: : Yes you +[2017-03-23 19:16:37.929] [INFO] channels - /r/littlespace: #general: : we watched kikis delivery service +[2017-03-23 19:16:48.699] [INFO] channels - /r/littlespace: #general: : i was like +[2017-03-23 19:16:53.220] [INFO] channels - /r/littlespace: #general: : I'm odd when it comes to sexual stuff, most of the time I'm quite innocent and get really shy about sexual stuff, but then, can like, flip a switch and...yeah xD +[2017-03-23 19:16:59.930] [INFO] channels - /r/littlespace: #general: : actual heart eyes +[2017-03-23 19:17:00.129] [INFO] channels - /r/littlespace: #general: : Oh, sorry, I didnt mean to interrupt +[2017-03-23 19:17:00.396] [INFO] channels - /r/littlespace: #general: : That's adorable tho xD +[2017-03-23 19:17:12.443] [INFO] channels - /r/littlespace: #general: : yeah i'm the same +[2017-03-23 19:17:36.738] [INFO] channels - /r/littlespace: #general: : _goes to the corner and sits_ +[2017-03-23 19:17:46.479] [INFO] channels - /r/littlespace: #helpers: : I don't think you can technically stalk your own facebook. +[2017-03-23 19:18:34.949] [INFO] channels - /r/littlespace: #general: : Amazing to see "he was nice to me!" as this groundbreaking thing. Sort of sad. +[2017-03-23 19:18:46.917] [INFO] channels - /r/littlespace: #general: : no that's not it though +[2017-03-23 19:18:55.459] [INFO] channels - /r/littlespace: #general: : he could've just been like "what's wrong" +[2017-03-23 19:19:04.726] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 19:19:09.794] [INFO] channels - /r/littlespace: #helpers: : I was 18 here!!!!! LOL +[2017-03-23 19:19:10.708] [INFO] channels - /r/littlespace: #general: : but he was so so loving and caring and it was just +[2017-03-23 19:19:13.675] [INFO] channels - /r/littlespace: #general: : really nice +[2017-03-23 19:19:25.694] [INFO] channels - /r/littlespace: #helpers: : Yeah, palest, weirdest 🌸 +[2017-03-23 19:19:30.144] [INFO] channels - /r/littlespace: #general: : Yeah, nice. +[2017-03-23 19:19:35.943] [INFO] channels - /r/littlespace: #helpers: : they all look the same shade to me +[2017-03-23 19:19:37.935] [INFO] channels - /r/littlespace: #helpers: : the shade of asian +[2017-03-23 19:19:39.395] [INFO] channels - /r/littlespace: #helpers: : Holy shit where were my eyebrows?! +[2017-03-23 19:19:42.464] [INFO] channels - /r/littlespace: #helpers: : HAHAHAHAHA +[2017-03-23 19:19:48.009] [INFO] channels - /r/littlespace: #general: : A casual "what's wrong" is pretty messed up. +[2017-03-23 19:19:58.920] [INFO] channels - /r/littlespace: #helpers: : Yeah but, I'm really pale. I stand out in crowds because I'm.... *fucking pale* +[2017-03-23 19:20:08.370] [INFO] channels - /r/littlespace: #helpers: : didn't get smacked for racist jokes, win! +[2017-03-23 19:20:47.245] [INFO] channels - /r/littlespace: #helpers: : you don't really seem like the type to get offended by things though +[2017-03-23 19:20:47.687] [INFO] channels - /r/littlespace: #general: : shhhh +[2017-03-23 19:20:55.408] [INFO] channels - /r/littlespace: #general: : *puts my finger on your lips* +[2017-03-23 19:21:01.434] [INFO] channels - /r/littlespace: #general: : let me feel loved +[2017-03-23 19:21:25.456] [INFO] channels - /r/littlespace: #general: : You got it. +[2017-03-23 19:21:29.043] [INFO] channels - /r/littlespace: #general: : LOL +[2017-03-23 19:21:46.680] [INFO] channels - /r/littlespace: #helpers: : I don't really give a shit about racist jokes, honestly +[2017-03-23 19:21:51.160] [INFO] channels - /r/littlespace: #helpers: : It comes with the Chinese privilege +[2017-03-23 19:21:57.004] [INFO] channels - /r/littlespace: #helpers: : Same as your white privilege in the US +[2017-03-23 19:21:58.065] [INFO] channels - /r/littlespace: #helpers: : LOL +[2017-03-23 19:22:09.203] [INFO] channels - /r/littlespace: #helpers: : I make the racist jokes instead *please don't kill me* +[2017-03-23 19:22:10.108] [INFO] channels - /r/littlespace: #general: : _hums to herself_ +[2017-03-23 19:22:21.650] [INFO] channels - /r/littlespace: #helpers: : i just don't get offended, *shrug* like, i'll make a joke... i told Ko and Blue one last night... +[2017-03-23 19:22:25.035] [INFO] channels - /r/littlespace: #helpers: : and it was terrible. +[2017-03-23 19:22:28.300] [INFO] channels - /r/littlespace: #helpers: : No but really, racist jokes bounce off a lot of us in Singapore bc it isn't that bad. +[2017-03-23 19:22:35.176] [INFO] channels - /r/littlespace: #general: : I remember the first time i cried over discord to a friend of mine, embarrassment was real D; +[2017-03-23 19:22:38.023] [INFO] channels - /r/littlespace: #helpers: : I get offended by like, lame and stupid things though +[2017-03-23 19:23:05.860] [INFO] channels - /r/littlespace: #helpers: : A Islamic guy walks into a Florida bar... what does he order? "Shots for everyone." + +It's a terrible joke. My buddy found it on r/jokes... lol +[2017-03-23 19:23:16.162] [INFO] channels - /r/littlespace: #helpers: : Yikes. That's bad +[2017-03-23 19:23:18.841] [INFO] channels - /r/littlespace: #helpers: : Like a funny bad +[2017-03-23 19:23:19.039] [INFO] channels - /r/littlespace: #helpers: : It is. +[2017-03-23 19:23:29.773] [INFO] channels - /r/littlespace: #general: : lalalalala +[2017-03-23 19:23:30.895] [INFO] channels - /r/littlespace: #general: : maybe it was meaningful to me because it was my first relationship after an emotionally abusive one with a dude that would go out of his way to make me cry just because he had fun doing it +[2017-03-23 19:23:37.564] [INFO] channels - /r/littlespace: #helpers: : Idk, but islamophobia is awful +[2017-03-23 19:23:39.431] [INFO] channels - /r/littlespace: #general: : and rather than being the cause, he was the cure +[2017-03-23 19:23:45.057] [INFO] channels - /r/littlespace: #general: : it was very important to me +[2017-03-23 19:23:53.992] [INFO] channels - /r/littlespace: #helpers: : And.. of course, religious radicalisation is fucking disgusting +[2017-03-23 19:23:55.223] [INFO] channels - /r/littlespace: #general: : so shhh +[2017-03-23 19:23:56.569] [INFO] channels - /r/littlespace: #general: : _looks sad_ +[2017-03-23 19:24:09.983] [INFO] channels - /r/littlespace: #helpers: : what does sex and the twin towers have in common? +[2017-03-23 19:24:11.491] [INFO] channels - /r/littlespace: #general: : it was very very important not just him being nice +[2017-03-23 19:24:13.753] [INFO] channels - /r/littlespace: #general: : Emotionally abusive is no bueno. +[2017-03-23 19:24:21.693] [INFO] channels - /r/littlespace: #helpers: : there used to be two and now its a touchy subject +[2017-03-23 19:24:50.245] [INFO] channels - /r/littlespace: #general: : This whole convo is just reminding me how jaded ive gotten since i left the discord lol +[2017-03-23 19:25:10.430] [INFO] channels - /r/littlespace: #helpers: : I don't like it. There's an issue recently in Singapore that blew up because an Islamic religious teacher went to preach about something along the lines of going up in arms and triumphing over Christians and Jews. It's not nice, and someone posted a video of the religious teacher preaching that in the mosque +[2017-03-23 19:25:26.103] [INFO] channels - /r/littlespace: #general: : IS YOUR ICON FROM THE ROCK COCKS +[2017-03-23 19:25:43.176] [INFO] channels - /r/littlespace: #helpers: : What made it worse is.... my professor who's teaching Malay studies brought it up to Facebook and said that the people calling for the dismissal of that religious teacher "mindless idiots" +[2017-03-23 19:25:45.929] [INFO] channels - /r/littlespace: #helpers: : Lol +[2017-03-23 19:25:55.594] [INFO] channels - /r/littlespace: #general: : <@142051746716450816> !! +[2017-03-23 19:26:02.070] [INFO] channels - /r/littlespace: #general: : yeeee +[2017-03-23 19:26:08.902] [INFO] channels - /r/littlespace: #general: : Im basically Steg IRL +[2017-03-23 19:26:18.275] [INFO] channels - /r/littlespace: #general: : YOU ARE A DEAR FRAND NOW +[2017-03-23 19:26:19.223] [INFO] channels - /r/littlespace: #general: : _arches an eyebrow_ +[2017-03-23 19:26:29.197] [INFO] channels - /r/littlespace: #general: : i don't know anybody else who reads the rock cocks god bless +[2017-03-23 19:26:29.485] [INFO] channels - /r/littlespace: #helpers: : I mean, I don't have many religious believes. I am a Christian. But I haven't been to church in nearly 10 years, my dad kinda killed religion for me. +[2017-03-23 19:26:35.104] [INFO] channels - /r/littlespace: #helpers: : So essentially, my classes were cancelled, my professor's on suspension, he got hauled in for questioning by the police (talking shit about other religions is actually a crime in Singapore), and now that module's in shambles because none of us know what's going on now +[2017-03-23 19:26:49.844] [INFO] channels - /r/littlespace: #general: : Ive got the hair, the muscle, the lil bit of chub over it, and suria is dream girl hot damn +[2017-03-23 19:27:07.604] [INFO] channels - /r/littlespace: #helpers: : beliefs* +[2017-03-23 19:27:29.063] [INFO] channels - /r/littlespace: #general: : i looove Suria +[2017-03-23 19:27:39.685] [INFO] channels - /r/littlespace: #helpers: : Personally I don't give a shit about religion. I grew up a catholic. I only recently got back into the religion, like went for an Ash Wednesday service, and I've not went back to the church again. I just don't give a shit about other people's beliefs, but when they shit on someone else's beliefs to propagate their own, that's not right at all +[2017-03-23 19:27:41.037] [INFO] channels - /r/littlespace: #general: : i'm more like Sterlings secretary though +[2017-03-23 19:27:41.272] [INFO] channels - /r/littlespace: #general: : hey all finally home +[2017-03-23 19:27:51.958] [INFO] channels - /r/littlespace: #general: : Hiya phr34k +[2017-03-23 19:27:56.789] [INFO] channels - /r/littlespace: #general: : nice <@258861588486946816> +[2017-03-23 19:27:57.831] [INFO] channels - /r/littlespace: #helpers: : Oh my god that's a lot of *shit* permeating in that statement +[2017-03-23 19:27:58.065] [INFO] channels - /r/littlespace: #general: : One puppy found a home today +[2017-03-23 19:28:00.706] [INFO] channels - /r/littlespace: #general: : 2 more left +[2017-03-23 19:28:24.506] [INFO] channels - /r/littlespace: #helpers: : I just feel strongly for different things, but religion and race isn't something that I feel strongly for, for me to be up in arms about it +[2017-03-23 19:28:32.372] [INFO] channels - /r/littlespace: #helpers: : exactly +[2017-03-23 19:28:34.978] [INFO] channels - /r/littlespace: #helpers: : *come on I shitpost socialist memes on facebook* +[2017-03-23 19:28:38.967] [INFO] channels - /r/littlespace: #general: : _pokes <@286333276849831946> and then runs off giggling_ +[2017-03-23 19:29:03.231] [INFO] channels - /r/littlespace: #helpers: : example, i'd rather get up in arms about someone trying to take my guns away than someone complaining about my religion. +[2017-03-23 19:29:10.573] [INFO] channels - /r/littlespace: #helpers: : Like, anti-gun agenda is pushed so hard here. +[2017-03-23 19:29:23.313] [INFO] channels - /r/littlespace: #helpers: : but what they don't realise is that taking away the guns doesn't remove the crime. +[2017-03-23 19:29:34.153] [INFO] channels - /r/littlespace: #helpers: : Because people who commit crimes, don't have legal guns anyway. +[2017-03-23 19:29:44.626] [INFO] channels - /r/littlespace: #general: : I wish I could get past level 18 on this game +[2017-03-23 19:29:46.848] [INFO] channels - /r/littlespace: #helpers: : I mean, we don't have guns here. Gun legislation is actually pretty strict here +[2017-03-23 19:29:58.996] [INFO] channels - /r/littlespace: #helpers: : So I grew up not knowing gun privilege, y'know? But yeah +[2017-03-23 19:30:20.104] [INFO] channels - /r/littlespace: #helpers: : Right, but their argument is 'take them away, it'll reduce crime. Lets trust the police!' +[2017-03-23 19:30:27.086] [INFO] channels - /r/littlespace: #helpers: : I carry a gun because a cop is too heavy. +[2017-03-23 19:30:56.803] [INFO] channels - /r/littlespace: #helpers: : We do discuss about that issue in classes and all, and I'm naturally pacifist. I just don't think that they're gonna be able to solve the violent crime issue in the US because that's not the root cause you're solving. You're just taking away a means of committing violent crime +[2017-03-23 19:31:27.968] [INFO] channels - /r/littlespace: #helpers: : I rather you have stricter controls over gun possession than to remove getting guns legally immediately. It just doesn't make sense, and it'll create a larger black market +[2017-03-23 19:31:39.526] [INFO] channels - /r/littlespace: #helpers: : Just my little opinion on this as a non American +[2017-03-23 19:31:56.135] [INFO] channels - /r/littlespace: #helpers: : I mean, in Missouri, you're only required to pass a background check... +[2017-03-23 19:32:02.829] [INFO] channels - /r/littlespace: #helpers: : not even register them, which is fine with me +[2017-03-23 19:32:08.218] [INFO] channels - /r/littlespace: #helpers: : That's not strict enough lol but yeah +[2017-03-23 19:32:23.103] [INFO] channels - /r/littlespace: #helpers: : I mean I'm all for strict controls for the betterment of society, less violent crime and all +[2017-03-23 19:32:46.038] [INFO] channels - /r/littlespace: #helpers: : But who am I to say that this would be a better idea in America? Aka forefront of democracy, free speech and freedom? +[2017-03-23 19:33:02.214] [INFO] channels - /r/littlespace: #helpers: : Some things can't make sense when we look at the historical and political lenses +[2017-03-23 19:33:15.447] [INFO] channels - /r/littlespace: #helpers: : Right, the right to bear arms is something we promote here. It's in our constitution... some things just shouldn't be taken away. +[2017-03-23 19:33:29.984] [INFO] channels - /r/littlespace: #helpers: : Now, do I feel everyone needs automatic guns? Definitely not, but those are *already* hard to get. +[2017-03-23 19:33:31.582] [INFO] channels - /r/littlespace: #general: : _has killed the room_ +[2017-03-23 19:33:44.985] [INFO] channels - /r/littlespace: #general: : i just made dinner +[2017-03-23 19:33:47.840] [INFO] channels - /r/littlespace: #general: : bacon and tomato sandwiches +[2017-03-23 19:33:59.789] [INFO] channels - /r/littlespace: #helpers: : And I think my main irritation is that the news always take gun crimes and shootings as "it was done by an AR-15 assault rifle!" +[2017-03-23 19:34:05.845] [INFO] channels - /r/littlespace: #helpers: : well, they normally say that before they know anything, for starters. +[2017-03-23 19:34:28.832] [INFO] channels - /r/littlespace: #helpers: : Like the Orlando shooting, wasn't an AR... and Assault Rifles by definition are automatic. +[2017-03-23 19:34:32.717] [INFO] channels - /r/littlespace: #helpers: : Ah, American news LOL +[2017-03-23 19:34:36.686] [INFO] channels - /r/littlespace: #helpers: : oh well. It happens +[2017-03-23 19:34:51.968] [INFO] channels - /r/littlespace: #helpers: : AR-15's are semi-automatic. But that made a huge push to ban AR-15s because 'they're assault rifles' +[2017-03-23 19:35:11.471] [INFO] channels - /r/littlespace: #helpers: : You can't just pull the trigger on an AR and fire all 30 rounds. +[2017-03-23 19:35:18.164] [INFO] channels - /r/littlespace: #helpers: : You have to pull that trigger 30 times. +[2017-03-23 19:35:43.089] [INFO] channels - /r/littlespace: #helpers: : But that makes for a lot more gun drama than there needs to be. +[2017-03-23 19:35:43.487] [INFO] channels - /r/littlespace: #general: : _will be having leftover chinese for dinner_ +[2017-03-23 19:35:48.398] [INFO] channels - /r/littlespace: #general: : Hi guysss +[2017-03-23 19:36:04.798] [INFO] channels - /r/littlespace: #general: : Omg why is this episode killing me +[2017-03-23 19:36:30.419] [INFO] channels - /r/littlespace: #general: : idk +[2017-03-23 19:36:59.746] [INFO] channels - /r/littlespace: #helpers: : but meh, Missouri's laws won't change until I'm dead probably. so i really don't care much. +[2017-03-23 19:37:04.552] [INFO] channels - /r/littlespace: #helpers: : I just can't stand misinformation. +[2017-03-23 19:37:41.197] [INFO] channels - /r/littlespace: #helpers: : Misinformation is bad. *hugs* +[2017-03-23 19:37:55.093] [INFO] channels - /r/littlespace: #general: : Yay Chinese food! +[2017-03-23 19:38:04.832] [INFO] channels - /r/littlespace: #helpers: : *hope the other mods don't fire us both^ +[2017-03-23 19:38:05.994] [INFO] channels - /r/littlespace: #general: : 😃 +[2017-03-23 19:38:13.020] [INFO] channels - /r/littlespace: #helpers: : Psh, Blue won't fire me. +[2017-03-23 19:38:30.553] [INFO] channels - /r/littlespace: #helpers: : If they fire you, Meep, I'll rehire you. You're doing great. :hearT: +[2017-03-23 19:38:39.643] [INFO] channels - /r/littlespace: #general: : It's orange chicken. I prefer Sesame, but they didn't have any +[2017-03-23 19:38:41.437] [INFO] channels - /r/littlespace: #helpers: : Aw ❤️ +[2017-03-23 19:39:01.824] [INFO] channels - /r/littlespace: #general: : Eeeek orange chicken +[2017-03-23 19:39:04.936] [INFO] channels - /r/littlespace: #general: : *wipes eyes* one of the best endings ever +[2017-03-23 19:39:21.511] [INFO] channels - /r/littlespace: #general: : What show? +[2017-03-23 19:39:25.978] [INFO] channels - /r/littlespace: #general: : Naruto +[2017-03-23 19:39:34.788] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> is doing great too. ❤ +[2017-03-23 19:39:48.495] [INFO] channels - /r/littlespace: #helpers: : everyone's doing great! +[2017-03-23 19:40:12.587] [INFO] channels - /r/littlespace: #helpers: : i just like listening to opinions. i don't believe in bashing one side down just because it makes more sense to do another thing because that's *just really bad and misinformed* +[2017-03-23 19:40:26.703] [INFO] channels - /r/littlespace: #helpers: : Right, and not everyone knows all the facts. +[2017-03-23 19:40:32.867] [INFO] channels - /r/littlespace: #helpers: : yeah, exactly! +[2017-03-23 19:40:51.702] [INFO] channels - /r/littlespace: #helpers: : i think i'm not very well liked amongst my history friends/or i am exceedingly well liked, because i've got very controversial viewpoints in issues +[2017-03-23 19:41:08.872] [INFO] channels - /r/littlespace: #helpers: : i try not to follow the current discourse and i try to look at it from another angle, and if it fits, it's gr8 +[2017-03-23 19:41:35.739] [INFO] channels - /r/littlespace: #general: : ah +[2017-03-23 19:41:41.634] [INFO] channels - /r/littlespace: #general: : 😃 +[2017-03-23 19:41:47.478] [INFO] channels - /r/littlespace: #helpers: : Right, I love playing the Devil's advocate of the conversation. +[2017-03-23 19:41:54.611] [INFO] channels - /r/littlespace: #helpers: : so some of my friends think that i'm a stalin sympathiser because i'm a very huge supporter of what stalin has done *not the violence part, that's dumb and not nice*, but it has changed quite a bit and improved quite a bit from the tsarist rule +[2017-03-23 19:42:25.148] [INFO] channels - /r/littlespace: #helpers: : but again, in local politics, i'm a huge proponent for the current political party because they're providing and promising things and they're very legitimate (after all, they've been ruling the country since independence, and doing a darn good job of it too) +[2017-03-23 19:42:33.638] [INFO] channels - /r/littlespace: #helpers: : Exactly. You could say the same for Gorbachov and how between him and Reagan, they ended the cold war. Same argument. +[2017-03-23 19:42:37.630] [INFO] channels - /r/littlespace: #helpers: : But that was before you were born. +[2017-03-23 19:42:41.591] [INFO] channels - /r/littlespace: #helpers: : but some of my friends are just following the opposition just because, of well, *duh* they want to be edgy +[2017-03-23 19:42:42.209] [INFO] channels - /r/littlespace: #helpers: : Hell, that was before I wasborn. +[2017-03-23 19:42:43.628] [INFO] channels - /r/littlespace: #helpers: : and *you* +[2017-03-23 19:42:52.233] [INFO] channels - /r/littlespace: #helpers: : Not *that much* though +[2017-03-23 19:43:28.028] [INFO] channels - /r/littlespace: #helpers: : The USSR disbanded in 1991 or something like that. +[2017-03-23 19:43:38.991] [INFO] channels - /r/littlespace: #general: : <:PusheenParty:293182971622457355> i came to school too early 😄 +[2017-03-23 19:43:43.805] [INFO] channels - /r/littlespace: #helpers: : yes, 1991 +[2017-03-23 19:43:52.666] [INFO] channels - /r/littlespace: #helpers: : anyway, USSR fucked up really hard eventually, anyway +[2017-03-23 19:43:59.331] [INFO] channels - /r/littlespace: #general: : Oh nos +[2017-03-23 19:44:01.575] [INFO] channels - /r/littlespace: #helpers: : and gorbachev could have salvaged it, but he did everything *too* quickly +[2017-03-23 19:44:10.975] [INFO] channels - /r/littlespace: #general: : Wait is your icon Jack Frost? +[2017-03-23 19:44:20.234] [INFO] channels - /r/littlespace: #general: : Whose? +[2017-03-23 19:44:30.119] [INFO] channels - /r/littlespace: #helpers: : and everything just fell apart because he gave the people too much power and they overthrew the communist powers. that's okay, but, that wasn't in the game plan gorbachev had in mind +[2017-03-23 19:44:34.112] [INFO] channels - /r/littlespace: #helpers: : Right, but they are better off disbanded imo. +[2017-03-23 19:44:35.505] [INFO] channels - /r/littlespace: #helpers: : so China really succeeded in that sense +[2017-03-23 19:44:38.512] [INFO] channels - /r/littlespace: #general: : Meep +[2017-03-23 19:44:58.137] [INFO] channels - /r/littlespace: #helpers: : USSR was just a shitpile eventually, especially at the later end. they needed someone powerful *ahem, like putin* +[2017-03-23 19:44:58.176] [INFO] channels - /r/littlespace: #general: : I dont think so +[2017-03-23 19:45:13.677] [INFO] channels - /r/littlespace: #general: : me? no no! +[2017-03-23 19:45:16.788] [INFO] channels - /r/littlespace: #helpers: : Oh yeah, I have no issues with Putin. +[2017-03-23 19:45:22.779] [INFO] channels - /r/littlespace: #helpers: : Hey +[2017-03-23 19:45:27.009] [INFO] channels - /r/littlespace: #helpers: : ARIEL, HI +[2017-03-23 19:45:28.114] [INFO] channels - /r/littlespace: #helpers: : What did I miss +[2017-03-23 19:45:29.739] [INFO] channels - /r/littlespace: #general: : it's a character from world of final fantasy. it's like shiva's little baby. i can't remember what her name is, though. bablizz, i think +[2017-03-23 19:45:33.863] [INFO] channels - /r/littlespace: #general: : Oh hehe it looks like Jack Frost of Persona +[2017-03-23 19:45:35.341] [INFO] channels - /r/littlespace: #helpers: : We're talking potentially bad subjects. :P +[2017-03-23 19:45:37.253] [INFO] channels - /r/littlespace: #helpers: : I'm so tired +[2017-03-23 19:45:38.626] [INFO] channels - /r/littlespace: #general: : cos i named her muffpuff and i've been calling her muffpuff all the time +[2017-03-23 19:45:41.375] [INFO] channels - /r/littlespace: #helpers: : Oh +[2017-03-23 19:45:45.486] [INFO] channels - /r/littlespace: #general: : Omg wait yes that's who it's is! +[2017-03-23 19:45:46.478] [INFO] channels - /r/littlespace: #helpers: : because I was curious of a international view +[2017-03-23 19:45:46.542] [INFO] channels - /r/littlespace: #helpers: : MY FAVORITE +[2017-03-23 19:45:46.622] [INFO] channels - /r/littlespace: #general: : yeah, <@222611472688218112> mentioned that too! +[2017-03-23 19:45:52.681] [INFO] channels - /r/littlespace: #helpers: : it started because I made a bad joke. D: +[2017-03-23 19:45:53.042] [INFO] channels - /r/littlespace: #general: : I need to beat that game +[2017-03-23 19:45:58.468] [INFO] channels - /r/littlespace: #helpers: : *rolls eyes* +[2017-03-23 19:46:08.771] [INFO] channels - /r/littlespace: #helpers: : oh my god i love talking politics. if you get me started i'll go cray cray +[2017-03-23 19:46:14.356] [INFO] channels - /r/littlespace: #general: : I'm about to invade castle ExNine +[2017-03-23 19:46:20.325] [INFO] channels - /r/littlespace: #helpers: : i don't mind it. +[2017-03-23 19:46:29.344] [INFO] channels - /r/littlespace: #helpers: : whenever i have lunch with my uni friends it *always* ends up badly because we'll be fighting so politely +[2017-03-23 19:46:41.646] [INFO] channels - /r/littlespace: #general: : If you click on her name, it shows a profile +[2017-03-23 19:46:48.555] [INFO] channels - /r/littlespace: #helpers: : and then when it ends, it ends up with us shitposting memes everywhere, on telegram, on text, etc +[2017-03-23 19:46:52.319] [INFO] channels - /r/littlespace: #helpers: : as long as people respect my opinion. Like, I tried talking them with a friend of mine whos trans, and super super liberal. Oh god, I just put my tail between my legs and ran for the alcohol. +[2017-03-23 19:47:10.720] [INFO] channels - /r/littlespace: #helpers: : i'm fine with liberal people. as long as they're not shoving *their* opinions down my throat +[2017-03-23 19:47:15.895] [INFO] channels - /r/littlespace: #helpers: : Yeah, she does that. +[2017-03-23 19:47:32.463] [INFO] channels - /r/littlespace: #helpers: : okay. run for the alcohol +[2017-03-23 19:47:33.506] [INFO] channels - /r/littlespace: #helpers: : Especially the entire trans agenda (and I'm not against trans, I don't care what you do, but... don't force it) +[2017-03-23 19:47:33.769] [INFO] channels - /r/littlespace: #helpers: : drown in it +[2017-03-23 19:47:38.490] [INFO] channels - /r/littlespace: #helpers: : yes, ^ +[2017-03-23 19:48:05.126] [INFO] channels - /r/littlespace: #helpers: : but that person being trans is hard, because she's my ex. and now she's FtM... and I, to this day, refuse to call her Nikolas. +[2017-03-23 19:48:09.401] [INFO] channels - /r/littlespace: #helpers: : i hated my malay studies professor because he was like "i don't give a shit about your gender. if you're biologically male, or biologically female, YOU'RE JUST. THAT." +[2017-03-23 19:48:12.660] [INFO] channels - /r/littlespace: #helpers: : 😮 +[2017-03-23 19:48:14.829] [INFO] channels - /r/littlespace: #helpers: : that's a nice name, though +[2017-03-23 19:48:36.832] [INFO] channels - /r/littlespace: #helpers: : Right, but she's still super feminine, (even though she's on HRT, and has been a couple years), it's her actions that make her feminine, not her look. +[2017-03-23 19:48:38.316] [INFO] channels - /r/littlespace: #general: : Hmm, wanna join a discord server but have a fear it'll be dead/inactive and am shy xD +[2017-03-23 19:49:03.810] [INFO] channels - /r/littlespace: #helpers: : that's just that, i guess. *don't really give a shit about their actions. do whatever you all feel happy with* +[2017-03-23 19:49:17.187] [INFO] channels - /r/littlespace: #general: : Which one> +[2017-03-23 19:49:19.387] [INFO] channels - /r/littlespace: #general: : ?* +[2017-03-23 19:49:20.334] [INFO] channels - /r/littlespace: #general: : Oh? +[2017-03-23 19:49:33.144] [INFO] channels - /r/littlespace: #helpers: : right, i mean, her personality has always been kinda tomboyish, but her emotions and how she gets aggressive is all... female. *shrug* +[2017-03-23 19:49:40.583] [INFO] channels - /r/littlespace: #general: : For Ephinea PSO +[2017-03-23 19:49:49.235] [INFO] channels - /r/littlespace: #general: : O_O +[2017-03-23 19:49:52.467] [INFO] channels - /r/littlespace: #general: : The niche is real +[2017-03-23 19:49:54.696] [INFO] channels - /r/littlespace: #helpers: : *shrug* if nikolas is happy, let them be happy! +[2017-03-23 19:49:59.084] [INFO] channels - /r/littlespace: #general: : Okay brb +[2017-03-23 19:50:04.004] [INFO] channels - /r/littlespace: #helpers: : *politically correct strawberry queen here* +[2017-03-23 19:50:04.628] [INFO] channels - /r/littlespace: #general: : 😮 +[2017-03-23 19:50:20.512] [INFO] channels - /r/littlespace: #helpers: : She doesn't care that I still call her D, she'd rather it be D than Dorothy. +[2017-03-23 19:50:29.234] [INFO] channels - /r/littlespace: #helpers: : so, we compromised a little. +[2017-03-23 19:50:30.721] [INFO] channels - /r/littlespace: #helpers: : ah, then it's all good +[2017-03-23 19:50:38.433] [INFO] channels - /r/littlespace: #general: : What do you play PSO on?I would love to play +[2017-03-23 19:50:45.293] [INFO] channels - /r/littlespace: #general: : But I know nothing of it +[2017-03-23 19:50:45.560] [INFO] channels - /r/littlespace: #general: : Pc! +[2017-03-23 19:50:54.996] [INFO] channels - /r/littlespace: #general: : I doubt my PC can run it +[2017-03-23 19:51:07.607] [INFO] channels - /r/littlespace: #general: : Uh I mean +[2017-03-23 19:51:13.951] [INFO] channels - /r/littlespace: #general: : I back +[2017-03-23 19:51:19.824] [INFO] channels - /r/littlespace: #helpers: : Like, I had to unfollow her on faceboko though because every other post was all trans stuff and it was just flooding me. +[2017-03-23 19:51:42.170] [INFO] channels - /r/littlespace: #general: : What are your specs? (Might wanna move to gaming, it seems) +[2017-03-23 19:51:55.378] [INFO] channels - /r/littlespace: #general: : _yawns_ +[2017-03-23 19:52:01.147] [INFO] channels - /r/littlespace: #helpers: : yeah, i did that for one of my SJW friends, and another trans friend. i don't know. i love them, but it's annoying. and they're annoying. so no. +[2017-03-23 19:52:14.162] [INFO] channels - /r/littlespace: #general: : yes, let's roll over to <#179365624332419073> 😄 +[2017-03-23 19:52:14.963] [INFO] channels - /r/littlespace: #gaming: : I have a Alienware desktop +[2017-03-23 19:52:31.049] [INFO] channels - /r/littlespace: #gaming: : i have a ROG laptop, but i'm running surface 3 bc it's wayyy lighter than my ROG +[2017-03-23 19:52:52.564] [INFO] channels - /r/littlespace: #helpers: : but then again, I used to post a bunch of pro-consitution shit to my facebook too, so I imagine people did the same. +[2017-03-23 19:52:54.759] [INFO] channels - /r/littlespace: #gaming: : Pso is incredibly old, a toaster could run it xD +[2017-03-23 19:52:55.163] [INFO] channels - /r/littlespace: #gaming: : I upgraded the ram and that's it so far.i won't dare touch the processor or graphics though cause mod and spec wise it's not gonna matter +[2017-03-23 19:52:57.194] [INFO] channels - /r/littlespace: #helpers: : oh yeah +[2017-03-23 19:53:02.777] [INFO] channels - /r/littlespace: #helpers: : and for myself, cute cat videos and socialist memes. yep +[2017-03-23 19:53:18.064] [INFO] channels - /r/littlespace: #helpers: : I CAN'T STOP MYSELF FROM POSTING SOCIALIST MEMES THOUGH +[2017-03-23 19:53:18.333] [INFO] channels - /r/littlespace: #gaming: : Ran games on it before? +[2017-03-23 19:53:19.725] [INFO] channels - /r/littlespace: #helpers: : they're SO GOOD +[2017-03-23 19:53:26.373] [INFO] channels - /r/littlespace: #gaming: : Anything run well? +[2017-03-23 19:53:29.397] [INFO] channels - /r/littlespace: #general: : No thankies +[2017-03-23 19:53:32.089] [INFO] channels - /r/littlespace: #gaming: : I can play WoW decent? +[2017-03-23 19:53:39.052] [INFO] channels - /r/littlespace: #gaming: : Yeah no +[2017-03-23 19:53:43.709] [INFO] channels - /r/littlespace: #gaming: : You can definitely run pso xD +[2017-03-23 19:53:47.570] [INFO] channels - /r/littlespace: #general: : stay here with me then 😃 +[2017-03-23 19:53:52.726] [INFO] channels - /r/littlespace: #general: : Okay +[2017-03-23 19:53:58.435] [INFO] channels - /r/littlespace: #gaming: : Blade and Soul is a bit hit and miss.more a latency issue there I think +[2017-03-23 19:54:05.864] [INFO] channels - /r/littlespace: #gaming: : After tweaking settings +[2017-03-23 19:54:06.512] [INFO] channels - /r/littlespace: #general: : Is there a way to mute a channel? +[2017-03-23 19:54:09.086] [INFO] channels - /r/littlespace: #general: : yay! so i kinda like, reached class 30 minutes earlier than it +[2017-03-23 19:54:12.227] [INFO] channels - /r/littlespace: #general: : yeah, you can! +[2017-03-23 19:54:15.339] [INFO] channels - /r/littlespace: #general: : Ah I found it +[2017-03-23 19:54:20.552] [INFO] channels - /r/littlespace: #general: : right, that's good +[2017-03-23 19:54:25.581] [INFO] channels - /r/littlespace: #gaming: : +[2017-03-23 19:54:27.962] [INFO] channels - /r/littlespace: #helpers: : oh, i enjoy all images. :D +[2017-03-23 19:54:30.001] [INFO] channels - /r/littlespace: #general: : Woo hoo +[2017-03-23 19:54:43.540] [INFO] channels - /r/littlespace: #helpers: : Ugh guys stop talking and let me catch up +[2017-03-23 19:54:43.864] [INFO] channels - /r/littlespace: #helpers: : yeah <@274917231778070528> come join us, join us in bitching about everything and everything +[2017-03-23 19:54:52.831] [INFO] channels - /r/littlespace: #general: : How do people get colored names on the side? That's so cool +[2017-03-23 19:54:58.477] [INFO] channels - /r/littlespace: #helpers: : <@274917231778070528> just search for "Shots for everyone" and jump to it +[2017-03-23 19:55:05.939] [INFO] channels - /r/littlespace: #helpers: : Nope +[2017-03-23 19:55:07.606] [INFO] channels - /r/littlespace: #gaming: : i can't realy run much, but i managed to do a good round of civ 5 on low settings on my surface 3 +[2017-03-23 19:55:07.622] [INFO] channels - /r/littlespace: #helpers: : that's the start of the conversation. :P +[2017-03-23 19:55:12.042] [INFO] channels - /r/littlespace: #helpers: : IM NOT A CHEATER +[2017-03-23 19:55:15.402] [INFO] channels - /r/littlespace: #helpers: : LAME +[2017-03-23 19:55:24.939] [INFO] channels - /r/littlespace: #helpers: : I'll let her catch up before I say the next sentence. +[2017-03-23 19:55:42.408] [INFO] channels - /r/littlespace: #general: : do you want one? you can find the colour hex and i can change it for you +[2017-03-23 19:56:04.791] [INFO] channels - /r/littlespace: #general: : There's a URL for it in <#202270291043418113> +[2017-03-23 19:56:17.438] [INFO] channels - /r/littlespace: #helpers: : Nah you're fine continue +[2017-03-23 19:56:18.629] [INFO] channels - /r/littlespace: #gaming: : Would be surprised if anyone here with a laptop/pc couldn't run pso +[2017-03-23 19:56:24.479] [INFO] channels - /r/littlespace: #gaming: : <@234126386703499264> unholy heights is on sale +[2017-03-23 19:56:27.718] [INFO] channels - /r/littlespace: #general: : http://www.color-hex.com/ <@294618642119917568> just ping me when you want to do it! or just ping <@&293860612184866818>, either one of us can do it +[2017-03-23 19:56:30.413] [INFO] channels - /r/littlespace: #gaming: : $3.19! +[2017-03-23 19:56:41.188] [INFO] channels - /r/littlespace: #gaming: : oo, i needa get that +[2017-03-23 19:56:46.603] [INFO] channels - /r/littlespace: #helpers: : I forgot what I was going to say now. +[2017-03-23 19:56:53.176] [INFO] channels - /r/littlespace: #helpers: : Heh +[2017-03-23 19:57:42.830] [INFO] channels - /r/littlespace: #gaming: : GET IT +[2017-03-23 19:57:43.699] [INFO] channels - /r/littlespace: #gaming: : PLEASE +[2017-03-23 19:57:46.173] [INFO] channels - /r/littlespace: #gaming: : EVERYBODY GET UNHOLY HEIGHTS +[2017-03-23 19:58:10.165] [INFO] channels - /r/littlespace: #gaming: : I has no moneys xD +[2017-03-23 19:58:35.361] [INFO] channels - /r/littlespace: #gaming: : _robs a bank, gives <@178672961610448896> half._ +[2017-03-23 19:58:38.552] [INFO] channels - /r/littlespace: #gaming: : there you go +[2017-03-23 19:58:39.867] [INFO] channels - /r/littlespace: #vent: : hey all +[2017-03-23 19:58:50.950] [INFO] channels - /r/littlespace: #gaming: : I think I've played enough PAYDAY 2 to know how to rob a bank. +[2017-03-23 19:59:25.146] [INFO] channels - /r/littlespace: #gaming: : Errr xD +[2017-03-23 20:00:44.678] [INFO] channels - /r/littlespace: #gaming: : Unholy heights? +[2017-03-23 20:00:45.722] [INFO] channels - /r/littlespace: #general: : Okay! I want 58c3c2 if no one has it <@234126386703499264> +[2017-03-23 20:01:10.197] [INFO] channels - /r/littlespace: #general: : or #354666 +[2017-03-23 20:01:51.283] [INFO] channels - /r/littlespace: #helpers: : <@!183765352457568256> joined the server. +[2017-03-23 20:02:38.932] [INFO] channels - /r/littlespace: #helpers: : Honey Bunny ~💜~#5805 left. +[2017-03-23 20:02:45.229] [INFO] channels - /r/littlespace: #media_sharing: : https://www.youtube.com/watch?v=4fndeDfaWCg Ive been listening to 90s music at work and just in general a lot recently +[2017-03-23 20:03:26.384] [INFO] channels - /r/littlespace: #helpers: : WHY +[2017-03-23 20:03:31.651] [INFO] channels - /r/littlespace: #helpers: : Meep can't welcome these people +[2017-03-23 20:03:41.744] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> i bought it +[2017-03-23 20:03:45.508] [INFO] channels - /r/littlespace: #helpers: : and the other one you recommended too +[2017-03-23 20:04:04.246] [INFO] channels - /r/littlespace: #gaming: : <@234126386703499264> I bought it, and the other you recommended too +[2017-03-23 20:04:18.565] [INFO] channels - /r/littlespace: #gaming: : <@184867971770875904> http://store.steampowered.com/app/249330/ +[2017-03-23 20:04:54.247] [INFO] channels - /r/littlespace: #general: : 😃 +[2017-03-23 20:05:07.698] [INFO] channels - /r/littlespace: #gaming: : YES U DA BOMB +[2017-03-23 20:05:11.940] [INFO] channels - /r/littlespace: #gaming: : PLAY IT, WARBIRD. PLAY IT +[2017-03-23 20:05:17.723] [INFO] channels - /r/littlespace: #gaming: : <@234126386703499264> i'm at work +[2017-03-23 20:05:22.537] [INFO] channels - /r/littlespace: #general: : okay, gimme a moment. do you want a nickname/role? +[2017-03-23 20:05:29.592] [INFO] channels - /r/littlespace: #gaming: : How do I get pso +[2017-03-23 20:05:40.587] [INFO] channels - /r/littlespace: #general: : I want to keep this name, please. 😃 +[2017-03-23 20:06:06.215] [INFO] channels - /r/littlespace: #general: : okay, gimme a moment! +[2017-03-23 20:06:07.620] [INFO] channels - /r/littlespace: #general: : A role? Can I be Bratty Unicorn Princess? LOL +[2017-03-23 20:06:17.243] [INFO] channels - /r/littlespace: #general: : oh, okay yes!! you're so cute *squishes* +[2017-03-23 20:06:22.160] [INFO] channels - /r/littlespace: #general: : I vote yes to this role. :D +[2017-03-23 20:06:26.416] [INFO] channels - /r/littlespace: #general: : _giggles_ +[2017-03-23 20:06:36.635] [INFO] channels - /r/littlespace: #general: : _squishes meep and warbird_ +[2017-03-23 20:06:47.061] [INFO] channels - /r/littlespace: #general: : eep +[2017-03-23 20:06:54.521] [INFO] channels - /r/littlespace: #general: : gently +[2017-03-23 20:06:58.901] [INFO] channels - /r/littlespace: #general: : that's better. +[2017-03-23 20:07:14.000] [INFO] channels - /r/littlespace: #helpers: : **LittleWickedQueen#4356** had these roles added: `Bratty Unicorn Princess` +[2017-03-23 20:07:15.595] [INFO] channels - /r/littlespace: #helpers: : **LittleWickedQueen#4356** had these roles removed: `Bratty Unicorn Princess` +[2017-03-23 20:07:26.074] [INFO] channels - /r/littlespace: #general: : <@294618642119917568> can you check it? 😃 +[2017-03-23 20:07:30.300] [INFO] channels - /r/littlespace: #general: : i think i did it correctly! +[2017-03-23 20:07:43.406] [INFO] channels - /r/littlespace: #helpers: : **LittleWickedQueen#4356** had these roles added: `Bratty Unicorn Princess` +[2017-03-23 20:07:55.022] [INFO] channels - /r/littlespace: #general: : i hope i did... +[2017-03-23 20:08:10.708] [INFO] channels - /r/littlespace: #gaming: : <@200944723035160576> screw work! +[2017-03-23 20:08:25.269] [INFO] channels - /r/littlespace: #helpers: : IS IT DONE IS IT CORRECT +[2017-03-23 20:08:35.442] [INFO] channels - /r/littlespace: #general: : Sure +[2017-03-23 20:08:40.864] [INFO] channels - /r/littlespace: #general: : omg i LOVE THE COLOR +[2017-03-23 20:08:42.836] [INFO] channels - /r/littlespace: #general: : Yep, I have that +[2017-03-23 20:08:50.637] [INFO] channels - /r/littlespace: #general: : Meeeeep how are you? +[2017-03-23 20:09:04.001] [INFO] channels - /r/littlespace: #general: : And my role is Bratty Unicorn Princess +[2017-03-23 20:09:11.305] [INFO] channels - /r/littlespace: #general: : _giggles and squishes again_ +[2017-03-23 20:09:28.259] [INFO] channels - /r/littlespace: #general: : i'm doing good!!! how are you doing, <@258325991796113408> ? +[2017-03-23 20:09:32.227] [INFO] channels - /r/littlespace: #gaming: : <@200944723035160576> work is for adults +[2017-03-23 20:09:33.577] [INFO] channels - /r/littlespace: #general: : yay! Squish party! +[2017-03-23 20:09:54.480] [INFO] channels - /r/littlespace: #gaming: : <@258325991796113408> I am an adult right now! +[2017-03-23 20:10:13.613] [INFO] channels - /r/littlespace: #gaming: : <@234126386703499264> come work the engineer queue for me and I'll go play that game +[2017-03-23 20:10:17.696] [INFO] channels - /r/littlespace: #helpers: : YES +[2017-03-23 20:10:27.279] [INFO] channels - /r/littlespace: #general: : <@234126386703499264> you did it!!! +[2017-03-23 20:10:29.896] [INFO] channels - /r/littlespace: #general: : I'm thinking that I got a cold but other then that I'm okej! +[2017-03-23 20:11:06.822] [INFO] channels - /r/littlespace: #gaming: : *whispers me too <@200944723035160576>* +[2017-03-23 20:11:54.640] [INFO] channels - /r/littlespace: #gaming: : <@258325991796113408> I'm not working hard today. I have 50 hours in this week and I've only been here 3 days. +[2017-03-23 20:12:05.494] [INFO] channels - /r/littlespace: #gaming: : 19 hours worked on my day off (tuesday). +[2017-03-23 20:12:23.870] [INFO] channels - /r/littlespace: #helpers: : Keiju, he's from the little playground, righT? +[2017-03-23 20:12:42.256] [INFO] channels - /r/littlespace: #helpers: : Also, LWQ is adorable. +[2017-03-23 20:12:58.986] [INFO] channels - /r/littlespace: #general: : awwwwwwwwwwwww +[2017-03-23 20:13:15.967] [INFO] channels - /r/littlespace: #general: : _dances around_ +[2017-03-23 20:13:16.288] [INFO] channels - /r/littlespace: #general: : yes i DID IT!! i'm so happy!!! +[2017-03-23 20:13:29.425] [INFO] channels - /r/littlespace: #general: : Hi ariel +[2017-03-23 20:13:31.590] [INFO] channels - /r/littlespace: #gaming: : no, i will not, <@200944723035160576>. i'll cry. and you'll cry with me. +[2017-03-23 20:13:40.401] [INFO] channels - /r/littlespace: #helpers: : isn't keiju's a female... +[2017-03-23 20:13:46.722] [INFO] channels - /r/littlespace: #gaming: : _cries with <@234126386703499264>._ +[2017-03-23 20:13:50.161] [INFO] channels - /r/littlespace: #helpers: : yeah, i think so. i think they've been here first, then the playground +[2017-03-23 20:13:58.729] [INFO] channels - /r/littlespace: #helpers: : I don't know if Keiju is female or not. +[2017-03-23 20:14:06.892] [INFO] channels - /r/littlespace: #gaming: : 😄 you're such an enabler. love you +[2017-03-23 20:14:10.205] [INFO] channels - /r/littlespace: #helpers: : there are no women on the internet. +[2017-03-23 20:14:14.026] [INFO] channels - /r/littlespace: #helpers: : Everyone knows that. +[2017-03-23 20:14:18.921] [INFO] channels - /r/littlespace: #helpers: : Right <@274917231778070528>? +[2017-03-23 20:14:32.732] [INFO] channels - /r/littlespace: #gaming: : ❤ love you best friend +[2017-03-23 20:15:03.979] [INFO] channels - /r/littlespace: #helpers: : i think she's stil catching up on things, methinks. +[2017-03-23 20:15:07.411] [INFO] channels - /r/littlespace: #helpers: : oh wait. she went offline! +[2017-03-23 20:15:42.818] [INFO] channels - /r/littlespace: #general: : yikes, time for some opera history today! +[2017-03-23 20:15:52.286] [INFO] channels - /r/littlespace: #helpers: : She doesn't love us. +[2017-03-23 20:16:02.357] [INFO] channels - /r/littlespace: #general: : Okay bai. Thanks so much!! +[2017-03-23 20:16:13.581] [INFO] channels - /r/littlespace: #helpers: : i just spilled water on my dress. sad. +[2017-03-23 20:16:32.491] [INFO] channels - /r/littlespace: #general: : a pleasure to help you!! i'll be lurking here cos like, well. i'm sleepy! it's 9am here. +[2017-03-23 20:16:51.014] [INFO] channels - /r/littlespace: #general: : *flops onto the floor* +[2017-03-23 20:16:56.726] [INFO] channels - /r/littlespace: #general: : It's 6:18 pm here +[2017-03-23 20:16:59.291] [INFO] channels - /r/littlespace: #general: : I put myself through hell today and I did it voluntarily +[2017-03-23 20:17:01.319] [INFO] channels - /r/littlespace: #general: : why did I do that +[2017-03-23 20:17:11.890] [INFO] channels - /r/littlespace: #helpers: : Awwww. Clean it up! +[2017-03-23 20:17:53.527] [INFO] channels - /r/littlespace: #general: : Me no know +[2017-03-23 20:17:57.857] [INFO] channels - /r/littlespace: #general: : what did you do, abi +[2017-03-23 20:18:07.788] [INFO] channels - /r/littlespace: #general: : *rolls around* i'm feeling feverish again oh god. and i have a project meeting after this. +[2017-03-23 20:18:16.607] [INFO] channels - /r/littlespace: #general: : Oh no +[2017-03-23 20:18:20.675] [INFO] channels - /r/littlespace: #helpers: : i'm just dabbing it off, at least it's not a lot, but ugh +[2017-03-23 20:18:21.706] [INFO] channels - /r/littlespace: #general: : went to dinner with my ex to show him that I'm better off without him +[2017-03-23 20:18:29.448] [INFO] channels - /r/littlespace: #general: : Oh noes +[2017-03-23 20:18:32.238] [INFO] channels - /r/littlespace: #general: : r u ok , abi +[2017-03-23 20:18:34.783] [INFO] channels - /r/littlespace: #general: : did he bully you +[2017-03-23 20:18:35.822] [INFO] channels - /r/littlespace: #general: : :/ +[2017-03-23 20:18:38.391] [INFO] channels - /r/littlespace: #general: : cos *pitchforks* +[2017-03-23 20:18:50.714] [INFO] channels - /r/littlespace: #general: : He tried to bully me +[2017-03-23 20:19:03.299] [INFO] channels - /r/littlespace: #general: : at one point he was like "that waitress knows me because I keep bringing girls here on dates" +[2017-03-23 20:19:12.503] [INFO] channels - /r/littlespace: #general: : I casually put my hair up in a ponytail and asked how many hickies hadn't faded yet +[2017-03-23 20:19:46.371] [INFO] channels - /r/littlespace: #general: : he also did the whole "I probably should never have asked you out" ploy and I went "yeah probably but then I would never have met Sir if we hadn't dated" +[2017-03-23 20:19:54.245] [INFO] channels - /r/littlespace: #general: : I felt very savage. +[2017-03-23 20:20:04.972] [INFO] channels - /r/littlespace: #general: : That's not nice of him +[2017-03-23 20:20:10.645] [INFO] channels - /r/littlespace: #general: : He's a butt. +[2017-03-23 20:20:19.952] [INFO] channels - /r/littlespace: #general: : He sounds like it +[2017-03-23 20:20:25.843] [INFO] channels - /r/littlespace: #general: : you're savage. i love you. +[2017-03-23 20:20:29.321] [INFO] channels - /r/littlespace: #general: : I love you too ❤ +[2017-03-23 20:20:54.049] [INFO] channels - /r/littlespace: #general: : _giggles_ +[2017-03-23 20:21:07.070] [INFO] channels - /r/littlespace: #general: : Sometimes you gotta throw down! And being little has made me such a stronger person. +[2017-03-23 20:21:13.910] [INFO] channels - /r/littlespace: #general: : I could never have said all of that a few months ago. +[2017-03-23 20:21:18.205] [INFO] channels - /r/littlespace: #general: : _throws down_ +[2017-03-23 20:21:29.189] [INFO] channels - /r/littlespace: #general: : *throws to the sides* +[2017-03-23 20:21:33.350] [INFO] channels - /r/littlespace: #general: : now it is stuffie and medicine time and then bed +[2017-03-23 20:21:44.369] [INFO] channels - /r/littlespace: #general: : hi thedaj +[2017-03-23 20:21:56.541] [INFO] channels - /r/littlespace: #general: : _squeals over stuffies_ +[2017-03-23 20:22:13.407] [INFO] channels - /r/littlespace: #general: : What kind of stuffies? +[2017-03-23 20:22:31.000] [INFO] channels - /r/littlespace: #general: : I have only one that I sleep with every single night +[2017-03-23 20:23:26.002] [INFO] channels - /r/littlespace: #general: : So many +[2017-03-23 20:23:35.466] [INFO] channels - /r/littlespace: #general: : I got a giant bumblebee +[2017-03-23 20:23:44.770] [INFO] channels - /r/littlespace: #general: : Not Abi but, I have a giraffe, okapi, wol, another giraffe, a moogle and a chocobo i cuddle with 😄 +[2017-03-23 20:23:47.940] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-23 20:23:48.104] [INFO] channels - /r/littlespace: #helpers: : *gives <@!200944723035160576> a freshly made Oatmeal Raisin cookie.* +[2017-03-23 20:23:51.099] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:23:56.201] [INFO] channels - /r/littlespace: #helpers: : Hrm. +[2017-03-23 20:23:59.076] [INFO] channels - /r/littlespace: #general: : Oh, I have a lot too, but there's only one that I sleep with nightly +[2017-03-23 20:24:03.824] [INFO] channels - /r/littlespace: #general: : I have a tiny fox, three or four teddy bears with their own stories, a small fawn, a loaf of bread, a cinnamon bun.... +[2017-03-23 20:24:08.480] [INFO] channels - /r/littlespace: #general: : A moogle? O_o +[2017-03-23 20:24:13.629] [INFO] channels - /r/littlespace: #general: : A moogle! +[2017-03-23 20:24:37.467] [INFO] channels - /r/littlespace: #general: : Did you get your bread from Uhm what's that place? Squishable? +[2017-03-23 20:24:46.409] [INFO] channels - /r/littlespace: #general: : YES +[2017-03-23 20:24:48.322] [INFO] channels - /r/littlespace: #general: : I LOVE THEM +[2017-03-23 20:24:49.378] [INFO] channels - /r/littlespace: #general: : What's a moogle? +[2017-03-23 20:24:53.517] [INFO] channels - /r/littlespace: #general: : GASP +[2017-03-23 20:25:02.881] [INFO] channels - /r/littlespace: #general: : I have a Unicorn from them. Looks like cotton candy +[2017-03-23 20:25:13.389] [INFO] channels - /r/littlespace: #general: : I'm mad at them though and refuse to buy from them +[2017-03-23 20:25:15.874] [INFO] channels - /r/littlespace: #media_sharing: : https://ips.pepitastore.com/storefront/img/resized/squareenix-store/48df4d669910c3477a64e71d5de8dfbc_248_KR.jpg +[2017-03-23 20:25:17.664] [INFO] channels - /r/littlespace: #general: : Why +[2017-03-23 20:25:21.030] [INFO] channels - /r/littlespace: #general: : What did they do +[2017-03-23 20:25:22.469] [INFO] channels - /r/littlespace: #general: : In media +[2017-03-23 20:25:38.736] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:25:43.973] [INFO] channels - /r/littlespace: #general: : Because they were supposed to make a lion that looks like Moonraker, I think that's what it was and they never did +[2017-03-23 20:25:50.499] [INFO] channels - /r/littlespace: #general: : oh 😦 +[2017-03-23 20:26:00.644] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:26:02.373] [INFO] channels - /r/littlespace: #general: : Cute +[2017-03-23 20:26:06.508] [INFO] channels - /r/littlespace: #helpers: : It doesn't work 😦 +[2017-03-23 20:26:09.718] [INFO] channels - /r/littlespace: #helpers: : hang on. :) +[2017-03-23 20:26:09.774] [INFO] channels - /r/littlespace: #general: : No, Moonracer? I forgot +[2017-03-23 20:26:44.376] [INFO] channels - /r/littlespace: #general: : My bf gave me it for my bday +[2017-03-23 20:26:45.076] [INFO] channels - /r/littlespace: #helpers: : Uh oh +[2017-03-23 20:27:06.689] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:27:15.050] [INFO] channels - /r/littlespace: #helpers: : !cookie WARBIRD199 +[2017-03-23 20:28:08.530] [INFO] channels - /r/littlespace: #general: : King Moonracer +[2017-03-23 20:28:09.917] [INFO] channels - /r/littlespace: #media_sharing: : omfgmoogle +[2017-03-23 20:28:11.394] [INFO] channels - /r/littlespace: #general: : awwwwww!!! +[2017-03-23 20:28:30.054] [INFO] channels - /r/littlespace: #general: : CUTE! +[2017-03-23 20:28:37.846] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:28:55.804] [INFO] channels - /r/littlespace: #helpers: : YOU KILLED THOR +[2017-03-23 20:29:04.010] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:29:05.783] [INFO] channels - /r/littlespace: #general: : I actually cried when it happened, while trying to read his really bad handwriting xDD +[2017-03-23 20:29:06.691] [INFO] channels - /r/littlespace: #media_sharing: : KUUUUUUPO +[2017-03-23 20:29:08.033] [INFO] channels - /r/littlespace: #general: : Hold on, let me get the photo +[2017-03-23 20:29:15.221] [INFO] channels - /r/littlespace: #helpers: : IT IS DEAD +[2017-03-23 20:30:59.867] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:31:03.758] [INFO] channels - /r/littlespace: #helpers: : grrr +[2017-03-23 20:31:22.000] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-23 20:31:22.163] [INFO] channels - /r/littlespace: #helpers: : *gives <@!200944723035160576> a freshly made Oatmeal Raisin cookie.* +[2017-03-23 20:31:24.878] [INFO] channels - /r/littlespace: #helpers: : !cookie Meeop +[2017-03-23 20:32:08.270] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:32:20.686] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:32:31.708] [INFO] channels - /r/littlespace: #helpers: : I eat Chinese food literally almost every day +[2017-03-23 20:32:31.955] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:33:20.924] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:33:48.521] [INFO] channels - /r/littlespace: #helpers: : Yooo <@234126386703499264> I also grew up a catholic +[2017-03-23 20:33:51.791] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:37:40.843] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:37:48.322] [INFO] channels - /r/littlespace: #general: : <@274917231778070528> #CAFE00 +[2017-03-23 20:37:57.335] [INFO] channels - /r/littlespace: #general: : It means coffee in Spanish! +[2017-03-23 20:38:11.079] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:38:26.639] [INFO] channels - /r/littlespace: #general: : (and is a nice neon green :P) +[2017-03-23 20:38:42.828] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:38:58.734] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:39:00.959] [INFO] channels - /r/littlespace: #helpers: : Aha! +[2017-03-23 20:39:01.994] [INFO] channels - /r/littlespace: #general: : Any role you'd like? +[2017-03-23 20:39:20.336] [INFO] channels - /r/littlespace: #helpers: : Omg hi 5 catholic girls are the best +[2017-03-23 20:39:24.800] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:41:31.927] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:41:42.576] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:41:50.898] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:42:00.679] [INFO] channels - /r/littlespace: #helpers: : Okay... the username lookup works... +[2017-03-23 20:42:07.897] [INFO] channels - /r/littlespace: #helpers: : It must be the metnioning part that's broken. +[2017-03-23 20:42:08.562] [INFO] channels - /r/littlespace: #helpers: : Uh huh. What's wrong with it +[2017-03-23 20:42:16.147] [INFO] channels - /r/littlespace: #general: : Sometimes! +[2017-03-23 20:42:20.577] [INFO] channels - /r/littlespace: #general: : You're all so adorable omg +[2017-03-23 20:42:25.905] [INFO] channels - /r/littlespace: #general: : lol +[2017-03-23 20:42:26.164] [INFO] channels - /r/littlespace: #general: : *squishes* +[2017-03-23 20:42:48.965] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:44:01.981] [INFO] channels - /r/littlespace: #general: : <@178672961610448896> only if I can be rice crispies! +[2017-03-23 20:44:34.852] [INFO] channels - /r/littlespace: #general: : D; +[2017-03-23 20:44:38.640] [INFO] channels - /r/littlespace: #general: : Them's banning words! +[2017-03-23 20:46:57.725] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:50:09.317] [INFO] channels - /r/littlespace: #undefined: : !cookie Meep +[2017-03-23 20:50:47.591] [INFO] channels - /r/littlespace: #gaming: : I know. No more long nights for awhile. +[2017-03-23 20:50:57.565] [INFO] channels - /r/littlespace: #general: : You guys are so cute I can't *my heart is melting* +[2017-03-23 20:51:06.175] [INFO] channels - /r/littlespace: #general: : _giggles at Abi_ +[2017-03-23 20:51:08.390] [INFO] channels - /r/littlespace: #helpers: : Sigh. It's cold! +[2017-03-23 20:51:09.388] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:51:09.561] [INFO] channels - /r/littlespace: #helpers: : * givesundefined a freshly made Oatmeal Raisin cookie.* +[2017-03-23 20:51:11.901] [INFO] channels - /r/littlespace: #helpers: : WAIT +[2017-03-23 20:51:13.964] [INFO] channels - /r/littlespace: #helpers: : IT IS NO LONGER FRESH +[2017-03-23 20:51:16.714] [INFO] channels - /r/littlespace: #helpers: : almost +[2017-03-23 20:51:22.400] [INFO] channels - /r/littlespace: #helpers: : I AM NOT +[2017-03-23 20:51:24.631] [INFO] channels - /r/littlespace: #helpers: : UNDEFINED +[2017-03-23 20:51:27.628] [INFO] channels - /r/littlespace: #helpers: : WHAT THE FUCK THOR +[2017-03-23 20:51:34.011] [INFO] channels - /r/littlespace: #helpers: : You're very definied. +[2017-03-23 20:51:36.583] [INFO] channels - /r/littlespace: #helpers: : defined* +[2017-03-23 20:51:39.223] [INFO] channels - /r/littlespace: #helpers: : I think that's a compliment. +[2017-03-23 20:51:45.750] [INFO] channels - /r/littlespace: #general: : _turns into Elsa to save Meep from melting_ +[2017-03-23 20:52:22.498] [INFO] channels - /r/littlespace: #helpers: : Hahah I boosted dat confidence 💙 +[2017-03-23 20:52:37.769] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:52:37.939] [INFO] channels - /r/littlespace: #helpers: : *gives undefined a freshly made Oatmeal Raisin cookie.* +[2017-03-23 20:52:50.413] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 20:52:50.630] [INFO] channels - /r/littlespace: #helpers: : *gives undefined a freshly made Oatmeal Raisin cookie.* +[2017-03-23 20:52:50.989] [INFO] channels - /r/littlespace: #general: : <@274917231778070528> wiiii! Thanks! +[2017-03-23 20:52:53.130] [INFO] channels - /r/littlespace: #general: : I actually didn't like Frozen. I mean, it was okay, but not that good. I LOVED Trolls though +[2017-03-23 20:52:59.459] [INFO] channels - /r/littlespace: #helpers: : I'm still undefined +[2017-03-23 20:53:07.814] [INFO] channels - /r/littlespace: #helpers: : !cookie meep +[2017-03-23 20:53:18.653] [INFO] channels - /r/littlespace: #general: : <@294618642119917568> I really like tangled and brave over frozen +[2017-03-23 20:53:19.074] [INFO] channels - /r/littlespace: #helpers: : !cookie Meep +[2017-03-23 21:13:36.747] [INFO] channels - /r/littlespace: #helpers: : !ccookie +[2017-03-23 21:13:38.381] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-23 21:13:38.569] [INFO] channels - /r/littlespace: #helpers: : *gives <@!200944723035160576> a freshly made Oatmeal Raisin cookie.* +[2017-03-23 21:13:45.602] [INFO] channels - /r/littlespace: #helpers: : Okay, reverted my code. +[2017-03-23 21:14:39.784] [INFO] channels - /r/littlespace: #helpers: : oh my +[2017-03-23 21:14:40.526] [INFO] channels - /r/littlespace: #helpers: : Mee6BOT - Today at 2:42 AM +Welcome to /DDLG Community/, @Littlestkinkster, Please check out #ddlg_handbook and #da_rulez to get started! +Irishpanda - Today at 2:43 AM +Wow, disappeared before I could even say hello +[2017-03-23 21:14:41.120] [INFO] channels - /r/littlespace: #helpers: : lol +[2017-03-23 21:15:46.045] [INFO] channels - /r/littlespace: #helpers: : They have a welcoming bot +[2017-03-23 21:15:59.929] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 21:16:15.768] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 21:16:32.767] [INFO] channels - /r/littlespace: #helpers: : So I am really upset I told him to go to the movies +[2017-03-23 21:17:00.827] [INFO] channels - /r/littlespace: #media_sharing: : im sorry if this offends but this is freaking adorable http://www.dollskill.com/bondage-bearz-sam.html +[2017-03-23 21:17:10.087] [INFO] channels - /r/littlespace: #helpers: : And now I'm almost positive he's drinking again +[2017-03-23 21:17:18.351] [INFO] channels - /r/littlespace: #general: : https://www.reddit.com/r/TheChurchOfRogers/ +[2017-03-23 21:17:21.262] [INFO] channels - /r/littlespace: #helpers: : And I seriously don't mind drinking but like +[2017-03-23 21:17:35.979] [INFO] channels - /r/littlespace: #helpers: : I'm worried he drinks too much? +[2017-03-23 21:17:49.323] [INFO] channels - /r/littlespace: #media_sharing: : or ths http://www.dollskill.com/i-heart-guts-tooth-plushie.html +[2017-03-23 21:17:55.519] [INFO] channels - /r/littlespace: #general: : O_O +[2017-03-23 21:18:00.037] [INFO] channels - /r/littlespace: #general: : What is that??? +[2017-03-23 21:18:02.993] [INFO] channels - /r/littlespace: #general: : I had an ice cream sandwich +[2017-03-23 21:18:06.751] [INFO] channels - /r/littlespace: #general: : <@171682878688722946> please share links only in media sharing +[2017-03-23 21:18:16.315] [INFO] channels - /r/littlespace: #general: : You know +[2017-03-23 21:18:22.656] [INFO] channels - /r/littlespace: #general: : this chat room makes me feel really unsafe +[2017-03-23 21:18:36.088] [INFO] channels - /r/littlespace: #helpers: : <@200944723035160576> +[2017-03-23 21:18:36.137] [INFO] channels - /r/littlespace: #general: : It doesn't make me feel unsafe +[2017-03-23 21:18:38.400] [INFO] channels - /r/littlespace: #helpers: : do you think it's okay to talk to him about it? +[2017-03-23 21:18:39.425] [INFO] channels - /r/littlespace: #helpers: : General +[2017-03-23 21:18:42.157] [INFO] channels - /r/littlespace: #general: : Why did you join it then? +[2017-03-23 21:18:55.062] [INFO] channels - /r/littlespace: #general: : OOOOOOOOOOOOO that sounds so good, deedee +[2017-03-23 21:19:02.434] [INFO] channels - /r/littlespace: #general: : Well +[2017-03-23 21:19:07.473] [INFO] channels - /r/littlespace: #helpers: : Heh... he just PM'd me. +[2017-03-23 21:19:08.903] [INFO] channels - /r/littlespace: #general: : New mods are a bit... overbearing +[2017-03-23 21:19:12.798] [INFO] channels - /r/littlespace: #helpers: : <@&173241636304715776> +[2017-03-23 21:19:26.147] [INFO] channels - /r/littlespace: #general: : I thought sharing a link about Mr. Rogers in main would be okay +[2017-03-23 21:19:28.782] [INFO] channels - /r/littlespace: #general: : Guess not. +[2017-03-23 21:19:35.935] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 21:19:41.624] [INFO] channels - /r/littlespace: #general: : I have not had an issue with them +[2017-03-23 21:19:47.419] [INFO] channels - /r/littlespace: #general: : But i mean, links are for the media_sharing channel? +[2017-03-23 21:20:05.777] [INFO] channels - /r/littlespace: #helpers: : FUCK THAT GUY +[2017-03-23 21:20:15.077] [INFO] channels - /r/littlespace: #helpers: : Yeah, I borderline wnat to ban him for that. +[2017-03-23 21:20:16.962] [INFO] channels - /r/littlespace: #helpers: : Wow +[2017-03-23 21:20:21.270] [INFO] channels - /r/littlespace: #helpers: : 'put them on a leash' +[2017-03-23 21:20:22.736] [INFO] channels - /r/littlespace: #helpers: : PUHLEASE +[2017-03-23 21:20:28.280] [INFO] channels - /r/littlespace: #helpers: : I've been hating corri for months now +[2017-03-23 21:20:29.668] [INFO] channels - /r/littlespace: #helpers: : I FUCKING JUST SAID SOMETHING +[2017-03-23 21:20:48.225] [INFO] channels - /r/littlespace: #helpers: : Please let them know that it's not okay to talk shit about the mods or helpers. +[2017-03-23 21:20:52.244] [INFO] channels - /r/littlespace: #helpers: : That's not okay. +[2017-03-23 21:20:53.056] [INFO] channels - /r/littlespace: #general: : The new mods are just trying to follow the rules listed as best they can in several chats. It has to be at least a little stressful. +[2017-03-23 21:21:02.357] [INFO] channels - /r/littlespace: #general: : Yeah! +[2017-03-23 21:21:23.813] [INFO] channels - /r/littlespace: #general: : But so far they're doing really well and are really nice +[2017-03-23 21:21:28.853] [INFO] channels - /r/littlespace: #general: : I don't even see how it's stressful xD +[2017-03-23 21:22:02.270] [INFO] channels - /r/littlespace: #helpers: : I did in my DM. +[2017-03-23 21:22:03.523] [INFO] channels - /r/littlespace: #general: : Eh it might not be, I was just thinking about my social anxiety and having to talk to/ confront strangers lol +[2017-03-23 21:22:05.504] [INFO] channels - /r/littlespace: #general: : I agree +[2017-03-23 21:22:20.529] [INFO] channels - /r/littlespace: #helpers: : Thank you. Also thank daryan for me please +[2017-03-23 21:22:24.647] [INFO] channels - /r/littlespace: #helpers: : She's being awesome +[2017-03-23 21:22:26.465] [INFO] channels - /r/littlespace: #general: : Ah fair enough +[2017-03-23 21:22:29.195] [INFO] channels - /r/littlespace: #general: : Meep is really nice and so is Ariel +[2017-03-23 21:22:30.277] [INFO] channels - /r/littlespace: #helpers: : SHE IS AMAZING +[2017-03-23 21:22:35.652] [INFO] channels - /r/littlespace: #general: : As well as War and Blue +[2017-03-23 21:22:38.250] [INFO] channels - /r/littlespace: #helpers: : Can I say this in general +[2017-03-23 21:22:41.756] [INFO] channels - /r/littlespace: #general: : Yea they are! +[2017-03-23 21:22:44.003] [INFO] channels - /r/littlespace: #helpers: : Well said <@273616426261020672> the rules are in place for a reason. I'm sorry you feel that way <@171682878688722946>, I'm just trying to help the lovely mods out. +[2017-03-23 21:22:47.372] [INFO] channels - /r/littlespace: #general: : I want to thank you all for all the support for us. +[2017-03-23 21:22:50.069] [INFO] channels - /r/littlespace: #helpers: : Tell her she's awesome. +[2017-03-23 21:22:50.084] [INFO] channels - /r/littlespace: #helpers: : Or nah +[2017-03-23 21:22:52.018] [INFO] channels - /r/littlespace: #general: : I just think like +[2017-03-23 21:22:52.727] [INFO] channels - /r/littlespace: #general: : And nanako! +[2017-03-23 21:22:58.005] [INFO] channels - /r/littlespace: #helpers: : I don't wanna start shit +[2017-03-23 21:23:02.870] [INFO] channels - /r/littlespace: #general: : If rules aren't enforced, people aren't gonna follow them xD +[2017-03-23 21:23:11.094] [INFO] channels - /r/littlespace: #general: : I was just gonna add <@222611472688218112> lol +[2017-03-23 21:23:21.302] [INFO] channels - /r/littlespace: #general: : Exactly +[2017-03-23 21:23:24.684] [INFO] channels - /r/littlespace: #general: : And it sucks, for one person not to have to abide, while someone else does, if that makes sense +[2017-03-23 21:23:36.246] [INFO] channels - /r/littlespace: #general: : Bless u guys +[2017-03-23 21:23:45.437] [INFO] channels - /r/littlespace: #helpers: : ¯\_(ツ)_/¯ +[2017-03-23 21:23:45.708] [INFO] channels - /r/littlespace: #helpers: : *mic drop* +[2017-03-23 21:23:50.885] [INFO] channels - /r/littlespace: #helpers: : ```[9:22 PM] Corri: I don't mean to disrespect +[9:22 PM] Corri: Ive seen this pattern in other little communities before +[9:22 PM] Corri: little by little +NEW MESSAGES +[9:22 PM] Corri: the community becomes more athoritative +[9:22 PM] Corri: less fun +[9:22 PM] Corri: more drama, more crying, etc.``` +[2017-03-23 21:23:53.556] [INFO] channels - /r/littlespace: #helpers: : U DA BEST THOR +[2017-03-23 21:24:05.971] [INFO] channels - /r/littlespace: #helpers: : well uh +[2017-03-23 21:24:12.508] [INFO] channels - /r/littlespace: #helpers: : Who's crying now +[2017-03-23 21:24:15.886] [INFO] channels - /r/littlespace: #helpers: : that's kind of your job +[2017-03-23 21:24:21.973] [INFO] channels - /r/littlespace: #general: : Yay! +[2017-03-23 21:24:36.836] [INFO] channels - /r/littlespace: #helpers: : and he just added that sharing links isn't required to be in media_sharing, according to the rules +[2017-03-23 21:24:42.067] [INFO] channels - /r/littlespace: #general: : Yeah! +[2017-03-23 21:25:02.042] [INFO] channels - /r/littlespace: #general: : <@294618642119917568> I'm not nice, you must have me mixed up with another WARBIRD199. +[2017-03-23 21:25:05.286] [INFO] channels - /r/littlespace: #general: : <@273616426261020672> can confirm +[2017-03-23 21:25:08.230] [INFO] channels - /r/littlespace: #general: : Thank you <@273616426261020672>, <@294618642119917568> and <@178672961610448896> 💙 +[2017-03-23 21:25:23.245] [INFO] channels - /r/littlespace: #general: : Mad love +[2017-03-23 21:25:23.375] [INFO] channels - /r/littlespace: #general: : <@200944723035160576> is a meany lol +[2017-03-23 21:25:27.648] [INFO] channels - /r/littlespace: #general: : ^ +[2017-03-23 21:25:27.810] [INFO] channels - /r/littlespace: #general: : ^^ +[2017-03-23 21:25:28.732] [INFO] channels - /r/littlespace: #general: : You're nice to me. You offered to be my bestie. 😦 +[2017-03-23 21:25:30.940] [INFO] channels - /r/littlespace: #general: : 😄 +[2017-03-23 21:25:39.733] [INFO] channels - /r/littlespace: #general: : <@274917231778070528> you can't ^^ my ^. +[2017-03-23 21:25:45.455] [INFO] channels - /r/littlespace: #general: : We have matching onesies +[2017-03-23 21:25:47.746] [INFO] channels - /r/littlespace: #general: : Or that wasn't you, Warbird? +[2017-03-23 21:25:53.079] [INFO] channels - /r/littlespace: #general: : YES! +[2017-03-23 21:25:54.048] [INFO] channels - /r/littlespace: #general: : Also I beat you <@200944723035160576> +[2017-03-23 21:25:54.306] [INFO] channels - /r/littlespace: #general: : <@294618642119917568> Everyone is my bestie! +[2017-03-23 21:26:04.690] [INFO] channels - /r/littlespace: #general: : hehehehehe +[2017-03-23 21:26:08.938] [INFO] channels - /r/littlespace: #general: : <@200944723035160576> not mine lol +[2017-03-23 21:26:32.930] [INFO] channels - /r/littlespace: #general: : _loves her Halloween onesie and can't wait for her pawprint one_ +[2017-03-23 21:26:36.188] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 21:26:39.646] [INFO] channels - /r/littlespace: #helpers: : "FOR POSTING ANY KIND OF MEDIA" +[2017-03-23 21:26:49.813] [INFO] channels - /r/littlespace: #helpers: : A link to a website is media +[2017-03-23 21:26:56.935] [INFO] channels - /r/littlespace: #helpers: : HE CAN SUCK MY DICK +[2017-03-23 21:26:57.001] [INFO] channels - /r/littlespace: #helpers: : ```[9:24 PM] Corri: Its also not declared in the rules to not share links in general +[9:25 PM] Corri: in the past we have been allowed to share links in genral, like... as of yesterday people were without recourse... So what makes today different? +[9:26 PM] Corri: I dont mean to be an ass... +[9:26 PM] Corri: Very arbitrary rules make me feel unsafe, because again... this is how communities die. +[9:26 PM] WARBIRD199: Like I said, they're still learning. We'll talk about it with them, but you gotta cut them a little slack. +[9:26 PM] WARBIRD199: They've only been here a couple days.``` +[2017-03-23 21:26:58.666] [INFO] channels - /r/littlespace: #general: : I HAVE DRAGON ONSIE AND A UNICORN ONSIE!! +[2017-03-23 21:27:24.814] [INFO] channels - /r/littlespace: #general: : Oh, we mean the snap crotch ones, not the footie ones +[2017-03-23 21:27:27.325] [INFO] channels - /r/littlespace: #helpers: : ```[9:27 PM] Corri: an you glossed over me as a helper +[9:27 PM] Corri: Tut utu +[9:27 PM] Corri: D:``` +[2017-03-23 21:27:28.776] [INFO] channels - /r/littlespace: #helpers: : There's a reason for that. +[2017-03-23 21:27:40.797] [INFO] channels - /r/littlespace: #general: : I know me too I jus got them in the mail today! +[2017-03-23 21:27:41.164] [INFO] channels - /r/littlespace: #helpers: : Ariel! I'm supporting you 100% they can fuck off. +[2017-03-23 21:27:45.349] [INFO] channels - /r/littlespace: #general: : Just* +[2017-03-23 21:27:49.113] [INFO] channels - /r/littlespace: #helpers: : in the almost month I've been in this community I have never once seen a link in general +[2017-03-23 21:27:50.303] [INFO] channels - /r/littlespace: #helpers: : Me too. I have your back. +[2017-03-23 21:27:53.713] [INFO] channels - /r/littlespace: #general: : They have dragons and unicorns on them +[2017-03-23 21:27:55.361] [INFO] channels - /r/littlespace: #helpers: : Thank you guys +[2017-03-23 21:27:55.474] [INFO] channels - /r/littlespace: #helpers: : I'm really fucking close to banning. I'm really done with corri. +[2017-03-23 21:27:55.958] [INFO] channels - /r/littlespace: #general: : From what company??? +[2017-03-23 21:28:10.268] [INFO] channels - /r/littlespace: #general: : I got them on Amazon +[2017-03-23 21:28:11.360] [INFO] channels - /r/littlespace: #helpers: : The only time I usually see links in general is when interacting with people in IRC. +[2017-03-23 21:28:11.913] [INFO] channels - /r/littlespace: #general: : _squeals_ +[2017-03-23 21:28:13.522] [INFO] channels - /r/littlespace: #general: : I think +[2017-03-23 21:28:17.671] [INFO] channels - /r/littlespace: #helpers: : AND IM WAY MORE ACTIVE THAN THAT heathen +[2017-03-23 21:28:32.347] [INFO] channels - /r/littlespace: #general: : I didn't see any dragon and unicorn onesies. I must look +[2017-03-23 21:28:34.134] [INFO] channels - /r/littlespace: #helpers: : Yes and they don't have access to media so it. Makes. Sense. +[2017-03-23 21:28:47.081] [INFO] channels - /r/littlespace: #general: : lol I was wittle when I bought them so I don't really remember I just remember squealing and pressing buy lol +[2017-03-23 21:29:09.303] [INFO] channels - /r/littlespace: #general: : I need a few more. I like wearing them to bed and with skirts +[2017-03-23 21:29:11.126] [INFO] channels - /r/littlespace: #general: : and these are not the jammies right? +[2017-03-23 21:29:22.187] [INFO] channels - /r/littlespace: #general: : SO COMFY +[2017-03-23 21:29:27.995] [INFO] channels - /r/littlespace: #general: : I need a new onesie. Mine is all torn. :( +[2017-03-23 21:29:57.438] [INFO] channels - /r/littlespace: #helpers: : just caught daryan lying to the chat. :p +[2017-03-23 21:30:07.507] [INFO] channels - /r/littlespace: #helpers: : Oh noooo +[2017-03-23 21:30:10.672] [INFO] channels - /r/littlespace: #helpers: : LINES! +[2017-03-23 21:30:25.711] [INFO] channels - /r/littlespace: #general: : <@200944723035160576> you should get me some for my birthday lol +[2017-03-23 21:30:28.386] [INFO] channels - /r/littlespace: #helpers: : Good idea. :) +[2017-03-23 21:30:32.622] [INFO] channels - /r/littlespace: #general: : ^^ +[2017-03-23 21:30:39.112] [INFO] channels - /r/littlespace: #general: : Yes he should +[2017-03-23 21:30:43.106] [INFO] channels - /r/littlespace: #general: : <@273616426261020672> maybe when you get done writing those lines +[2017-03-23 21:30:52.143] [INFO] channels - /r/littlespace: #helpers: : OH +[2017-03-23 21:30:57.165] [INFO] channels - /r/littlespace: #helpers: : You're welcome! +[2017-03-23 21:31:09.044] [INFO] channels - /r/littlespace: #general: : <@200944723035160576> meany... +[2017-03-23 21:31:14.304] [INFO] channels - /r/littlespace: #general: : _can't find it. :(_ +[2017-03-23 21:31:22.986] [INFO] channels - /r/littlespace: #general: : My twin is typing +[2017-03-23 21:31:24.327] [INFO] channels - /r/littlespace: #general: : <@273616426261020672> THANK YOU FOR MENTIONING ME ILY +[2017-03-23 21:31:32.165] [INFO] channels - /r/littlespace: #general: : <@222611472688218112> I LOVE YOU AS WELL +[2017-03-23 21:31:32.388] [INFO] channels - /r/littlespace: #general: : Hi twin! +[2017-03-23 21:31:37.020] [INFO] channels - /r/littlespace: #general: : D: +[2017-03-23 21:31:37.420] [INFO] channels - /r/littlespace: #general: : Hi bb!! +[2017-03-23 21:31:51.411] [INFO] channels - /r/littlespace: #helpers: : Let me catch up this drama +[2017-03-23 21:31:55.591] [INFO] channels - /r/littlespace: #helpers: : Pls +[2017-03-23 21:31:59.729] [INFO] channels - /r/littlespace: #media_sharing: : http://www.dollskill.com/jac-vanek-adult-coffee-mug.html +[2017-03-23 21:32:02.421] [INFO] channels - /r/littlespace: #general: : _has a sad_ +[2017-03-23 21:32:11.287] [INFO] channels - /r/littlespace: #helpers: : I spend 15 minutes packing up and interacting with my irl friends and this happens. Amazing +[2017-03-23 21:32:16.393] [INFO] channels - /r/littlespace: #helpers: : I am a bad little helper +[2017-03-23 21:32:19.276] [INFO] channels - /r/littlespace: #general: : I think <@273616426261020672> was mistaken, <@294618642119917568>. :( +[2017-03-23 21:32:23.637] [INFO] channels - /r/littlespace: #general: : Ryo is the only man I love. Accept that I joke with you. 😄 +[2017-03-23 21:32:34.816] [INFO] channels - /r/littlespace: #general: : D: +[2017-03-23 21:32:36.951] [INFO] channels - /r/littlespace: #general: : fine +[2017-03-23 21:32:38.117] [INFO] channels - /r/littlespace: #general: : Oh yeah?? +[2017-03-23 21:32:38.674] [INFO] channels - /r/littlespace: #general: : deal +[2017-03-23 21:32:41.515] [INFO] channels - /r/littlespace: #general: : Okay +[2017-03-23 21:32:53.208] [INFO] channels - /r/littlespace: #media_sharing: : I NEED THAT MUG +[2017-03-23 21:33:04.342] [INFO] channels - /r/littlespace: #helpers: : You're an amazing helper, Ariel. +[2017-03-23 21:33:07.606] [INFO] channels - /r/littlespace: #general: : I'm sorry. I just came in late bc I was in class ! +[2017-03-23 21:33:09.051] [INFO] channels - /r/littlespace: #helpers: : Shame on you for doing your job. +[2017-03-23 21:33:10.777] [INFO] channels - /r/littlespace: #helpers: : GO WRITE LINES +[2017-03-23 21:33:19.130] [INFO] channels - /r/littlespace: #general: : <@234126386703499264> <3 +[2017-03-23 21:33:25.142] [INFO] channels - /r/littlespace: #helpers: : You're not my daddy +[2017-03-23 21:33:25.338] [INFO] channels - /r/littlespace: #general: : why does that no convert +[2017-03-23 21:33:26.495] [INFO] channels - /r/littlespace: #general: : it should +[2017-03-23 21:33:33.333] [INFO] channels - /r/littlespace: #helpers: : Also +[2017-03-23 21:33:36.018] [INFO] channels - /r/littlespace: #helpers: : WHATEVER +[2017-03-23 21:33:40.884] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-23 21:33:41.163] [INFO] channels - /r/littlespace: #helpers: : *gives <@!274917231778070528> a freshly made Oatmeal Raisin cookie.* +[2017-03-23 21:33:49.576] [INFO] channels - /r/littlespace: #helpers: : *noms* +[2017-03-23 21:33:49.798] [INFO] channels - /r/littlespace: #helpers: : *disables cookiebot* +[2017-03-23 21:34:07.766] [INFO] channels - /r/littlespace: #helpers: : 😥 +[2017-03-23 21:34:10.220] [INFO] channels - /r/littlespace: #helpers: : 😢 +[2017-03-23 21:34:10.407] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-23 21:34:19.936] [INFO] channels - /r/littlespace: #helpers: : 😢 +[2017-03-23 21:34:20.119] [INFO] channels - /r/littlespace: #helpers: : There, there. https://cdn.discordapp.com/attachments/265064665099403264/294303907704864770/giphy-4.gif +[2017-03-23 21:34:24.467] [INFO] channels - /r/littlespace: #general: : wb Meep! +[2017-03-23 21:34:28.496] [INFO] channels - /r/littlespace: #helpers: : I figured it out! +[2017-03-23 21:34:34.435] [INFO] channels - /r/littlespace: #helpers: : Good job. +[2017-03-23 21:34:38.036] [INFO] channels - /r/littlespace: #helpers: : You can use the bot now. :) +[2017-03-23 21:34:45.706] [INFO] channels - /r/littlespace: #general: : How was class?! +[2017-03-23 21:34:48.251] [INFO] channels - /r/littlespace: #helpers: : I need to take the code I have and push him into Baymax. +[2017-03-23 21:34:49.068] [INFO] channels - /r/littlespace: #general: : I'm sorry that we've made you feel this way, <@171682878688722946>, and I genuinely apologise. However, I know that I can say for myself, and <@274917231778070528> that we're following the rules found in <#202270291043418113>. if you do have any issues with our rule regulation, please PM us, and tell us more about it +[2017-03-23 21:34:59.514] [INFO] channels - /r/littlespace: #helpers: : What the hell happened with Corri +[2017-03-23 21:35:08.024] [INFO] channels - /r/littlespace: #helpers: : he needs to check his privilege +[2017-03-23 21:35:09.559] [INFO] channels - /r/littlespace: #helpers: : Did they really talk badly about our children!? +[2017-03-23 21:35:18.792] [INFO] channels - /r/littlespace: #general: : But, I have to politely disagree that we're being very overbearing, because it's to help us to keep the clutter in the different channels +[2017-03-23 21:35:21.487] [INFO] channels - /r/littlespace: #helpers: : wait, if they're our children... +[2017-03-23 21:35:22.778] [INFO] channels - /r/littlespace: #helpers: : Yes +[2017-03-23 21:35:25.757] [INFO] channels - /r/littlespace: #helpers: : do they have three parents? +[2017-03-23 21:35:26.767] [INFO] channels - /r/littlespace: #helpers: : Mom dad +[2017-03-23 21:35:27.817] [INFO] channels - /r/littlespace: #helpers: : O_O +[2017-03-23 21:35:28.827] [INFO] channels - /r/littlespace: #helpers: : I'm sorry I'm pissed +[2017-03-23 21:35:33.798] [INFO] channels - /r/littlespace: #helpers: : Team mom +[2017-03-23 21:35:35.600] [INFO] channels - /r/littlespace: #helpers: : Mom, Mom, Dad? +[2017-03-23 21:35:40.164] [INFO] channels - /r/littlespace: #helpers: : Mom, Mom, Mom? +[2017-03-23 21:35:45.861] [INFO] channels - /r/littlespace: #helpers: : I need to see a doctor and it's a 1 hour wait and I'm freezing because I'm sick +[2017-03-23 21:35:50.563] [INFO] channels - /r/littlespace: #general: : _agrees_ +[2017-03-23 21:35:57.661] [INFO] channels - /r/littlespace: #helpers: : Aww, I'm sorry Meep. *hugs* +[2017-03-23 21:36:08.356] [INFO] channels - /r/littlespace: #general: : It is honestly one of my favourite rules xD otherwise everrrryyyything would be in general >_< +[2017-03-23 21:36:14.590] [INFO] channels - /r/littlespace: #general: : ^^^ +[2017-03-23 21:36:19.133] [INFO] channels - /r/littlespace: #general: : Actually, if you have a problem out helpers just doing their job, PM the actual mods! +[2017-03-23 21:36:20.602] [INFO] channels - /r/littlespace: #general: : Also, love the dedicated vent channel personally xD +[2017-03-23 21:36:21.292] [INFO] channels - /r/littlespace: #general: : If we come across as that, you can feel free to lodge a complaint to the <@&173241636304715776> too. I'm really sorry, again. +[2017-03-23 21:36:28.057] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 21:36:31.255] [INFO] channels - /r/littlespace: #helpers: : I held my tongue +[2017-03-23 21:36:33.711] [INFO] channels - /r/littlespace: #helpers: : LOL +[2017-03-23 21:36:33.803] [INFO] channels - /r/littlespace: #media_sharing: : Meeeee to <@265614279493812225> +[2017-03-23 21:36:38.911] [INFO] channels - /r/littlespace: #helpers: : yes. Hold your tongue HAHAHAHA +[2017-03-23 21:36:40.221] [INFO] channels - /r/littlespace: #general: : <@178672961610448896> glad to hear that!! +[2017-03-23 21:36:45.786] [INFO] channels - /r/littlespace: #helpers: : _hires Meep to be our PR manager from now on. <@&173241636304715776>_ +[2017-03-23 21:36:51.583] [INFO] channels - /r/littlespace: #helpers: : Hey +[2017-03-23 21:36:56.306] [INFO] channels - /r/littlespace: #helpers: : I have a degree in that +[2017-03-23 21:36:58.161] [INFO] channels - /r/littlespace: #helpers: : *politically correct strawberry queen here* +[2017-03-23 21:36:59.255] [INFO] channels - /r/littlespace: #helpers: : ... +[2017-03-23 21:37:01.704] [INFO] channels - /r/littlespace: #general: : *agrees* +[2017-03-23 21:37:09.926] [INFO] channels - /r/littlespace: #helpers: : PC bro. +[2017-03-23 21:37:16.948] [INFO] channels - /r/littlespace: #general: : _hugs Meep_ +[2017-03-23 21:37:42.844] [INFO] channels - /r/littlespace: #helpers: : Also War im sorry if what I said might've came off mean at all, we're obviously friends and I of course care about you. +[2017-03-23 21:37:45.230] [INFO] channels - /r/littlespace: #general: : Its nothing *you* are doing Meep +[2017-03-23 21:37:50.078] [INFO] channels - /r/littlespace: #media_sharing: : Lol. Do youbever want to adult babygirl? +[2017-03-23 21:37:53.465] [INFO] channels - /r/littlespace: #general: : And hey y'all! Sorry for the slow replies *waves* +[2017-03-23 21:37:54.092] [INFO] channels - /r/littlespace: #general: : Oftentimes, I have troubles and kinda want to talk about stuff, but I hate feeling like a burden to people who just wanna have fun ya know? It's why having a place simply for that, is awesome! +[2017-03-23 21:37:58.777] [INFO] channels - /r/littlespace: #helpers: : I know what you meant. +[2017-03-23 21:38:00.163] [INFO] channels - /r/littlespace: #general: : I was just moving around the campus +[2017-03-23 21:38:19.182] [INFO] channels - /r/littlespace: #helpers: : Ryo is very protective/can be jealous and I would never want to hurt his feelings, nor my friends. +[2017-03-23 21:38:21.443] [INFO] channels - /r/littlespace: #general: : I feel there is a very thin like when it comes to how many mods/officers a chat should have... and I feel like we are unsafely skirting it +[2017-03-23 21:38:25.677] [INFO] channels - /r/littlespace: #helpers: : I know. +[2017-03-23 21:38:36.682] [INFO] channels - /r/littlespace: #general: : I only see like three? +[2017-03-23 21:38:42.398] [INFO] channels - /r/littlespace: #helpers: : Just wanted you to know, in case I don't tease openly with you or seem as friendly in general, it is NOT your fault. +[2017-03-23 21:38:52.362] [INFO] channels - /r/littlespace: #helpers: : Just trying to avoid any potential jealousy issues. +[2017-03-23 21:38:57.758] [INFO] channels - /r/littlespace: #general: : What do you mean? <@171682878688722946> I dont think I'm understanding properly +[2017-03-23 21:38:58.153] [INFO] channels - /r/littlespace: #helpers: : No, it's understandable. +[2017-03-23 21:38:58.351] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 21:39:01.350] [INFO] channels - /r/littlespace: #media_sharing: : Noooo never! +[2017-03-23 21:39:09.541] [INFO] channels - /r/littlespace: #general: : Okay how do I get gems in Clawbert? Ack +[2017-03-23 21:39:10.518] [INFO] channels - /r/littlespace: #helpers: : Shots fired +[2017-03-23 21:39:13.035] [INFO] channels - /r/littlespace: #general: : I don't think we have too many +[2017-03-23 21:39:21.080] [INFO] channels - /r/littlespace: #helpers: : And with that I'm done peeing and will be back later. Matt, tell Corri if they continue you'll warn them maybe. +[2017-03-23 21:39:26.429] [INFO] channels - /r/littlespace: #general: : Too many would be like 10 of them +[2017-03-23 21:39:27.542] [INFO] channels - /r/littlespace: #helpers: : They don't need to continue this through general +[2017-03-23 21:39:31.194] [INFO] channels - /r/littlespace: #general: : ^ +[2017-03-23 21:39:31.422] [INFO] channels - /r/littlespace: #helpers: : We asked them to PM us +[2017-03-23 21:39:55.708] [INFO] channels - /r/littlespace: #general: : And too little would be like 3. +[2017-03-23 21:40:06.467] [INFO] channels - /r/littlespace: #general: : This has 6 mods for 100 users. We need 8 mods for 60 users in our local furry chat. 🇦🇷 +[2017-03-23 21:40:10.648] [INFO] channels - /r/littlespace: #general: : Is there more than three? +[2017-03-23 21:40:19.352] [INFO] channels - /r/littlespace: #general: : Well technically +[2017-03-23 21:40:30.352] [INFO] channels - /r/littlespace: #general: : Oh, if you count the helpers? +[2017-03-23 21:40:36.885] [INFO] channels - /r/littlespace: #general: : 5 if you count the helpers. +[2017-03-23 21:40:39.114] [INFO] channels - /r/littlespace: #general: : I guess semi mod would be correct? +[2017-03-23 21:40:41.304] [INFO] channels - /r/littlespace: #general: : Im a single mod and can handle a WoW/Rust chat of 200+ +[2017-03-23 21:40:42.092] [INFO] channels - /r/littlespace: #general: : Which seems to be a good amount so far. +[2017-03-23 21:40:53.588] [INFO] channels - /r/littlespace: #general: : I was just doing my job <@171682878688722946> if you have anymore concerns to address please do so in a pm. +[2017-03-23 21:40:55.614] [INFO] channels - /r/littlespace: #media_sharing: : <@274917231778070528> I have seen that text on a travel cup on tumblr +[2017-03-23 21:40:56.356] [INFO] channels - /r/littlespace: #general: : That's you and this is their chat +[2017-03-23 21:41:02.861] [INFO] channels - /r/littlespace: #general: : Their rules +[2017-03-23 21:41:03.635] [INFO] channels - /r/littlespace: #helpers: : He already has been PMing me. +[2017-03-23 21:41:14.906] [INFO] channels - /r/littlespace: #general: : You do not have to chat here then. Just saying +[2017-03-23 21:41:24.474] [INFO] channels - /r/littlespace: #general: : Guys. I think we should stop this. Like I've said, <@171682878688722946>, please feel free to PM the mods, or <@274917231778070528> about it. +[2017-03-23 21:41:24.635] [INFO] channels - /r/littlespace: #general: : They don't have kicking or banning power, btw. +[2017-03-23 21:41:29.705] [INFO] channels - /r/littlespace: #general: : Yes. +[2017-03-23 21:41:30.361] [INFO] channels - /r/littlespace: #general: : Yeah +[2017-03-23 21:41:33.164] [INFO] channels - /r/littlespace: #media_sharing: : I loveee it <@258325991796113408> ! +[2017-03-23 21:41:37.776] [INFO] channels - /r/littlespace: #helpers: : We can ban. I'm done. +[2017-03-23 21:41:37.964] [INFO] channels - /r/littlespace: #general: : Thanks, <@234126386703499264>! +[2017-03-23 21:41:50.275] [INFO] channels - /r/littlespace: #general: : Fuck it +[2017-03-23 21:41:50.569] [INFO] channels - /r/littlespace: #general: : _goes to her corner_ +[2017-03-23 21:41:53.469] [INFO] channels - /r/littlespace: #helpers: : I want to see how he responds first. +[2017-03-23 21:41:56.796] [INFO] channels - /r/littlespace: #general: : Since everyone is just going to tell me Im wrong +[2017-03-23 21:42:01.766] [INFO] channels - /r/littlespace: #helpers: : Corri#8031 left. +[2017-03-23 21:42:02.672] [INFO] channels - /r/littlespace: #helpers: : I'm sorry guys +[2017-03-23 21:42:16.663] [INFO] channels - /r/littlespace: #general: : Annnd he's gone? >_> +[2017-03-23 21:42:18.410] [INFO] channels - /r/littlespace: #general: : It's not that you're wrong, this is just how they want to do it. +[2017-03-23 21:42:20.272] [INFO] channels - /r/littlespace: #helpers: : It's not your fault +[2017-03-23 21:42:21.561] [INFO] channels - /r/littlespace: #helpers: : _salutes Corri's farewell with a certain finger._ +[2017-03-23 21:42:32.757] [INFO] channels - /r/littlespace: #general: : You're allowed to have your opinion, but you can't be angry if we kindly tell you to abide by the rules that everyone else follows. +[2017-03-23 21:42:46.605] [INFO] channels - /r/littlespace: #general: : There's literally no reason to throw a tantrum. +[2017-03-23 21:42:46.700] [INFO] channels - /r/littlespace: #general: : <@234126386703499264> How do I get gems in Clawbert? :/ +[2017-03-23 21:42:48.522] [INFO] channels - /r/littlespace: #general: : <@294618642119917568> I heard there is Cards Against Humanity in your corner :o +[2017-03-23 21:42:55.733] [INFO] channels - /r/littlespace: #general: : Where?? +[2017-03-23 21:43:15.319] [INFO] channels - /r/littlespace: #media_sharing: : glad i can help +[2017-03-23 21:43:15.694] [INFO] channels - /r/littlespace: #helpers: : Unbelievable. +[2017-03-23 21:43:16.274] [INFO] channels - /r/littlespace: #helpers: : ```[9:42 PM] Corri: I might rejoin if things change +[9:42 PM] Corri: But the "its their chat!" line is the harbinger of the end. +[9:43 PM] Corri: always``` +[2017-03-23 21:43:16.975] [INFO] channels - /r/littlespace: #helpers: : I don't want you to think you're in the wrong. You did the right thing. I stand by my staff 100%. If I think you're in the wrong, I will let you know. We've had issues with corri in the past, and I'm done with them. I don't appreciate the disrespect for you guys. +[2017-03-23 21:43:28.519] [INFO] channels - /r/littlespace: #helpers: : They're ridiculous and I wanted them gone forever +[2017-03-23 21:43:43.552] [INFO] channels - /r/littlespace: #general: : <@294618642119917568> sorry omg I'm really cold and all waiting for a doctor to see me right now. Just get the machine refreshed and sometimes you can get the gems. There's a password I'll check now +[2017-03-23 21:43:46.985] [INFO] channels - /r/littlespace: #helpers: : Well it's mildly official +[2017-03-23 21:43:52.024] [INFO] channels - /r/littlespace: #general: : <@294618642119917568> complete the daily checklist +[2017-03-23 21:43:57.575] [INFO] channels - /r/littlespace: #general: : I think it gives gems +[2017-03-23 21:43:58.569] [INFO] channels - /r/littlespace: #helpers: : I am now bad cop junior +[2017-03-23 21:44:00.727] [INFO] channels - /r/littlespace: #general: : that's how I got mine. +[2017-03-23 21:44:02.156] [INFO] channels - /r/littlespace: #general: : okkkkkkkkk +[2017-03-23 21:44:14.417] [INFO] channels - /r/littlespace: #general: : There's rewards for each part of the checklist and completing it gave me gems one day and a egg the next. +[2017-03-23 21:44:15.252] [INFO] channels - /r/littlespace: #general: : I playing it +[2017-03-23 21:44:21.551] [INFO] channels - /r/littlespace: #general: : Nice! +[2017-03-23 21:44:27.925] [INFO] channels - /r/littlespace: #helpers: : We made an announcement saying what you guys can do. You were well within their limits. They can suck my 18 inch double ended dildo +[2017-03-23 21:44:30.345] [INFO] channels - /r/littlespace: #general: : Daily checklist gave me a fair amount too +[2017-03-23 21:44:52.411] [INFO] channels - /r/littlespace: #helpers: : I love you you're honestly the best +[2017-03-23 21:45:02.675] [INFO] channels - /r/littlespace: #helpers: : Lol how come? +[2017-03-23 21:45:16.795] [INFO] channels - /r/littlespace: #media_sharing: : Yes <@151848704616169475> you're grand! +[2017-03-23 21:45:34.401] [INFO] channels - /r/littlespace: #helpers: : Because? +[2017-03-23 21:45:46.588] [INFO] channels - /r/littlespace: #helpers: : ❤️ +[2017-03-23 21:45:49.526] [INFO] channels - /r/littlespace: #helpers: : I have all this love to give +[2017-03-23 21:46:10.241] [INFO] channels - /r/littlespace: #media_sharing: : im gonna be broke if i keep checking out that website tho +[2017-03-23 21:46:13.977] [INFO] channels - /r/littlespace: #helpers: : Do you actually have a 18 inch dildo? +[2017-03-23 21:46:29.888] [INFO] channels - /r/littlespace: #helpers: : I'll send a picture when I get home +[2017-03-23 21:46:34.369] [INFO] channels - /r/littlespace: #helpers: : O_O +[2017-03-23 21:46:36.016] [INFO] channels - /r/littlespace: #helpers: : It's double ended too +[2017-03-23 21:46:36.215] [INFO] channels - /r/littlespace: #helpers: : WELL THIS IS A NICE CONVERSATION I'll be back later!! +[2017-03-23 21:46:40.218] [INFO] channels - /r/littlespace: #helpers: : :D +[2017-03-23 21:46:40.428] [INFO] channels - /r/littlespace: #helpers: : 😂 +[2017-03-23 21:46:49.613] [INFO] channels - /r/littlespace: #helpers: : ( ͡° ͜ʖ ͡°) +[2017-03-23 21:47:05.962] [INFO] channels - /r/littlespace: #helpers: : ```[9:44 PM] Corri: Cant do it dude +[9:44 PM] Corri: I cant +[9:44 PM] Corri: Other people keep talking about it +[9:44 PM] Corri: Then the helpers tell me to take it to PM +[9:44 PM] Corri: ¯\_(ツ)_/¯ +[9:45 PM] WARBIRD199: Like I said, they're learning. They're not perfect by any means. A lot of people just protect the staff, and I think that's what just happened. +[9:46 PM] Corri: Staff doesnt need protecting +NEW MESSAGES +[9:46 PM] Corri: Thats a sign of an unhealthy community. There should always be a level if mistrust and contempt for athority. +[9:46 PM] Corri: And Im saying that as an admin... cause I can be wrong``` +[2017-03-23 21:47:07.952] [INFO] channels - /r/littlespace: #helpers: : quit typing to me +[2017-03-23 21:47:12.859] [INFO] channels - /r/littlespace: #helpers: : for the love of god +[2017-03-23 21:47:19.746] [INFO] channels - /r/littlespace: #helpers: : ```[9:47 PM] Corri: What happens in these circumstances is that, helpers will over step boundries and piss people off +``` +[2017-03-23 21:47:23.040] [INFO] channels - /r/littlespace: #helpers: : Matt +[2017-03-23 21:47:24.647] [INFO] channels - /r/littlespace: #helpers: : Stop +[2017-03-23 21:47:27.094] [INFO] channels - /r/littlespace: #helpers: : Fucking +[2017-03-23 21:47:30.535] [INFO] channels - /r/littlespace: #helpers: : Responding +[2017-03-23 21:47:38.214] [INFO] channels - /r/littlespace: #helpers: : i'm not now +[2017-03-23 21:47:40.521] [INFO] channels - /r/littlespace: #helpers: : Send him this +[2017-03-23 21:47:45.498] [INFO] channels - /r/littlespace: #helpers: : Ծ‸ Ծ +[2017-03-23 21:47:46.239] [INFO] channels - /r/littlespace: #media_sharing: : http://www.dollskill.com/mismatched-rainbow-cloud-socks.html +[2017-03-23 21:47:47.113] [INFO] channels - /r/littlespace: #helpers: : he's just going on and on and on and on +[2017-03-23 21:47:52.679] [INFO] channels - /r/littlespace: #media_sharing: : CUTE SOCKS!!!! +[2017-03-23 21:47:53.921] [INFO] channels - /r/littlespace: #helpers: : 🖕🖕🖕🖕 +[2017-03-23 21:48:06.238] [INFO] channels - /r/littlespace: #gaming: : Codes for Clawbert! - CASUALFRIDAY, SHOWMETHEMONEY, IWANABEAPIRATE, LOVEKLEPTOCAT +[2017-03-23 21:48:07.931] [INFO] channels - /r/littlespace: #helpers: : Seriously. It's not going to go anywhere and you don't need to defend anything. Let him get pissed and tall to nidalee +[2017-03-23 21:48:08.546] [INFO] channels - /r/littlespace: #general: : I got 10 +[2017-03-23 21:48:10.978] [INFO] channels - /r/littlespace: #helpers: : With love from ariels big black cock +[2017-03-23 21:48:18.651] [INFO] channels - /r/littlespace: #helpers: : ```[9:47 PM] Corri: and other people in the community will defend the helpers +[9:47 PM] Corri: and that fractures the community. +[9:47 PM] Corri: Three mods is plenty for a chat of that size.``` + +I think he's salty because we didn't give him the opportunity. +[2017-03-23 21:48:26.055] [INFO] channels - /r/littlespace: #helpers: : Yep +[2017-03-23 21:48:27.919] [INFO] channels - /r/littlespace: #helpers: : ```[9:48 PM] Corri: I think the bot can handle anything the helpers should be doing. +``` +[2017-03-23 21:48:32.822] [INFO] channels - /r/littlespace: #general: : I'm going to play Fantasy Story now +[2017-03-23 21:48:36.340] [INFO] channels - /r/littlespace: #helpers: : Fuck him. +[2017-03-23 21:48:39.361] [INFO] channels - /r/littlespace: #helpers: : Seriously +[2017-03-23 21:48:39.797] [INFO] channels - /r/littlespace: #helpers: : That's nice but it's not going to change anything +[2017-03-23 21:48:42.726] [INFO] channels - /r/littlespace: #helpers: : Why does it matter +[2017-03-23 21:48:48.281] [INFO] channels - /r/littlespace: #helpers: : Please stop talking to him. +[2017-03-23 21:48:55.742] [INFO] channels - /r/littlespace: #helpers: : Refer him to me and I'll take care of it +[2017-03-23 21:48:56.051] [INFO] channels - /r/littlespace: #general: : Are we talking about a game? I'm lost lol +[2017-03-23 21:48:57.370] [INFO] channels - /r/littlespace: #helpers: : I'm not responding. +[2017-03-23 21:49:01.040] [INFO] channels - /r/littlespace: #helpers: : ```[9:48 PM] Corri: Three is almost too many. +[9:48 PM] Corri: I think the right ratio is One mod to every 80-100 users.``` +[2017-03-23 21:49:04.026] [INFO] channels - /r/littlespace: #helpers: : I don't want you guys getting fucked +[2017-03-23 21:49:04.816] [INFO] channels - /r/littlespace: #helpers: : Why is he being so salty? +[2017-03-23 21:49:10.440] [INFO] channels - /r/littlespace: #helpers: : It's not his decision +[2017-03-23 21:49:10.649] [INFO] channels - /r/littlespace: #gaming: : What are those for? 😮 +[2017-03-23 21:49:17.496] [INFO] channels - /r/littlespace: #helpers: : Mad cause he didn't get the opportunity +[2017-03-23 21:49:18.270] [INFO] channels - /r/littlespace: #helpers: : Because you told him to move and he's a huge baby. +[2017-03-23 21:49:18.805] [INFO] channels - /r/littlespace: #helpers: : That's not enough. He can bitch to nidalee or blue. Just stop talking to him War +[2017-03-23 21:49:20.526] [INFO] channels - /r/littlespace: #general: : yes +[2017-03-23 21:49:23.190] [INFO] channels - /r/littlespace: #helpers: : And <@173239190190817280>, as much as I respect your orders, I can NOT fuck that. +[2017-03-23 21:49:28.308] [INFO] channels - /r/littlespace: #helpers: : Ew +[2017-03-23 21:49:31.352] [INFO] channels - /r/littlespace: #helpers: : Ew. +[2017-03-23 21:49:31.940] [INFO] channels - /r/littlespace: #helpers: : Not like that +[2017-03-23 21:49:32.114] [INFO] channels - /r/littlespace: #general: : What game?! I love games! +[2017-03-23 21:49:33.596] [INFO] channels - /r/littlespace: #helpers: : Not even if I taped his mouth and put a bag over his head. +[2017-03-23 21:49:39.172] [INFO] channels - /r/littlespace: #helpers: : Wait +[2017-03-23 21:49:41.493] [INFO] channels - /r/littlespace: #gaming: : Money, KleptoCats hat, I think +[2017-03-23 21:49:42.945] [INFO] channels - /r/littlespace: #helpers: : Still counts +[2017-03-23 21:49:46.706] [INFO] channels - /r/littlespace: #gaming: : These are the ones that I found +[2017-03-23 21:49:51.897] [INFO] channels - /r/littlespace: #helpers: : Opportunity for being a mod, you mean? +[2017-03-23 21:49:55.271] [INFO] channels - /r/littlespace: #helpers: : Yes. +[2017-03-23 21:49:58.216] [INFO] channels - /r/littlespace: #helpers: : Oh my god +[2017-03-23 21:49:59.802] [INFO] channels - /r/littlespace: #helpers: : Yeah +[2017-03-23 21:50:00.719] [INFO] channels - /r/littlespace: #general: : It was a game called Clawbert but now I'm playing something else +[2017-03-23 21:50:06.372] [INFO] channels - /r/littlespace: #general: : Oh ok +[2017-03-23 21:50:06.535] [INFO] channels - /r/littlespace: #helpers: : Not worth it +[2017-03-23 21:50:07.457] [INFO] channels - /r/littlespace: #helpers: : LIKE HELL I WOULD WANT THEM ON OUR TEAM +[2017-03-23 21:50:11.053] [INFO] channels - /r/littlespace: #helpers: : Next time I'm just going to use the move along storm troopers gif +[2017-03-23 21:50:12.897] [INFO] channels - /r/littlespace: #helpers: : I'd fucking quit. +[2017-03-23 21:50:15.679] [INFO] channels - /r/littlespace: #gaming: : <@294618642119917568> <@281554111047008266> <@274917231778070528> idk tag more of those who play clawbert too! +[2017-03-23 21:50:26.689] [INFO] channels - /r/littlespace: #general: : Called Fantasy Forest +[2017-03-23 21:50:29.497] [INFO] channels - /r/littlespace: #helpers: : Wait he's salty because ariel and I got it? +[2017-03-23 21:50:32.321] [INFO] channels - /r/littlespace: #helpers: : That's fucking lame. +[2017-03-23 21:50:38.094] [INFO] channels - /r/littlespace: #general: : Ooh +[2017-03-23 21:50:40.313] [INFO] channels - /r/littlespace: #helpers: : I've not even seen corri around as much +[2017-03-23 21:50:41.703] [INFO] channels - /r/littlespace: #helpers: : Yes. +[2017-03-23 21:50:42.993] [INFO] channels - /r/littlespace: #general: : Yeah +[2017-03-23 21:50:43.064] [INFO] channels - /r/littlespace: #gaming: : I got the kitty hat this morning!! +[2017-03-23 21:50:43.723] [INFO] channels - /r/littlespace: #helpers: : Yeah. Cause we trust you guys +[2017-03-23 21:50:45.331] [INFO] channels - /r/littlespace: #helpers: : As ariel, or I, for that matter +[2017-03-23 21:50:56.956] [INFO] channels - /r/littlespace: #gaming: : oo nice! +[2017-03-23 21:51:14.239] [INFO] channels - /r/littlespace: #gaming: : I still have basic crane >< but not playing too much xD +[2017-03-23 21:51:19.924] [INFO] channels - /r/littlespace: #gaming: : lol pretty much if anyone plays Clawbert +[2017-03-23 21:51:22.964] [INFO] channels - /r/littlespace: #general: : Fantasy Forest Story, land before dragons +[2017-03-23 21:51:31.253] [INFO] channels - /r/littlespace: #helpers: : Anyway, thanks. But, fuck corri +[2017-03-23 21:51:36.116] [INFO] channels - /r/littlespace: #general: : GET IT!! +[2017-03-23 21:51:43.862] [INFO] channels - /r/littlespace: #helpers: : ```[9:51 PM] Corri: Again, not trying to come off as an asshole +[9:51 PM] WARBIRD199: In the end, it's blue's server. If you have a issue with how the discord is ran, I encourage you to mesasge Blue or Nidalee on Reddit. We respect opinions of our members. +[9:51 PM] Corri: But.. I have 12 years of experience running these kinda communities >:``` +[2017-03-23 21:51:49.252] [INFO] channels - /r/littlespace: #general: : Why would you want to live in a world without dragons? lol I love dragons +[2017-03-23 21:51:51.789] [INFO] channels - /r/littlespace: #helpers: : You might send some precautionary mail to Nid. +[2017-03-23 21:52:02.236] [INFO] channels - /r/littlespace: #general: : Get what, Ariel? +[2017-03-23 21:52:07.262] [INFO] channels - /r/littlespace: #helpers: : Taking it to PM equates to not airing out dirty laundry and making people feel sensitive and upset about things. It prevents a mob mentality from forming. Corri was just salty that not a lot of people agree with him +[2017-03-23 21:52:08.560] [INFO] channels - /r/littlespace: #helpers: : I wil +[2017-03-23 21:52:12.380] [INFO] channels - /r/littlespace: #general: : That's when you download Dragon City. 😛 +[2017-03-23 21:52:17.446] [INFO] channels - /r/littlespace: #helpers: : Fucking dick licking douche canoe +[2017-03-23 21:52:25.252] [INFO] channels - /r/littlespace: #helpers: : ```[9:51 PM] Corri: Ah, I thought you took over for Blue? +[9:52 PM] WARBIRD199: We're all a team, but I don't run the place. I'm just a mod.``` +[2017-03-23 21:52:29.594] [INFO] channels - /r/littlespace: #helpers: : *i have 12 years of experience running these kinda communities* +[2017-03-23 21:52:31.256] [INFO] channels - /r/littlespace: #helpers: : Amazing +[2017-03-23 21:52:37.186] [INFO] channels - /r/littlespace: #gaming: : Only cleared machine once D; +[2017-03-23 21:52:40.597] [INFO] channels - /r/littlespace: #helpers: : Is he bragging?? Pls submit a CV +[2017-03-23 21:52:47.530] [INFO] channels - /r/littlespace: #helpers: : I've been an admin on Facebook pages for 5 years, does he want a cookie +[2017-03-23 21:52:51.124] [INFO] channels - /r/littlespace: #helpers: : !cookie +[2017-03-23 21:52:51.325] [INFO] channels - /r/littlespace: #helpers: : *gives <@!274917231778070528> a freshly made Oatmeal Raisin cookie.* +[2017-03-23 21:52:54.773] [INFO] channels - /r/littlespace: #gaming: : That's true. I'm amazing. I'm so influential *flicks hair* +[2017-03-23 21:52:58.600] [INFO] channels - /r/littlespace: #general: : I have that one! +[2017-03-23 21:53:05.917] [INFO] channels - /r/littlespace: #general: : GET CLAWBERT +[2017-03-23 21:53:08.735] [INFO] channels - /r/littlespace: #helpers: : !bacon +[2017-03-23 21:53:08.880] [INFO] channels - /r/littlespace: #helpers: : *shits on it, throws it at corri* +[2017-03-23 21:53:08.921] [INFO] channels - /r/littlespace: #helpers: : *gives <@!200944723035160576> a strip of delicious bacon.* +[2017-03-23 21:53:12.271] [INFO] channels - /r/littlespace: #general: : I have it +[2017-03-23 21:53:18.462] [INFO] channels - /r/littlespace: #helpers: : _eats the bacon._ +[2017-03-23 21:53:34.230] [INFO] channels - /r/littlespace: #helpers: : !vegetarianbacon +[2017-03-23 21:53:40.556] [INFO] channels - /r/littlespace: #helpers: : ```[9:52 PM] Corri: Well I left the chat because... yeah +[9:52 PM] Corri: No one listening +[9:52 PM] Corri: just barking orders +NEW MESSAGES +[9:53 PM] Corri: So, feel free to send this to Blue, since I dont have them added.\``` +[2017-03-23 21:53:44.697] [INFO] channels - /r/littlespace: #helpers: : Veggie bacon is blasphemy. +[2017-03-23 21:53:50.378] [INFO] channels - /r/littlespace: #general: : <@273616426261020672> get clawbert!!!! +[2017-03-23 21:53:54.775] [INFO] channels - /r/littlespace: #helpers: : oh ho ho +[2017-03-23 21:53:56.250] [INFO] channels - /r/littlespace: #helpers: : ```[9:53 PM] Corri: And, again, its nothing agianst you guys... but since Nanako was added, its just not as fun or safe feeling for me. +``` +[2017-03-23 21:54:05.251] [INFO] channels - /r/littlespace: #helpers: : OH REALLY lol +[2017-03-23 21:54:06.161] [INFO] channels - /r/littlespace: #helpers: : OH HO HO +[2017-03-23 21:54:06.901] [INFO] channels - /r/littlespace: #helpers: : *Shots fired* +[2017-03-23 21:54:17.299] [INFO] channels - /r/littlespace: #helpers: : he's doing a lot of shooting today +[2017-03-23 21:54:22.665] [INFO] channels - /r/littlespace: #media_sharing: : Those socks I would almost kill for those socks @kirkw125 +[2017-03-23 21:54:23.769] [INFO] channels - /r/littlespace: #general: : lol +[2017-03-23 21:54:25.386] [INFO] channels - /r/littlespace: #helpers: : He's got bad aim +[2017-03-23 21:54:39.413] [INFO] channels - /r/littlespace: #helpers: : He's not happy with us, he's not happy with ko, he should have just left instead farting around with his bullshit +[2017-03-23 21:54:42.125] [INFO] channels - /r/littlespace: #helpers: : Probably wouldn't have good aim if he used aimbot +[2017-03-23 21:54:45.261] [INFO] channels - /r/littlespace: #helpers: : Ohh btw, happy news +[2017-03-23 21:54:46.987] [INFO] channels - /r/littlespace: #helpers: : ```[9:54 PM] Corri: Too many rules/conditions that makes it so I and others have to walk on eggshells +[9:54 PM] Corri: for the conveince of mods/senstive/garrish users``` +[2017-03-23 21:54:48.792] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 21:54:52.544] [INFO] channels - /r/littlespace: #helpers: : MY WEIGHT FINALLY INCREASED +[2017-03-23 21:54:53.332] [INFO] channels - /r/littlespace: #general: : I used to play disney tsum tsum but it got me so mad I quit +[2017-03-23 21:55:06.789] [INFO] channels - /r/littlespace: #helpers: : PROUD OF YOU +[2017-03-23 21:55:14.957] [INFO] channels - /r/littlespace: #helpers: : You know why he's mad? Because I've told him that incest talk is not okay. +[2017-03-23 21:55:17.812] [INFO] channels - /r/littlespace: #helpers: : He's probs salty because no ass pics anymore +[2017-03-23 21:55:27.730] [INFO] channels - /r/littlespace: #helpers: : To which I say +[2017-03-23 21:55:30.581] [INFO] channels - /r/littlespace: #helpers: : I forgot about that. +[2017-03-23 21:55:31.409] [INFO] channels - /r/littlespace: #general: : I want ice cream +[2017-03-23 21:55:31.679] [INFO] channels - /r/littlespace: #helpers: : Oh now he wants to attack the *garRish members* too? +[2017-03-23 21:55:32.008] [INFO] channels - /r/littlespace: #general: : Does it cost money? +[2017-03-23 21:55:35.431] [INFO] channels - /r/littlespace: #helpers: : HUEHUEHUE +[2017-03-23 21:55:41.397] [INFO] channels - /r/littlespace: #helpers: : No, Corri was openly saying he liked incest and Blue and I told him no. +[2017-03-23 21:55:48.289] [INFO] channels - /r/littlespace: #helpers: : ```[9:55 PM] Corri: Triggering borderline PTSD for me, lol. +``` +[2017-03-23 21:55:56.676] [INFO] channels - /r/littlespace: #general: : Not Clawbert +[2017-03-23 21:55:57.477] [INFO] channels - /r/littlespace: #helpers: : Being in a cgl discord server DOES NOT FUCKING MEAN YOU CAN TALK ABOUT INCEST +[2017-03-23 21:56:02.525] [INFO] channels - /r/littlespace: #helpers: : where my popcorn... +[2017-03-23 21:56:05.072] [INFO] channels - /r/littlespace: #general: : Oh cool lol +[2017-03-23 21:56:11.438] [INFO] channels - /r/littlespace: #helpers: : Oh I'm so sorry you poor little special snowflake +[2017-03-23 21:56:15.104] [INFO] channels - /r/littlespace: #helpers: : ```[9:56 PM] Corri: Reminds me of ADISC, Misfit Cubs, Cub Nation, Babyfurs and the Cubhouse Cubs, COG +``` +[2017-03-23 21:56:15.509] [INFO] channels - /r/littlespace: #helpers: : Sent a modmail +[2017-03-23 21:56:19.887] [INFO] channels - /r/littlespace: #helpers: : Now just go +[2017-03-23 21:56:22.863] [INFO] channels - /r/littlespace: #helpers: : I kinda just wanna send them a PM telling them to go fuck themselves tbh +[2017-03-23 21:56:25.084] [INFO] channels - /r/littlespace: #helpers: : Suck it up +[2017-03-23 21:56:32.999] [INFO] channels - /r/littlespace: #helpers: : Heh +[2017-03-23 21:56:38.501] [INFO] channels - /r/littlespace: #general: : _is sleepy_ +[2017-03-23 21:56:39.074] [INFO] channels - /r/littlespace: #helpers: : Just send giraffe porn +[2017-03-23 21:56:47.800] [INFO] channels - /r/littlespace: #general: : Omg same. I do that all the time. I always rage quit on tsumtsum +[2017-03-23 21:56:53.733] [INFO] channels - /r/littlespace: #helpers: : Yikes +[2017-03-23 21:57:09.379] [INFO] channels - /r/littlespace: #helpers: : I sent a modmail +[2017-03-23 21:57:10.092] [INFO] channels - /r/littlespace: #helpers: : he's still...going. +[2017-03-23 21:57:13.086] [INFO] channels - /r/littlespace: #helpers: : Thank you blue. +[2017-03-23 21:57:13.117] [INFO] channels - /r/littlespace: #helpers: : Thank you blue +[2017-03-23 21:57:17.031] [INFO] channels - /r/littlespace: #general: : Well when they have special drops, it seems like I NEVER get them +[2017-03-23 21:57:26.625] [INFO] channels - /r/littlespace: #helpers: : War, we've got similar thoughts yahoooo besties! +[2017-03-23 21:57:39.464] [INFO] channels - /r/littlespace: #helpers: : Of course! We're twins! +[2017-03-23 21:57:42.357] [INFO] channels - /r/littlespace: #helpers: : Thank you! Hopefully they finally shut up and move on with their lives. +[2017-03-23 21:57:45.344] [INFO] channels - /r/littlespace: #helpers: : 💛 +[2017-03-23 21:57:45.512] [INFO] channels - /r/littlespace: #general: : Oh Cinderella has a higher drop rate and yet somehow I never got her +[2017-03-23 21:57:50.201] [INFO] channels - /r/littlespace: #general: : or Ursula or whatever +[2017-03-23 21:57:52.697] [INFO] channels - /r/littlespace: #helpers: : ```[9:56 PM] Corri: Reminds me of ADISC, Misfit Cubs, Cub Nation, Babyfurs and the Cubhouse Cubs, COG +[9:56 PM] Corri: All the other littles groups I helped managed kinda fell the same way. +[9:56 PM] Corri: Someone over bearing was appointed mod, or admin... people above them didnt take the cries of "TOO MUCH MODERAITON!" seriously +[9:56 PM] Corri: Mods end up power tripping +[9:56 PM] Corri: and it dies``` +[2017-03-23 21:57:57.044] [INFO] channels - /r/littlespace: #helpers: : I hope that corri will stop +[2017-03-23 21:58:20.085] [INFO] channels - /r/littlespace: #media_sharing: : I just ordered like four pairs of knee high socks +[2017-03-23 21:58:21.302] [INFO] channels - /r/littlespace: #helpers: : Oh wait. Wait. WE ARE OVERBEARING? +[2017-03-23 21:58:21.607] [INFO] channels - /r/littlespace: #general: : And it takes *forever* to earn enough coins to buy a gold or silver box +[2017-03-23 21:58:26.699] [INFO] channels - /r/littlespace: #general: : and to play the events +[2017-03-23 21:58:27.464] [INFO] channels - /r/littlespace: #helpers: : LOL ADISC didn't fall from over modding, rather from under modding. +[2017-03-23 21:58:33.577] [INFO] channels - /r/littlespace: #helpers: : we're power tripping, Meep. +[2017-03-23 21:58:38.325] [INFO] channels - /r/littlespace: #helpers: : Because we're full of power. +[2017-03-23 21:58:42.502] [INFO] channels - /r/littlespace: #helpers: : Dude has no idea what he's talking about, and now I see it. +[2017-03-23 21:58:59.100] [INFO] channels - /r/littlespace: #general: : _is done complaining_ +[2017-03-23 21:59:03.574] [INFO] channels - /r/littlespace: #helpers: : Omg +[2017-03-23 21:59:07.637] [INFO] channels - /r/littlespace: #helpers: : This is so hilarious +[2017-03-23 21:59:08.223] [INFO] channels - /r/littlespace: #helpers: : I just asked him to move along +[2017-03-23 21:59:14.086] [INFO] channels - /r/littlespace: #helpers: : -.- +[2017-03-23 21:59:16.882] [INFO] channels - /r/littlespace: #media_sharing: : Ooohh +[2017-03-23 21:59:25.660] [INFO] channels - /r/littlespace: #helpers: : 12 years of experience running communities? Lmao, please. That's why I've never seen or heard of any of these communities? +[2017-03-23 21:59:35.033] [INFO] channels - /r/littlespace: #helpers: : ```[9:59 PM] Corri: Funny enough, I always got kicked or left because of admin fall out +``` +[2017-03-23 21:59:35.448] [INFO] channels - /r/littlespace: #helpers: : Actually that would make sense nvm +[2017-03-23 21:59:37.300] [INFO] channels - /r/littlespace: #helpers: : I see the trend. +[2017-03-23 21:59:48.729] [INFO] channels - /r/littlespace: #helpers: : Well, it's all corri, not the other admins +[2017-03-23 22:00:27.778] [INFO] channels - /r/littlespace: #media_sharing: : I needs that moogle to go with my Behemoth and Cait Sith +[2017-03-23 22:01:13.757] [INFO] channels - /r/littlespace: #media_sharing: : Would you like some sockies sweety? +[2017-03-23 22:01:17.860] [INFO] channels - /r/littlespace: #helpers: : ```[10:00 PM] Corri: Every time after that I had to take my toys. +[10:00 PM] Corri: and go home +NEW MESSAGES +[10:00 PM] Corri: Which, I am doing again... because I dont want to watch the inevitable crash and burn.``` +[2017-03-23 22:01:23.919] [INFO] channels - /r/littlespace: #helpers: : STOOOOP +[2017-03-23 22:01:45.755] [INFO] channels - /r/littlespace: #helpers: : I guess he doesn't know that we're the best we've ever been. +[2017-03-23 22:01:51.744] [INFO] channels - /r/littlespace: #media_sharing: : I like odd socks +[2017-03-23 22:01:53.103] [INFO] channels - /r/littlespace: #helpers: : And that's due to Meep and Ariel coming on too. +[2017-03-23 22:02:34.219] [INFO] channels - /r/littlespace: #media_sharing: : I has doctor who socks that look like Tom Baker's scarf +[2017-03-23 22:02:34.418] [INFO] channels - /r/littlespace: #helpers: : and now i have the graphs to prove it *snickers* +[2017-03-23 22:02:40.688] [INFO] channels - /r/littlespace: #helpers: : 😂😂😂😂 +[2017-03-23 22:02:47.768] [INFO] channels - /r/littlespace: #helpers: : Oh my god. +[2017-03-23 22:03:06.824] [INFO] channels - /r/littlespace: #helpers: : Ahhhh +[2017-03-23 22:03:32.203] [INFO] channels - /r/littlespace: #helpers: : Josie and I are super warm and cute and inviting and funny and cool and sweet +[2017-03-23 22:03:40.860] [INFO] channels - /r/littlespace: #helpers: : and the best little helpers ever! +[2017-03-23 22:03:42.980] [INFO] channels - /r/littlespace: #helpers: : That's why we win +[2017-03-23 22:03:55.980] [INFO] channels - /r/littlespace: #helpers: : Did like. Corri set themselves up with expectations? Bc that's really silly +[2017-03-23 22:04:13.978] [INFO] channels - /r/littlespace: #helpers: : But yes we're cool and awesome and really sweet and ariel I can be the good cop and you can be the bad cop +[2017-03-23 22:04:14.969] [INFO] channels - /r/littlespace: #general: : Has anyone downloaded Super Mario Run and what you think? +[2017-03-23 22:04:45.744] [INFO] channels - /r/littlespace: #general: : I didn't like it when I had it for iPhone +[2017-03-23 22:04:54.323] [INFO] channels - /r/littlespace: #helpers: : no no, <@234126386703499264>. i'm a good cop. +[2017-03-23 22:05:06.761] [INFO] channels - /r/littlespace: #general: : kk +[2017-03-23 22:05:31.328] [INFO] channels - /r/littlespace: #gaming: : <@294618642119917568> how do you feel about Mario run? Do you have android? +[2017-03-23 22:05:38.239] [INFO] channels - /r/littlespace: #helpers: : I can be your junior good cop +[2017-03-23 22:05:44.839] [INFO] channels - /r/littlespace: #helpers: : Yes! +[2017-03-23 22:05:47.530] [INFO] channels - /r/littlespace: #helpers: : 📛 +[2017-03-23 22:05:54.593] [INFO] channels - /r/littlespace: #gaming: : I do have it +[2017-03-23 22:05:58.133] [INFO] channels - /r/littlespace: #helpers: : 🍾 +[2017-03-23 22:06:03.086] [INFO] channels - /r/littlespace: #gaming: : I was considering that or Sonic Dash +[2017-03-23 22:06:09.768] [INFO] channels - /r/littlespace: #helpers: : I'm your junior bad cop <@222611472688218112> +[2017-03-23 22:06:11.645] [INFO] channels - /r/littlespace: #helpers: : YES I CAN HAVE MY CG FOR THE WHOLE SATURDAY YES +[2017-03-23 22:06:12.166] [INFO] channels - /r/littlespace: #media_sharing: : Oyea? http://www.gamestop.com/collectibles/toys/my-little-pony-leggings-xl-xxl/127546 +[2017-03-23 22:06:15.097] [INFO] channels - /r/littlespace: #helpers: : IM SO HAPPY +[2017-03-23 22:06:19.750] [INFO] channels - /r/littlespace: #helpers: : Awwwwhhh yay +[2017-03-23 22:06:22.406] [INFO] channels - /r/littlespace: #helpers: : and he's leaving the army at 5pm later!!!!! +[2017-03-23 22:06:40.956] [INFO] channels - /r/littlespace: #gaming: : Oooo I love sonic! +[2017-03-23 22:06:45.611] [INFO] channels - /r/littlespace: #helpers: : YES ARIEL +[2017-03-23 22:06:50.790] [INFO] channels - /r/littlespace: #helpers: : And he's really happy with my weight gain YES +[2017-03-23 22:07:05.696] [INFO] channels - /r/littlespace: #helpers: : He's like princess I'm so proud of you.... and myself for feeding you. +[2017-03-23 22:07:07.857] [INFO] channels - /r/littlespace: #gaming: : There's this face mask made by glam glow that's sonic themed +[2017-03-23 22:07:17.620] [INFO] channels - /r/littlespace: #helpers: : I was severely underweight when I started my relationship with him +[2017-03-23 22:07:17.667] [INFO] channels - /r/littlespace: #helpers: : you weigh about as much as I do. +[2017-03-23 22:07:28.732] [INFO] channels - /r/littlespace: #helpers: : Are you secretly a tiny Asian woman +[2017-03-23 22:07:38.407] [INFO] channels - /r/littlespace: #helpers: : I weigh 54.4kg. +[2017-03-23 22:07:42.729] [INFO] channels - /r/littlespace: #helpers: : *is the fattest little in the room* +[2017-03-23 22:07:48.209] [INFO] channels - /r/littlespace: #gaming: : cute +[2017-03-23 22:07:56.856] [INFO] channels - /r/littlespace: #helpers: : /120lbs +[2017-03-23 22:07:59.538] [INFO] channels - /r/littlespace: #helpers: : Don't say that, ariel +[2017-03-23 22:08:10.295] [INFO] channels - /r/littlespace: #helpers: : ❤️ +[2017-03-23 22:08:36.420] [INFO] channels - /r/littlespace: #helpers: : So hip and cool +[2017-03-23 22:08:44.073] [INFO] channels - /r/littlespace: #helpers: : Fellow kids +[2017-03-23 22:08:49.483] [INFO] channels - /r/littlespace: #helpers: : But honestly though. Are there anything placed in schools, or institutions to fight obesity? I'm genuinely curious since like, US does have an issue with obesity and all the health related issues +[2017-03-23 22:09:03.204] [INFO] channels - /r/littlespace: #helpers: : Nope +[2017-03-23 22:09:26.079] [INFO] channels - /r/littlespace: #helpers: : Like we have this thing, we do a regular height and weight check when we're in government schools and if you're overweight, we haul you in for an extra running class either during recess, or before/after school +[2017-03-23 22:09:29.824] [INFO] channels - /r/littlespace: #helpers: : In high school my mother told me it was okay to throw up after meals +[2017-03-23 22:09:33.012] [INFO] channels - /r/littlespace: #helpers: : So I did +[2017-03-23 22:09:36.957] [INFO] channels - /r/littlespace: #helpers: : For four years +[2017-03-23 22:09:37.145] [INFO] channels - /r/littlespace: #helpers: : And they'll make sure that you come, +[2017-03-23 22:09:58.080] [INFO] channels - /r/littlespace: #helpers: : You sound like you have a great mother. +[2017-03-23 22:10:06.563] [INFO] channels - /r/littlespace: #helpers: : Phenomenal +[2017-03-23 22:10:07.390] [INFO] channels - /r/littlespace: #media_sharing: : <@182210174969184257> omg I'm gonna be poor! +[2017-03-23 22:10:23.326] [INFO] channels - /r/littlespace: #helpers: : and then I gained 90 pounds in college +[2017-03-23 22:10:30.615] [INFO] channels - /r/littlespace: #helpers: : My mother doesn't have a lot of flaws. Just doesn't know when to stop helping people. +[2017-03-23 22:10:34.583] [INFO] channels - /r/littlespace: #media_sharing: : <@178672961610448896> late but I FREAKIN LOVE THE MAIL MOOGLE +[2017-03-23 22:10:35.687] [INFO] channels - /r/littlespace: #media_sharing: : +[2017-03-23 22:10:37.653] [INFO] channels - /r/littlespace: #helpers: : And that you can't help those who don't want to be helped. +[2017-03-23 22:10:46.870] [INFO] channels - /r/littlespace: #helpers: : Yeah that's important +[2017-03-23 22:10:47.366] [INFO] channels - /r/littlespace: #helpers: : like taking in random drug addict family members +[2017-03-23 22:10:49.706] [INFO] channels - /r/littlespace: #gaming: : I like Fire Emblem Heroes and Brave Frontier +[2017-03-23 22:10:50.481] [INFO] channels - /r/littlespace: #helpers: : **RyotaroDadjima#3121** deleted in <#223528951857938442>: +[2017-03-23 22:10:57.684] [INFO] channels - /r/littlespace: #media_sharing: : WRONG MEME +[2017-03-23 22:11:10.005] [INFO] channels - /r/littlespace: #media_sharing: : HOW COULD YOU +[2017-03-23 22:11:13.983] [INFO] channels - /r/littlespace: #helpers: : **RyotaroDadjima#3121** deleted in <#223528951857938442>: WRONG MEME +[2017-03-23 22:11:15.511] [INFO] channels - /r/littlespace: #gaming: : Grrrrrrrrr all the Disney games are large downloads. This sucks +[2017-03-23 22:11:25.009] [INFO] channels - /r/littlespace: #helpers: : -.- +[2017-03-23 22:11:28.740] [INFO] channels - /r/littlespace: #helpers: : we caught him +[2017-03-23 22:11:29.811] [INFO] channels - /r/littlespace: #helpers: : He accidentally posted a racist meme LMAO +[2017-03-23 22:11:30.157] [INFO] channels - /r/littlespace: #helpers: : don't worry +[2017-03-23 22:11:39.714] [INFO] channels - /r/littlespace: #helpers: : I was being sarcastic +[2017-03-23 22:11:44.427] [INFO] channels - /r/littlespace: #helpers: : I didn't even see it lol +[2017-03-23 22:11:46.023] [INFO] channels - /r/littlespace: #helpers: : RACISTS ON 4CHAN* +[2017-03-23 22:11:53.538] [INFO] channels - /r/littlespace: #helpers: : He said it's not racist im just dumb +[2017-03-23 22:11:58.032] [INFO] channels - /r/littlespace: #helpers: : Ignore me +[2017-03-23 22:12:00.476] [INFO] channels - /r/littlespace: #helpers: : **arielhasfins#5293** deleted in <#223528951857938442>: HOW COULD YOU +[2017-03-23 22:12:01.977] [INFO] channels - /r/littlespace: #helpers: : Wait he didn't say I'm dumb +[2017-03-23 22:12:04.910] [INFO] channels - /r/littlespace: #helpers: : I said that +[2017-03-23 22:12:07.545] [INFO] channels - /r/littlespace: #helpers: : UGH +[2017-03-23 22:12:12.189] [INFO] channels - /r/littlespace: #helpers: : so ... are you dumb or not? +[2017-03-23 22:12:15.944] [INFO] channels - /r/littlespace: #helpers: : this is important +[2017-03-23 22:12:17.627] [INFO] channels - /r/littlespace: #media_sharing: : +[2017-03-23 22:12:28.270] [INFO] channels - /r/littlespace: #helpers: : SHE IS INTELLIGENT AF +[2017-03-23 22:12:32.484] [INFO] channels - /r/littlespace: #gaming: : Sonic Dash is probably one of the better mobile games imo +[2017-03-23 22:12:36.000] [INFO] channels - /r/littlespace: #helpers: : No, that's you. :) +[2017-03-23 22:12:51.709] [INFO] channels - /r/littlespace: #helpers: : oh, you! +[2017-03-23 22:12:58.721] [INFO] channels - /r/littlespace: #media_sharing: : LOL +[2017-03-23 22:13:03.883] [INFO] channels - /r/littlespace: #helpers: : 😊😊☺️☺️ +[2017-03-23 22:13:16.677] [INFO] channels - /r/littlespace: #media_sharing: : https://youtu.be/uYAqDUfNTtU +[2017-03-23 22:13:37.012] [INFO] channels - /r/littlespace: #gaming: : I am thinking of getting it +[2017-03-23 22:13:39.484] [INFO] channels - /r/littlespace: #helpers: : First they're sour, then they're sweet. +[2017-03-23 22:13:52.335] [INFO] channels - /r/littlespace: #media_sharing: : KNOCK KNOCK OPEN UP THE DOOR AND BLAM +[2017-03-23 22:14:08.662] [INFO] channels - /r/littlespace: #media_sharing: : I was dying when he sent it to me +[2017-03-23 22:14:14.197] [INFO] channels - /r/littlespace: #media_sharing: : :D. Me and my bf plan to put letters into his mail pouch and pass him back and forth to communicate sometimes ❤ +[2017-03-23 22:14:28.852] [INFO] channels - /r/littlespace: #media_sharing: : Dmx is best +[2017-03-23 22:14:45.034] [INFO] channels - /r/littlespace: #media_sharing: : Omg <@178672961610448896> ADORABLE 😭 +[2017-03-23 22:15:00.572] [INFO] channels - /r/littlespace: #helpers: : bleh, i keep sneezing and I feel terrible +[2017-03-23 22:15:08.777] [INFO] channels - /r/littlespace: #helpers: : it's also gone up like 30 degrees outside since noon +[2017-03-23 22:15:13.964] [INFO] channels - /r/littlespace: #helpers: : and going to get hotter tonight. +[2017-03-23 22:15:14.426] [INFO] channels - /r/littlespace: #helpers: : .w +[2017-03-23 22:15:15.005] [INFO] channels - /r/littlespace: #helpers: : Clear, 59F (15C) (288.15K) | Humidity: 60% | Wind: N @ 6.14mph (9.9km/h) | 0% chance of precipitation (63088 - Valley Park, MO (US)) +[2017-03-23 22:15:40.863] [INFO] channels - /r/littlespace: #helpers: : .w Milford PA +[2017-03-23 22:15:41.782] [INFO] channels - /r/littlespace: #helpers: : Clear, 27F (-3C) (270.15K) | Humidity: 57% | Wind: N @ 2.74mph (4.4km/h) | 0% chance of precipitation (Milford Park, Pennsylvania (US)) +[2017-03-23 22:15:58.506] [INFO] channels - /r/littlespace: #helpers: : .w Dingmans Ferry PA +[2017-03-23 22:15:59.354] [INFO] channels - /r/littlespace: #helpers: : Clear, 27F (-3C) (270.15K) | Humidity: 58% | Wind: N @ 1.74mph (2.8km/h) | 0% chance of precipitation (Dingmans Ferry, Pennsylvania (US)) +[2017-03-23 22:16:15.057] [INFO] channels - /r/littlespace: #helpers: : Hm +[2017-03-23 22:16:38.035] [INFO] channels - /r/littlespace: #helpers: : .yt deadpool butt +[2017-03-23 22:16:38.840] [INFO] channels - /r/littlespace: #helpers: : Ryan Reynolds' Butt Double in "Deadpool" | Celebrity Spotlight | E! News - https://youtu.be/aObMMGUzLP8 [ 10,663 views | 4.91 rating w/ 110 likes (2 dislikes) | Duration: 2m26s | Uploaded: 2016-02-10 by E! News ] +[2017-03-23 22:16:46.146] [INFO] channels - /r/littlespace: #helpers: : Important +[2017-03-23 22:17:51.090] [INFO] channels - /r/littlespace: #general: : Ugh where my homies at +[2017-03-23 22:17:57.943] [INFO] channels - /r/littlespace: #helpers: : Heading home... talk to you all later. If I get on or not. I'm undecided. +[2017-03-23 22:18:12.744] [INFO] channels - /r/littlespace: #helpers: : Hm +[2017-03-23 22:18:14.739] [INFO] channels - /r/littlespace: #helpers: : Vague +[2017-03-23 22:18:28.356] [INFO] channels - /r/littlespace: #helpers: : Have a safe drive! +[2017-03-23 22:20:04.806] [INFO] channels - /r/littlespace: #helpers: : .w Clementi, Singapore +[2017-03-23 22:20:05.391] [INFO] channels - /r/littlespace: #helpers: : I couldn't find that location :( [try being more specific if applicable] +[2017-03-23 22:20:09.149] [INFO] channels - /r/littlespace: #helpers: : Damnit. Why +[2017-03-23 22:20:15.079] [INFO] channels - /r/littlespace: #helpers: : .w Buona Vista, Singapore +[2017-03-23 22:20:16.841] [INFO] channels - /r/littlespace: #helpers: : Drizzle, 87F (31C) (304.15K) / feels like 105F (40C) (313.15K) | Humidity: 82% | Wind: N @ 4.73mph (7.6km/h) | 55% chance of rain (Buona Vista, Singapore (SG)) +[2017-03-23 22:20:26.392] [INFO] channels - /r/littlespace: #helpers: : This is disgusting. No wonder I'm sick +[2017-03-23 22:20:31.772] [INFO] channels - /r/littlespace: #general: : HERE +[2017-03-23 22:21:31.462] [INFO] channels - /r/littlespace: #general: : Here? +[2017-03-23 22:21:51.134] [INFO] channels - /r/littlespace: #general: : Beer? Gasp! Bears!? +[2017-03-23 22:22:05.956] [INFO] channels - /r/littlespace: #general: : AH THERE YOU ARE BBS +[2017-03-23 22:22:19.335] [INFO] channels - /r/littlespace: #general: : How's your day going guys? +[2017-03-23 22:22:43.564] [INFO] channels - /r/littlespace: #helpers: : Blah. Kinda feeling all depressed. Don't know why. +[2017-03-23 22:22:44.979] [INFO] channels - /r/littlespace: #helpers: : I kinda want to start a game of cards against humanity +[2017-03-23 22:22:47.641] [INFO] channels - /r/littlespace: #helpers: : nooo +[2017-03-23 22:22:52.434] [INFO] channels - /r/littlespace: #helpers: : 💙💖💙💖💙 +[2017-03-23 22:22:56.820] [INFO] channels - /r/littlespace: #helpers: : No depression +[2017-03-23 22:23:02.347] [INFO] channels - /r/littlespace: #helpers: : Can't help it. +[2017-03-23 22:23:11.336] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> please drink some orange juice +[2017-03-23 22:23:14.078] [INFO] channels - /r/littlespace: #helpers: : I may play that when i get home though. +[2017-03-23 22:23:16.480] [INFO] channels - /r/littlespace: #helpers: : If you want to. +[2017-03-23 22:23:19.807] [INFO] channels - /r/littlespace: #helpers: : Yes! +[2017-03-23 22:23:20.263] [INFO] channels - /r/littlespace: #general: : Good. You? +[2017-03-23 22:23:27.565] [INFO] channels - /r/littlespace: #helpers: : Please! +[2017-03-23 22:23:29.803] [INFO] channels - /r/littlespace: #helpers: : Play play play! +[2017-03-23 22:23:32.393] [INFO] channels - /r/littlespace: #helpers: : Only if Meep joins. +[2017-03-23 22:23:37.651] [INFO] channels - /r/littlespace: #helpers: : Can't go without my twin +[2017-03-23 22:23:40.164] [INFO] channels - /r/littlespace: #general: : I'm okay! SO BORED. +[2017-03-23 22:23:40.594] [INFO] channels - /r/littlespace: #helpers: : I'm asking my CG if his mum allows me to go over for lunch and to rest +[2017-03-23 22:23:46.510] [INFO] channels - /r/littlespace: #helpers: : Because I don't want to go home +[2017-03-23 22:23:52.408] [INFO] channels - /r/littlespace: #helpers: : It's noisy, has a lot of construction work +[2017-03-23 22:24:02.427] [INFO] channels - /r/littlespace: #helpers: : She's got a full day ahead of her +[2017-03-23 22:24:09.305] [INFO] channels - /r/littlespace: #helpers: : I know. +[2017-03-23 22:24:15.686] [INFO] channels - /r/littlespace: #helpers: : No. I think I'm skipping class +[2017-03-23 22:24:21.191] [INFO] channels - /r/littlespace: #helpers: : Oh goodness +[2017-03-23 22:24:21.660] [INFO] channels - /r/littlespace: #general: : Is going alright, lack of sweet stuff in the house tho ;c +[2017-03-23 22:24:24.053] [INFO] channels - /r/littlespace: #helpers: : The doctor told me I should go home too +[2017-03-23 22:24:25.614] [INFO] channels - /r/littlespace: #helpers: : LOL +[2017-03-23 22:24:27.615] [INFO] channels - /r/littlespace: #helpers: : You need to take vitamins +[2017-03-23 22:24:30.520] [INFO] channels - /r/littlespace: #helpers: : Please +[2017-03-23 22:24:40.409] [INFO] channels - /r/littlespace: #helpers: : Vitamins are for the weak +[2017-03-23 22:24:49.039] [INFO] channels - /r/littlespace: #helpers: : LEGIT! +[2017-03-23 22:24:49.491] [INFO] channels - /r/littlespace: #helpers: : Shush +[2017-03-23 22:24:51.767] [INFO] channels - /r/littlespace: #helpers: : For once, an university doctor's giving me an MC without me asking +[2017-03-23 22:25:00.815] [INFO] channels - /r/littlespace: #helpers: : Mc? +[2017-03-23 22:25:00.818] [INFO] channels - /r/littlespace: #helpers: : So that's really amazing +[2017-03-23 22:25:05.116] [INFO] channels - /r/littlespace: #general: : I'm so sleepy :/ +[2017-03-23 22:25:05.425] [INFO] channels - /r/littlespace: #helpers: : Man crush? +[2017-03-23 22:25:05.631] [INFO] channels - /r/littlespace: #helpers: : Medical certificate +[2017-03-23 22:25:09.584] [INFO] channels - /r/littlespace: #helpers: : Heh +[2017-03-23 22:25:15.364] [INFO] channels - /r/littlespace: #helpers: : For like skippig +[2017-03-23 22:25:20.233] [INFO] channels - /r/littlespace: #helpers: : Yup +[2017-03-23 22:25:23.986] [INFO] channels - /r/littlespace: #helpers: : Skippig +[2017-03-23 22:25:28.696] [INFO] channels - /r/littlespace: #helpers: : yep +[2017-03-23 22:25:32.027] [INFO] channels - /r/littlespace: #helpers: : Your English +[2017-03-23 22:25:40.678] [INFO] channels - /r/littlespace: #general: : I just had some sweets and they were gross +[2017-03-23 22:25:41.160] [INFO] channels - /r/littlespace: #helpers: : If I'm gonna play, you'll have to at least give me about an hour +[2017-03-23 22:25:42.665] [INFO] channels - /r/littlespace: #general: : ): +[2017-03-23 22:25:50.688] [INFO] channels - /r/littlespace: #helpers: : I won't be hope for another hour or so +[2017-03-23 22:25:53.127] [INFO] channels - /r/littlespace: #general: : Take a nap <@258325991796113408> +[2017-03-23 22:25:54.794] [INFO] channels - /r/littlespace: #general: : Wait +[2017-03-23 22:25:58.748] [INFO] channels - /r/littlespace: #general: : Are you working +[2017-03-23 22:26:13.278] [INFO] channels - /r/littlespace: #general: : ewwwwwwwwwww +[2017-03-23 22:26:14.640] [INFO] channels - /r/littlespace: #helpers: : Okie ^.^ +[2017-03-23 22:26:29.898] [INFO] channels - /r/littlespace: #helpers: : <@!294673095245955073> joined the server. +[2017-03-23 22:26:31.374] [INFO] channels - /r/littlespace: #helpers: : I think I may take a nap and wake up in two hours +[2017-03-23 22:26:35.511] [INFO] channels - /r/littlespace: #helpers: : Tata for now. +[2017-03-23 22:26:39.051] [INFO] channels - /r/littlespace: #helpers: : Lmfao +[2017-03-23 22:26:42.717] [INFO] channels - /r/littlespace: #gaming: : Has anyone heard of a game where you choose your story? I forget what it's called +[2017-03-23 22:26:52.061] [INFO] channels - /r/littlespace: #general: : <@294673095245955073> welcome! +[2017-03-23 22:26:54.828] [INFO] channels - /r/littlespace: #helpers: : LOL +[2017-03-23 22:26:56.205] [INFO] channels - /r/littlespace: #helpers: : Tata +[2017-03-23 22:27:02.796] [INFO] channels - /r/littlespace: #general: : Ugh you beat me to it +[2017-03-23 22:27:03.278] [INFO] channels - /r/littlespace: #gaming: : There's a lot! +[2017-03-23 22:27:09.357] [INFO] channels - /r/littlespace: #gaming: : It's a newer one +[2017-03-23 22:27:12.581] [INFO] channels - /r/littlespace: #gaming: : BioWare makes a lot of them +[2017-03-23 22:27:14.545] [INFO] channels - /r/littlespace: #helpers: : UGH SHE BEAT ME +[2017-03-23 22:27:15.911] [INFO] channels - /r/littlespace: #general: : lol +[2017-03-23 22:27:17.914] [INFO] channels - /r/littlespace: #gaming: : Fable?! +[2017-03-23 22:27:27.523] [INFO] channels - /r/littlespace: #helpers: : Heh +[2017-03-23 22:27:33.322] [INFO] channels - /r/littlespace: #general: : Heh +[2017-03-23 22:27:48.381] [INFO] channels - /r/littlespace: #general: : Love you tho <@234126386703499264> +[2017-03-23 22:27:59.063] [INFO] channels - /r/littlespace: #helpers: : When they leave +[2017-03-23 22:28:04.972] [INFO] channels - /r/littlespace: #gaming: : Uhm no, don't think so +[2017-03-23 22:28:07.274] [INFO] channels - /r/littlespace: #helpers: : You can say ttfn +[2017-03-23 22:28:11.886] [INFO] channels - /r/littlespace: #gaming: : Hmm +[2017-03-23 22:28:18.812] [INFO] channels - /r/littlespace: #gaming: : Dragon Age? +[2017-03-23 22:28:21.438] [INFO] channels - /r/littlespace: #helpers: : I'm trying to figure out what to message my cg's mum +[2017-03-23 22:28:25.314] [INFO] channels - /r/littlespace: #gaming: : Mass Effect? +[2017-03-23 22:28:26.535] [INFO] channels - /r/littlespace: #general: : Love you too +[2017-03-23 22:28:39.213] [INFO] channels - /r/littlespace: #gaming: : Oh, Episode +[2017-03-23 22:28:40.309] [INFO] channels - /r/littlespace: #gaming: : Is it on PC or mobile? +[2017-03-23 22:28:42.961] [INFO] channels - /r/littlespace: #gaming: : OH +[2017-03-23 22:28:46.737] [INFO] channels - /r/littlespace: #gaming: : THAT ONE +[2017-03-23 22:28:48.647] [INFO] channels - /r/littlespace: #gaming: : Is that good? +[2017-03-23 22:28:53.844] [INFO] channels - /r/littlespace: #helpers: : Like +[2017-03-23 22:29:07.080] [INFO] channels - /r/littlespace: #helpers: : "Hi Aunty, is it ok for me to come over to your place in the afternoon?" +[2017-03-23 22:29:08.190] [INFO] channels - /r/littlespace: #helpers: : LOL +[2017-03-23 22:29:15.166] [INFO] channels - /r/littlespace: #helpers: : Does that sound ok +[2017-03-23 22:29:24.263] [INFO] channels - /r/littlespace: #gaming: : Idk. That's what I was hoping to determine +[2017-03-23 22:29:27.172] [INFO] channels - /r/littlespace: #helpers: : "Hey _____, I'm wondering if it would be alright for me to stop by for lunch and to get a reprieve from the construction outside. My head is splitting." +[2017-03-23 22:29:27.330] [INFO] channels - /r/littlespace: #gaming: : lol +[2017-03-23 22:29:34.534] [INFO] channels - /r/littlespace: #helpers: : Oh yes lol +[2017-03-23 22:29:35.698] [INFO] channels - /r/littlespace: #helpers: : Thanks +[2017-03-23 22:29:38.465] [INFO] channels - /r/littlespace: #helpers: : Hahah +[2017-03-23 22:29:42.427] [INFO] channels - /r/littlespace: #helpers: : You're the best +[2017-03-23 22:29:44.238] [INFO] channels - /r/littlespace: #helpers: : I'm good at writing +[2017-03-23 22:29:46.008] [INFO] channels - /r/littlespace: #helpers: : She's really sweet I love her +[2017-03-23 22:29:46.162] [INFO] channels - /r/littlespace: #helpers: : No uuuu +[2017-03-23 22:29:51.957] [INFO] channels - /r/littlespace: #helpers: : Awwwh that's great +[2017-03-23 22:30:00.837] [INFO] channels - /r/littlespace: #helpers: : Baes family doesn't know I exist yet +[2017-03-23 22:30:03.567] [INFO] channels - /r/littlespace: #helpers: : >> +[2017-03-23 22:30:08.798] [INFO] channels - /r/littlespace: #helpers: : ☹️ +[2017-03-23 22:30:09.628] [INFO] channels - /r/littlespace: #helpers: : Tata#5138 left. +[2017-03-23 22:30:12.472] [INFO] channels - /r/littlespace: #gaming: : LMFAOOO +[2017-03-23 22:30:16.946] [INFO] channels - /r/littlespace: #helpers: : OMG THEY LEFT +[2017-03-23 22:30:19.859] [INFO] channels - /r/littlespace: #helpers: : TNEY LEFT +[2017-03-23 22:30:20.905] [INFO] channels - /r/littlespace: #gaming: : There's a lot of different stories +[2017-03-23 22:30:28.159] [INFO] channels - /r/littlespace: #gaming: : Maybe you can try it! +[2017-03-23 22:30:38.906] [INFO] channels - /r/littlespace: #gaming: : It's heavily pushed onto you to pay for stuff tho +[2017-03-23 22:30:52.812] [INFO] channels - /r/littlespace: #gaming: : I'm going to try it. :/ +[2017-03-23 22:31:05.369] [INFO] channels - /r/littlespace: #gaming: : Yeah it's pretty freenium +[2017-03-23 22:31:11.010] [INFO] channels - /r/littlespace: #general: : <:Umaru:270955595836686356> +[2017-03-23 22:31:24.652] [INFO] channels - /r/littlespace: #gaming: : What? +[2017-03-23 22:31:29.491] [INFO] channels - /r/littlespace: #gaming: : freenium??? +[2017-03-23 22:31:45.827] [INFO] channels - /r/littlespace: #helpers: : Tata for now, literally +[2017-03-23 22:31:48.843] [INFO] channels - /r/littlespace: #general: : I am thinking I'm gonna watch a movie +[2017-03-23 22:31:49.791] [INFO] channels - /r/littlespace: #helpers: : Lmfao +[2017-03-23 22:32:01.737] [INFO] channels - /r/littlespace: #helpers: : Ikr +[2017-03-23 22:32:02.726] [INFO] channels - /r/littlespace: #helpers: : .ud Josie +[2017-03-23 22:32:03.044] [INFO] channels - /r/littlespace: #helpers: : An amazing get going girl. She is always up for anything! She is out looking for a good time. Very fun, energetic, hard working, GORGEOUS GIRL. She is intellegent, has loads of common sense and is good at anything she does! ANYTHING! Great friend has your back she is a lover, not a fighter. She is definately someone you want to know! () +[2017-03-23 22:32:09.250] [INFO] channels - /r/littlespace: #helpers: : WOW WHAT +[2017-03-23 22:32:30.211] [INFO] channels - /r/littlespace: #helpers: : Lol we were doing that...yesterday? +[2017-03-23 22:32:36.307] [INFO] channels - /r/littlespace: #helpers: : .ud Ariel +[2017-03-23 22:32:36.678] [INFO] channels - /r/littlespace: #helpers: : a crazy and adventurous person, whose infectious laugh sucks others into her silliness () +[2017-03-23 22:32:37.083] [INFO] channels - /r/littlespace: #helpers: : We were? +[2017-03-23 22:32:40.238] [INFO] channels - /r/littlespace: #helpers: : This is hilarious +[2017-03-23 22:32:51.270] [INFO] channels - /r/littlespace: #general: : I'm @ work +[2017-03-23 22:32:52.416] [INFO] channels - /r/littlespace: #helpers: : IM A LOVER NOT A FIGHTER +[2017-03-23 22:32:55.080] [INFO] channels - /r/littlespace: #helpers: : Yeaaaaah in here you may have been sleeping +[2017-03-23 22:33:12.183] [INFO] channels - /r/littlespace: #helpers: : .ud Ariel 2 +[2017-03-23 22:33:12.496] [INFO] channels - /r/littlespace: #helpers: : No results found +[2017-03-23 22:33:15.344] [INFO] channels - /r/littlespace: #helpers: : Booo +[2017-03-23 22:33:20.471] [INFO] channels - /r/littlespace: #helpers: : .ud matt +[2017-03-23 22:33:20.818] [INFO] channels - /r/littlespace: #helpers: : ancient greek translation for "eternal sex-god". It is beleived that anyone that holds this name has a great level of skill and ability to perform sexual acts for long periods of time. Men posessing this name are also well endowed. () +[2017-03-23 22:33:22.231] [INFO] channels - /r/littlespace: #helpers: : I wanted the second result +[2017-03-23 22:33:24.332] [INFO] channels - /r/littlespace: #helpers: : YES. +[2017-03-23 22:33:26.473] [INFO] channels - /r/littlespace: #helpers: : ... +[2017-03-23 22:33:39.855] [INFO] channels - /r/littlespace: #helpers: : ETERNAL SEX GOD +[2017-03-23 22:33:40.140] [INFO] channels - /r/littlespace: #helpers: : *fistbump* +[2017-03-23 22:33:40.434] [INFO] channels - /r/littlespace: #helpers: : Ba-la-la-la-la! https://cdn.discordapp.com/attachments/265064665099403264/294327036388835328/giphy-3.gif +[2017-03-23 22:33:42.506] [INFO] channels - /r/littlespace: #general: : For another 2, 5 hours +[2017-03-23 22:33:51.640] [INFO] channels - /r/littlespace: #helpers: : .ud no +[2017-03-23 22:33:51.957] [INFO] channels - /r/littlespace: #helpers: : The word that makes sex rape. () +[2017-03-23 22:33:56.726] [INFO] channels - /r/littlespace: #general: : 😦 +[2017-03-23 22:34:00.216] [INFO] channels - /r/littlespace: #helpers: : >> +[2017-03-23 22:34:09.045] [INFO] channels - /r/littlespace: #helpers: : Shit just got real +[2017-03-23 22:34:11.758] [INFO] channels - /r/littlespace: #helpers: : .ud cave johnson +[2017-03-23 22:34:12.074] [INFO] channels - /r/littlespace: #helpers: : The CEO and founder of Aperture Science Innovators. Later renamed Aperture Laboratories. Has and awesome voice (JK Simmons). And is extremely rich. Got sick and died from moon-rock poisoning. Caroline is his best friend and secretary. Hates lemons if life gives them to you. () +[2017-03-23 22:34:12.694] [INFO] channels - /r/littlespace: #helpers: : <@!114721723894595589> joined the server. +[2017-03-23 22:34:18.931] [INFO] channels - /r/littlespace: #helpers: : I was curious. +[2017-03-23 22:34:28.174] [INFO] channels - /r/littlespace: #general: : Welcome, <@114721723894595589> ! +[2017-03-23 22:34:33.527] [INFO] channels - /r/littlespace: #general: : BEAT ME +[2017-03-23 22:34:35.552] [INFO] channels - /r/littlespace: #general: : HA I BEAT U TO IT ARIEL +[2017-03-23 22:34:39.891] [INFO] channels - /r/littlespace: #general: : 💙💖 +[2017-03-23 22:34:49.000] [INFO] channels - /r/littlespace: #general: : Hahahaha +[2017-03-23 22:34:50.290] [INFO] channels - /r/littlespace: #general: : Anyway welcome <@114721723894595589> !!! +[2017-03-23 22:35:21.047] [INFO] channels - /r/littlespace: #general: : I am in such a Billie Holiday mood +[2017-03-23 22:35:38.246] [INFO] channels - /r/littlespace: #gaming: : Yeah free to play but you have to pay for premium +[2017-03-23 22:35:39.837] [INFO] channels - /r/littlespace: #general: : Okay I am off. Bye!! +[2017-03-23 22:35:51.207] [INFO] channels - /r/littlespace: #helpers: : .ud cake is a lie +[2017-03-23 22:35:51.529] [INFO] channels - /r/littlespace: #helpers: : A substitute for "The writing is on the wall'. From the (video game) Portal. The graffiti in background levels give clues and point out truths including "the cake is a lie". () +[2017-03-23 22:36:06.554] [INFO] channels - /r/littlespace: #general: : Bye bye <@294618642119917568> 😦 +[2017-03-23 22:36:16.798] [INFO] channels - /r/littlespace: #general: : Bye <@294618642119917568> !!! +[2017-03-23 22:36:21.164] [INFO] channels - /r/littlespace: #general: : I'll miss you!! +[2017-03-23 22:37:03.021] [INFO] channels - /r/littlespace: #helpers: : .yt crazy he calls me Billie holiday +[2017-03-23 22:37:03.785] [INFO] channels - /r/littlespace: #helpers: : Billie Holiday - Crazy He Calls Me - https://youtu.be/_mitLcbHHz8 [ 1,607,353 views | 4.96 rating w/ 9,685 likes (86 dislikes) | Duration: 3m6s | Uploaded: 2010-02-04 by widdy24 ] +[2017-03-23 22:37:11.517] [INFO] channels - /r/littlespace: #helpers: : Unf this song is gold +[2017-03-23 22:37:22.505] [INFO] channels - /r/littlespace: #helpers: : Also I am done playing with uberbot +[2017-03-23 22:39:25.019] [INFO] channels - /r/littlespace: #helpers: : The cake is not a lie. +[2017-03-23 22:42:31.530] [INFO] channels - /r/littlespace: #helpers: : I love that some of the voice files for glados are titled with "nag" +[2017-03-23 22:44:30.189] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 22:44:37.092] [INFO] channels - /r/littlespace: #helpers: : Just so you're all in the loop +[2017-03-23 22:44:47.167] [INFO] channels - /r/littlespace: #helpers: : <@&173241636304715776> <@&293860612184866818> +[2017-03-23 22:45:53.821] [INFO] channels - /r/littlespace: #helpers: : Amazing. Noted. +[2017-03-23 22:46:33.594] [INFO] channels - /r/littlespace: #helpers: : Thanks a lot, blue +[2017-03-23 22:46:50.567] [INFO] channels - /r/littlespace: #helpers: : My biggest thing is that you guys are all supported. This means that when we have issues in here that might bleed into the subreddit, I send a modmail to let Nidalee know what's going on so none of you get the brunt of it. I want to make sure you're all protected, especially if you're not in the wrong. +[2017-03-23 22:46:55.854] [INFO] channels - /r/littlespace: #helpers: : Thank you. You're both amazing. I'm so happy to be on this team. +[2017-03-23 22:47:00.165] [INFO] channels - /r/littlespace: #helpers: : Which, in this case, nobody by Corrie was in the wrong. +[2017-03-23 22:47:23.199] [INFO] channels - /r/littlespace: #helpers: : If nobody has told you yet, you're amazing for doing this +[2017-03-23 22:47:41.835] [INFO] channels - /r/littlespace: #helpers: : I stand by what I did and he was just looking to pull out his pitchfork +[2017-03-23 22:48:02.446] [INFO] channels - /r/littlespace: #helpers: : Thank you again (: +[2017-03-23 22:48:27.868] [INFO] channels - /r/littlespace: #helpers: : Yay my CG's mum is amazing. I'm having lunch at his place!! +[2017-03-23 22:49:51.045] [INFO] channels - /r/littlespace: #helpers: : By the way <@200944723035160576> I'm sorry I snapped at you earlier. +[2017-03-23 22:49:59.972] [INFO] channels - /r/littlespace: #helpers: : I was at dinner and didn't want you getting in any further +[2017-03-23 22:50:01.545] [INFO] channels - /r/littlespace: #helpers: : And I agree with your action. Don't let any disgruntled members dictate what you ought to do or ought not to do +[2017-03-23 22:50:07.245] [INFO] channels - /r/littlespace: #helpers: : <@234126386703499264> that's really awesome! +[2017-03-23 22:50:17.996] [INFO] channels - /r/littlespace: #helpers: : I forget that it's a completely different time where you are. +[2017-03-23 22:50:31.270] [INFO] channels - /r/littlespace: #helpers: : I just wish we were all closer +[2017-03-23 22:50:35.368] [INFO] channels - /r/littlespace: #helpers: : Me too +[2017-03-23 22:50:41.231] [INFO] channels - /r/littlespace: #helpers: : I would be throwing a pizza party +[2017-03-23 22:50:43.003] [INFO] channels - /r/littlespace: #helpers: : Blue, !time +[2017-03-23 22:50:44.275] [INFO] channels - /r/littlespace: #helpers: : I'd totally invite you all over for a sleepover +[2017-03-23 22:50:47.324] [INFO] channels - /r/littlespace: #helpers: : Lol +[2017-03-23 22:50:47.704] [INFO] channels - /r/littlespace: #helpers: : !time +[2017-03-23 22:50:47.996] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Timezones: America/Phoenix: 2017/03/23 | 20:50:47 MST America/Chicago: 2017/03/23 | 22:50:47 CDT America/New_York: 2017/03/23 | 23:50:47 EDT Asia/Singapore: 2017/03/24 | 11:50:47 SGT +[2017-03-23 22:50:51.717] [INFO] channels - /r/littlespace: #helpers: : OH LOOK +[2017-03-23 22:50:55.083] [INFO] channels - /r/littlespace: #helpers: : THATS HELPFUL +[2017-03-23 22:51:02.664] [INFO] channels - /r/littlespace: #helpers: : war, you're not in chicago? +[2017-03-23 22:51:03.044] [INFO] channels - /r/littlespace: #helpers: : Blue, !birthday +[2017-03-23 22:51:07.300] [INFO] channels - /r/littlespace: #helpers: : !birthday +[2017-03-23 22:51:07.498] [INFO] channels - /r/littlespace: #helpers: : List of Moderator Birthdays: arielhasfins: 1992-07-21 Nanako: 1994-08-18 WARBIRD199: 1994-12-19 bluedinosaursocks: 1995-01-07 Meep: 1995-01-17 +[2017-03-23 22:51:11.880] [INFO] channels - /r/littlespace: #helpers: : OOOOOOH +[2017-03-23 22:51:25.116] [INFO] channels - /r/littlespace: #helpers: : That's neato +[2017-03-23 22:51:25.388] [INFO] channels - /r/littlespace: #helpers: : Who is in Chicago +[2017-03-23 22:51:28.673] [INFO] channels - /r/littlespace: #helpers: : No, but America/Chicago is the timezone selector for CST +[2017-03-23 22:51:31.961] [INFO] channels - /r/littlespace: #helpers: : Oh +[2017-03-23 22:51:37.640] [INFO] channels - /r/littlespace: #helpers: : That's where bae is +[2017-03-23 22:51:40.121] [INFO] channels - /r/littlespace: #helpers: : Just like you're not in phoenix. +[2017-03-23 22:51:41.969] [INFO] channels - /r/littlespace: #helpers: : Was confused +[2017-03-23 22:51:43.114] [INFO] channels - /r/littlespace: #helpers: : True +[2017-03-23 22:51:48.005] [INFO] channels - /r/littlespace: #helpers: : .w 85741 +[2017-03-23 22:51:48.673] [INFO] channels - /r/littlespace: #helpers: : Clear, 57F (14C) (287.15K) | Humidity: 29% | Wind: N @ 4.08mph (6.6km/h) | 0% chance of precipitation (85741 - Tucson, AZ (US)) +[2017-03-23 22:51:56.828] [INFO] channels - /r/littlespace: #helpers: : It's still gross and chilly +[2017-03-23 22:52:06.993] [INFO] channels - /r/littlespace: #helpers: : I want to visit Arizona +[2017-03-23 22:52:22.434] [INFO] channels - /r/littlespace: #helpers: : I want to take a road trip +[2017-03-23 22:52:24.815] [INFO] channels - /r/littlespace: #helpers: : It's nice here +[2017-03-23 22:52:30.742] [INFO] channels - /r/littlespace: #helpers: : I live in the desert part, not the mountainy part. +[2017-03-23 22:52:31.646] [INFO] channels - /r/littlespace: #helpers: : Ikr it does set in when I'm the only one awake in the afternoons and I get boooored +[2017-03-23 22:52:43.387] [INFO] channels - /r/littlespace: #helpers: : I bet! +[2017-03-23 22:52:45.098] [INFO] channels - /r/littlespace: #helpers: : I want to visit all of you 😦 +[2017-03-23 22:52:46.599] [INFO] channels - /r/littlespace: #helpers: : I like the desert +[2017-03-23 22:52:56.783] [INFO] channels - /r/littlespace: #helpers: : Awwwh +[2017-03-23 22:52:59.694] [INFO] channels - /r/littlespace: #helpers: : 💙 +[2017-03-23 22:53:06.070] [INFO] channels - /r/littlespace: #helpers: : I just want to hide from the heat! No more. +[2017-03-23 22:53:12.486] [INFO] channels - /r/littlespace: #helpers: : It's really hot today +[2017-03-23 22:53:14.343] [INFO] channels - /r/littlespace: #helpers: : And windy +[2017-03-23 22:53:15.765] [INFO] channels - /r/littlespace: #helpers: : I have AC and it is wonderful +[2017-03-23 22:53:16.585] [INFO] channels - /r/littlespace: #helpers: : Come see me then!! +[2017-03-23 22:53:28.782] [INFO] channels - /r/littlespace: #helpers: : ❤️❤️❤️ +[2017-03-23 22:53:33.984] [INFO] channels - /r/littlespace: #helpers: : Blue do you have kids? +[2017-03-23 22:53:42.377] [INFO] channels - /r/littlespace: #helpers: : Pennsylvania mountain air is the best +[2017-03-23 22:54:47.085] [INFO] channels - /r/littlespace: #general: : I was just looking at niche discord servers +[2017-03-23 22:54:55.205] [INFO] channels - /r/littlespace: #general: : and this was one of the ones that I joined +[2017-03-23 22:54:58.195] [INFO] channels - /r/littlespace: #general: : I have no idea what this is +[2017-03-23 22:55:23.826] [INFO] channels - /r/littlespace: #general: : where did you find a list of niche discords? +[2017-03-23 22:55:53.797] [INFO] channels - /r/littlespace: #general: : just discord server lists and reddit and asking people on other servers +[2017-03-23 22:56:07.590] [INFO] channels - /r/littlespace: #general: : ah +[2017-03-23 22:56:14.097] [INFO] channels - /r/littlespace: #helpers: : I do not +[2017-03-23 22:56:32.627] [INFO] channels - /r/littlespace: #helpers: : I do (and I hate this term, but for all intents and purposes, have), 2 fur babies. +[2017-03-23 22:59:11.447] [INFO] channels - /r/littlespace: #helpers: : .w +[2017-03-23 22:59:12.188] [INFO] channels - /r/littlespace: #helpers: : Clear, 57F (14C) (287.15K) | Humidity: 63% | Wind: N @ 7.82mph (12.6km/h) | 0% chance of precipitation (63088 - Valley Park, MO (US)) +[2017-03-23 22:59:31.500] [INFO] channels - /r/littlespace: #helpers: : Ahh it's not the best term but still cute +[2017-03-23 23:00:35.448] [INFO] channels - /r/littlespace: #helpers: : I want fur babies 😦 +[2017-03-23 23:02:32.259] [INFO] channels - /r/littlespace: #general: : Well, that's one way to join a server xD +[2017-03-23 23:04:28.486] [INFO] channels - /r/littlespace: #general: : https://www.reddit.com/r/littlespace/ +[2017-03-23 23:05:55.268] [INFO] channels - /r/littlespace: #helpers: : I love mine +[2017-03-23 23:06:22.044] [INFO] channels - /r/littlespace: #helpers: : .w Bukit Timah, Singapore +[2017-03-23 23:06:22.288] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 23:06:22.856] [INFO] channels - /r/littlespace: #helpers: : Light Rain, 86F (30C) (303.15K) / feels like 99F (37C) (310.15K) | Humidity: 78% | Wind: N @ 3.86mph (6.2km/h) | 57% chance of rain (Bukit Timah, Singapore (SG)) +[2017-03-23 23:06:31.022] [INFO] channels - /r/littlespace: #helpers: : Why is it so. Hot. +[2017-03-23 23:06:36.963] [INFO] channels - /r/littlespace: #helpers: : Omg so cute!!!!!! +[2017-03-23 23:06:54.919] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 23:07:03.146] [INFO] channels - /r/littlespace: #helpers: : Is it okay for the sub to be linked in general blue? +[2017-03-23 23:07:04.219] [INFO] channels - /r/littlespace: #helpers: : The tan one is named Callie, and the black one is Atlas. +[2017-03-23 23:07:19.472] [INFO] channels - /r/littlespace: #helpers: : I like Callie. Callie looks so cute +[2017-03-23 23:07:28.310] [INFO] channels - /r/littlespace: #helpers: : Yeah that's fine. I'm assuming they're just providing info for the guy that joined without knowing what this place is. +[2017-03-23 23:08:07.157] [INFO] channels - /r/littlespace: #helpers: : Yeah that's what I figured too okay cool. I'm not second guessing at all. +[2017-03-23 23:08:13.413] [INFO] channels - /r/littlespace: #helpers: : Also Callie is new right? +[2017-03-23 23:10:04.389] [INFO] channels - /r/littlespace: #helpers: : I think so too +[2017-03-23 23:10:50.003] [INFO] channels - /r/littlespace: #general: : <@114721723894595589> you can follow the link that <@182210174969184257> posted ^. If you still have any other questions, please feel free to ask us! +[2017-03-23 23:13:34.869] [INFO] channels - /r/littlespace: #helpers: : Callie is new +[2017-03-23 23:13:38.404] [INFO] channels - /r/littlespace: #helpers: : And thank you for asking 😃 +[2017-03-23 23:14:04.828] [INFO] channels - /r/littlespace: #helpers: : Awwwhhh how are they doing? (Not trying to assume your dogs gender) +[2017-03-23 23:14:23.743] [INFO] channels - /r/littlespace: #helpers: : And how are you two doing? Are things okay? +[2017-03-23 23:16:27.452] [INFO] channels - /r/littlespace: #helpers: : They're awesome! Callie is a girl and Atlas is a boy. They're both fixed, so no babies lol. +[2017-03-23 23:16:33.751] [INFO] channels - /r/littlespace: #helpers: : Who +[2017-03-23 23:16:35.282] [INFO] channels - /r/littlespace: #helpers: : Callie is a bit younger than Atlas is. +[2017-03-23 23:16:38.254] [INFO] channels - /r/littlespace: #helpers: : We're all good. +[2017-03-23 23:16:40.822] [INFO] channels - /r/littlespace: #helpers: : Ahhhh cuuuute +[2017-03-23 23:17:31.980] [INFO] channels - /r/littlespace: #helpers: : N... no babies 😦 +[2017-03-23 23:17:36.136] [INFO] channels - /r/littlespace: #helpers: : +[2017-03-23 23:17:42.757] [INFO] channels - /r/littlespace: #helpers: : oh my goodness +[2017-03-23 23:17:44.857] [INFO] channels - /r/littlespace: #helpers: : that is adorable +[2017-03-23 23:17:47.209] [INFO] channels - /r/littlespace: #helpers: : The only way for me to enjoy a dog's presence +[2017-03-23 23:17:54.026] [INFO] channels - /r/littlespace: #helpers: : If you have Instagram, follow this dog +[2017-03-23 23:17:58.333] [INFO] channels - /r/littlespace: #helpers: : He's so cute I swear +[2017-03-23 23:18:11.864] [INFO] channels - /r/littlespace: #helpers: : PUFF. HE IS A CUTE LAZY PUFFBALL +[2017-03-23 23:23:18.463] [INFO] channels - /r/littlespace: #helpers: : .w Bukit Timah, Singapore +[2017-03-23 23:23:19.142] [INFO] channels - /r/littlespace: #helpers: : Light Rain, 86F (30C) (303.15K) / feels like 98F (37C) (310.15K) | Humidity: 78% | Wind: N @ 3.68mph (5.9km/h) | 58% chance of rain (Bukit Timah, Singapore (SG)) +[2017-03-23 23:37:00.481] [INFO] channels - /r/littlespace: #general: : So quiet D: +[2017-03-23 23:37:13.069] [INFO] channels - /r/littlespace: #general: : Hi! +[2017-03-23 23:38:23.431] [INFO] channels - /r/littlespace: #general: : Hello! +[2017-03-23 23:38:31.628] [INFO] channels - /r/littlespace: #general: : My neighbor had surgery yesterday and I was really worried he'd be too stubborn to ask for help with stuff while he's recovering but he asked me to come over twice today and I'm helping him with the nurse that's coming in the morning and I'm sooooo relieved that he's actually asking for help when he needs it +[2017-03-23 23:40:00.370] [INFO] channels - /r/littlespace: #general: : oo that's good! +[2017-03-23 23:40:15.184] [INFO] channels - /r/littlespace: #general: : Yeah! +[2017-03-23 23:40:42.880] [INFO] channels - /r/littlespace: #general: : He watches my cat fairly often so I'm just glad to finally be able to kinda repay the kindness +[2017-03-23 23:40:55.499] [INFO] channels - /r/littlespace: #general: : Sorry for the intrusion +[2017-03-23 23:41:02.828] [INFO] channels - /r/littlespace: #general: : And glad that he's not alone all day +[2017-03-23 23:41:07.268] [INFO] channels - /r/littlespace: #general: : I was just looking for servers for depressed people +[2017-03-23 23:41:19.276] [INFO] channels - /r/littlespace: #general: : And I thought this was one of those judging from just the title alone +[2017-03-23 23:41:37.593] [INFO] channels - /r/littlespace: #general: : At least that's what I thought when I saw the server link preview in discord +[2017-03-23 23:42:32.817] [INFO] channels - /r/littlespace: #general: : Oh, well I hope you feel better! +[2017-03-23 23:42:42.344] [INFO] channels - /r/littlespace: #general: : No worries! +[2017-03-23 23:43:40.019] [INFO] channels - /r/littlespace: #helpers: : Namix#6478 left. +[2017-03-23 23:50:30.911] [INFO] channels - /r/littlespace: #helpers: : <@173239190190817280> just saw your message, i didn't take it as you snapping at me. diff --git a/logs/console.log b/logs/console.log new file mode 100644 index 0000000..d77017a --- /dev/null +++ b/logs/console.log @@ -0,0 +1,476 @@ +[2017-03-21 20:24:11.234] [INFO] console - Connected as: stats-bot +[2017-03-21 20:24:41.733] [INFO] console - Connected as: stats-bot +[2017-03-21 20:25:32.920] [INFO] console - Connected as: stats-bot +[2017-03-22 00:03:03.878] [INFO] console - Connected as: stats-bot +[2017-03-22 00:05:01.750] [INFO] console - Connected as: stats-bot +[2017-03-22 00:05:07.165] [INFO] console - Connected as: stats-bot +[2017-03-22 00:06:13.233] [INFO] console - Connected as: stats-bot +[2017-03-22 00:06:18.343] [INFO] console - Connected as: stats-bot +[2017-03-22 00:09:04.601] [INFO] console - Connected as: stats-bot +[2017-03-22 00:10:26.250] [INFO] console - Connected as: stats-bot +[2017-03-22 00:11:36.701] [INFO] console - Connected as: stats-bot +[2017-03-22 00:12:05.436] [INFO] console - Connected as: stats-bot +[2017-03-22 01:33:09.603] [INFO] console - Connected as: stats-bot +[2017-03-22 01:51:40.566] [INFO] console - Connected as: stats-bot +[2017-03-22 16:27:57.930] [INFO] console - Connected as: stats-bot +[2017-03-22 16:29:11.703] [INFO] console - Connected as: stats-bot +[2017-03-22 20:44:42.940] [INFO] console - Connected as: stats-bot +[2017-03-22 20:49:08.659] [INFO] console - Connected as: stats-bot +[2017-03-22 20:49:13.740] [INFO] console - Connected as: stats-bot +[2017-03-22 20:55:05.507] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.078] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.111] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.142] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.173] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.206] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.236] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.267] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.298] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.329] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.360] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.390] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.421] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.452] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.483] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.512] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.543] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.573] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.604] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.634] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.663] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.694] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.723] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.754] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.784] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.815] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.845] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.876] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.907] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.938] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.969] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:13.999] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.028] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.059] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.089] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.120] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.152] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.183] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.214] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.243] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.274] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.304] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.335] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.364] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.395] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.426] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.457] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.487] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.518] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.547] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.579] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.609] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.640] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.670] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.702] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.733] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.764] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.793] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.824] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.855] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.885] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.916] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.946] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:14.977] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.007] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.037] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.067] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.099] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.130] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.162] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.191] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.222] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.251] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.284] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.313] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.343] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.374] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.405] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.434] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.465] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.495] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.527] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.556] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.587] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.617] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.649] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.680] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.709] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.740] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.769] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.800] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.831] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.861] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.892] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.922] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.953] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:15.983] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.013] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.044] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.075] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.106] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.136] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.167] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.198] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.229] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.258] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.289] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.319] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.349] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.379] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.410] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.441] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.471] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.501] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.532] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.563] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.593] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.623] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.653] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.684] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.715] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.745] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.776] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.807] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.837] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.867] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.897] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.928] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.958] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:16.988] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.019] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.050] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.082] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.118] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.149] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.180] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.210] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.241] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.273] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.303] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.334] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.364] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.395] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.425] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.455] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.485] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.516] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.546] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.576] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.607] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.637] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.668] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.698] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.729] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.759] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.789] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.819] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.850] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.880] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.911] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.941] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:17.971] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.002] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.033] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.064] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.094] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.125] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.155] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.187] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.219] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.248] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.279] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.309] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.339] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.369] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.399] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.429] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.459] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.490] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.520] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.550] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.581] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.612] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.643] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.673] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.704] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.733] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.764] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.795] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.825] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.856] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.887] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.918] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.949] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:18.979] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.009] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.039] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.070] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.102] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.132] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.162] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.193] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.224] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.254] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.285] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.315] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.345] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.376] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.407] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.437] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.468] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.498] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.529] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.559] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.589] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.620] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.650] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.680] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.711] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.742] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.773] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.803] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.832] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.863] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.894] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.924] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.954] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:19.985] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.016] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.046] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.077] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.108] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.139] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.168] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.198] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.229] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.259] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.290] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.320] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.350] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.381] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.411] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.441] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.471] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.501] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.532] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.562] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.592] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.622] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.652] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.682] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.713] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.743] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.774] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.804] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.834] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.863] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.893] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.923] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.954] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:20.985] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.014] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.045] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.075] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.107] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.136] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.167] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.197] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.228] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.258] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.289] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.319] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.349] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.380] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.410] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.440] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.471] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.501] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.530] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.561] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.592] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.622] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.651] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.682] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.712] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.743] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.773] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.803] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.832] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.863] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.893] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.923] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.953] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:21.984] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.014] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.044] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.074] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.105] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.135] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.166] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.197] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.227] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:22.258] [INFO] console - Reconnecting to server per timeout of 30ms. +[2017-03-22 20:55:25.588] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:25.892] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:26.193] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:26.495] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:26.796] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:27.097] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:27.399] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:27.701] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:28.002] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:28.304] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:28.605] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:28.906] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:29.209] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:29.510] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:29.815] [INFO] console - Reconnecting to server per timeout of 300ms. +[2017-03-22 20:55:31.034] [INFO] console - Connected as: stats-bot +[2017-03-22 20:55:33.221] [INFO] console - Reconnecting to server per timeout of 3000ms. +[2017-03-22 20:55:36.088] [INFO] console - Connected as: stats-bot +[2017-03-22 20:55:36.224] [INFO] console - Reconnecting to server per timeout of 3000ms. +[2017-03-22 20:55:41.206] [INFO] console - Connected as: stats-bot +[2017-03-22 20:55:56.460] [INFO] console - Connected as: stats-bot +[2017-03-22 20:57:10.944] [INFO] console - Connected as: stats-bot +[2017-03-22 20:57:38.722] [INFO] console - Connected as: stats-bot +[2017-03-22 21:57:38.261] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-22 21:57:38.756] [INFO] console - Connected as: stats-bot +[2017-03-22 21:59:09.542] [INFO] console - Connected as: stats-bot +[2017-03-22 22:01:15.236] [INFO] console - Connected as: Thor +[2017-03-22 22:01:26.223] [INFO] console - Connected as: Thor +[2017-03-22 22:02:52.814] [INFO] console - Connected as: Thor +[2017-03-22 22:03:26.951] [INFO] console - Connected as: Thor +[2017-03-22 22:04:52.509] [INFO] console - Connected as: Thor +[2017-03-22 22:05:16.163] [INFO] console - Connected as: Thor +[2017-03-22 22:06:48.432] [INFO] console - Connected as: Thor +[2017-03-22 22:10:14.901] [INFO] console - Connected as: Thor +[2017-03-22 22:10:25.688] [INFO] console - Connected as: Thor +[2017-03-22 22:10:30.769] [INFO] console - Connected as: Thor +[2017-03-22 22:10:45.443] [INFO] console - Connected as: Thor +[2017-03-22 22:11:44.211] [INFO] console - Connected as: Thor +[2017-03-22 22:11:55.264] [INFO] console - Connected as: Thor +[2017-03-22 22:12:04.737] [INFO] console - Connected as: Thor +[2017-03-22 22:15:43.228] [INFO] console - Connected as: Thor +[2017-03-22 22:19:20.065] [INFO] console - Connected as: Thor +[2017-03-22 22:21:34.148] [INFO] console - Connected as: Thor +[2017-03-22 22:25:14.795] [INFO] console - Connected as: Thor +[2017-03-22 22:26:35.644] [INFO] console - Connected as: Thor +[2017-03-22 22:28:36.382] [INFO] console - Connected as: Thor +[2017-03-22 22:28:56.101] [INFO] console - Connected as: Thor +[2017-03-22 22:35:31.968] [INFO] console - Connected as: Thor +[2017-03-22 22:37:02.982] [INFO] console - Connected as: Thor +[2017-03-22 22:37:49.873] [INFO] console - Connected as: Thor +[2017-03-22 22:38:19.730] [INFO] console - Connected as: Thor +[2017-03-22 22:38:34.573] [INFO] console - Connected as: Thor +[2017-03-22 22:40:24.172] [INFO] console - Connected as: Thor +[2017-03-22 22:40:39.878] [INFO] console - Connected as: Thor +[2017-03-22 22:40:45.521] [INFO] console - Connected as: Thor +[2017-03-22 23:09:56.832] [INFO] console - Connected as: Thor +[2017-03-22 23:10:17.934] [INFO] console - Connected as: Thor +[2017-03-22 23:10:45.405] [INFO] console - Connected as: Thor +[2017-03-22 23:13:07.241] [INFO] console - Connected as: Thor +[2017-03-22 23:20:46.510] [INFO] console - Connected as: Thor +[2017-03-22 23:21:04.288] [INFO] console - Connected as: Thor +[2017-03-22 23:21:13.505] [INFO] console - Connected as: Thor +[2017-03-22 23:24:58.934] [INFO] console - Connected as: Thor +[2017-03-22 23:29:47.481] [INFO] console - Connected as: Thor +[2017-03-22 23:30:50.389] [INFO] console - Connected as: Thor +[2017-03-22 23:30:55.463] [INFO] console - Connected as: Thor +[2017-03-22 23:38:16.915] [INFO] console - Connected as: Thor +[2017-03-22 23:38:26.224] [INFO] console - Connected as: Thor +[2017-03-22 23:48:51.840] [INFO] console - Connected as: Thor +[2017-03-22 23:50:23.588] [INFO] console - Connected as: Thor +[2017-03-22 23:51:12.304] [INFO] console - Connected as: Thor +[2017-03-22 23:51:25.996] [INFO] console - Connected as: Thor +[2017-03-22 23:57:23.673] [INFO] console - Connected as: Thor +[2017-03-22 23:57:53.989] [INFO] console - Connected as: Thor +[2017-03-23 00:03:24.791] [INFO] console - Connected as: Thor +[2017-03-23 01:03:24.213] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 01:03:24.892] [INFO] console - Connected as: Thor +[2017-03-23 02:03:24.222] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 02:03:24.803] [INFO] console - Connected as: Thor +[2017-03-23 02:11:40.007] [INFO] console - Connected as: Thor +[2017-03-23 02:17:36.066] [INFO] console - Connected as: Thor +[2017-03-23 03:17:35.473] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 03:17:36.007] [INFO] console - Connected as: Thor +[2017-03-23 13:23:26.522] [INFO] console - Connected as: Thor +[2017-03-23 13:26:04.269] [INFO] console - Connected as: Thor +[2017-03-23 14:26:03.785] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 14:26:04.681] [INFO] console - Connected as: Thor +[2017-03-23 15:26:03.790] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 15:26:04.374] [INFO] console - Connected as: Thor +[2017-03-23 16:26:03.792] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 16:26:04.443] [INFO] console - Connected as: Thor +[2017-03-23 17:30:11.641] [INFO] console - Connected as: Thor +[2017-03-23 17:30:32.300] [INFO] console - Connected as: Thor +[2017-03-23 17:30:51.795] [INFO] console - Connected as: Thor +[2017-03-23 17:31:37.464] [INFO] console - Connected as: Thor +[2017-03-23 17:53:14.611] [INFO] console - Connected as: Thor +[2017-03-23 17:57:24.703] [INFO] console - Connected as: Thor +[2017-03-23 17:57:43.349] [INFO] console - Connected as: Thor +[2017-03-23 17:57:53.624] [INFO] console - Connected as: Thor +[2017-03-23 17:58:11.959] [INFO] console - Connected as: Thor +[2017-03-23 17:59:17.838] [INFO] console - Connected as: Thor +[2017-03-23 18:11:19.797] [INFO] console - Connected as: Thor +[2017-03-23 19:11:19.145] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 19:11:19.714] [INFO] console - Connected as: Thor +[2017-03-23 20:11:19.148] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 20:11:19.744] [INFO] console - Connected as: Thor +[2017-03-23 20:23:37.003] [INFO] console - Connected as: Thor +[2017-03-23 20:25:33.791] [INFO] console - Connected as: Thor +[2017-03-23 20:25:56.903] [INFO] console - Connected as: Thor +[2017-03-23 20:26:41.441] [INFO] console - Connected as: Thor +[2017-03-23 20:27:05.159] [INFO] console - Connected as: Thor +[2017-03-23 20:28:32.519] [INFO] console - Connected as: Thor +[2017-03-23 20:29:00.961] [INFO] console - Connected as: Thor +[2017-03-23 20:30:56.524] [INFO] console - Connected as: Thor +[2017-03-23 20:31:20.039] [INFO] console - Connected as: Thor +[2017-03-23 20:32:06.086] [INFO] console - Connected as: Thor +[2017-03-23 20:32:17.176] [INFO] console - Connected as: Thor +[2017-03-23 20:32:29.880] [INFO] console - Connected as: Thor +[2017-03-23 20:33:18.390] [INFO] console - Connected as: Thor +[2017-03-23 20:33:37.109] [INFO] console - Connected as: Thor +[2017-03-23 20:33:47.385] [INFO] console - Connected as: Thor +[2017-03-23 20:37:36.961] [INFO] console - Connected as: Thor +[2017-03-23 20:38:08.773] [INFO] console - Connected as: Thor +[2017-03-23 20:38:38.185] [INFO] console - Connected as: Thor +[2017-03-23 20:38:47.731] [INFO] console - Connected as: Thor +[2017-03-23 20:38:56.739] [INFO] console - Connected as: Thor +[2017-03-23 20:39:21.942] [INFO] console - Connected as: Thor +[2017-03-23 20:41:28.845] [INFO] console - Connected as: Thor +[2017-03-23 20:41:39.090] [INFO] console - Connected as: Thor +[2017-03-23 20:41:48.135] [INFO] console - Connected as: Thor +[2017-03-23 20:42:35.412] [INFO] console - Connected as: Thor +[2017-03-23 20:42:43.120] [INFO] console - Connected as: Thor +[2017-03-23 20:42:48.206] [INFO] console - Connected as: Thor +[2017-03-23 20:43:50.293] [INFO] console - Connected as: Thor +[2017-03-23 20:46:54.681] [INFO] console - Connected as: Thor +[2017-03-23 20:50:05.288] [INFO] console - Connected as: Thor +[2017-03-23 20:50:27.543] [INFO] console - Connected as: Thor +[2017-03-23 20:51:04.547] [INFO] console - Connected as: Thor +[2017-03-23 20:51:29.410] [INFO] console - Connected as: Thor +[2017-03-23 20:52:20.842] [INFO] console - Connected as: Thor +[2017-03-23 20:52:35.009] [INFO] console - Connected as: Thor +[2017-03-23 20:52:45.397] [INFO] console - Connected as: Thor +[2017-03-23 20:53:01.720] [INFO] console - Connected as: Thor +[2017-03-23 20:53:16.609] [INFO] console - Connected as: Thor +[2017-03-23 21:13:06.040] [INFO] console - Connected as: Thor +[2017-03-23 21:13:31.156] [INFO] console - Connected as: Thor +[2017-03-23 21:13:36.248] [INFO] console - Connected as: Thor +[2017-03-23 22:01:21.896] [INFO] console - Disconnected from server ... +[2017-03-23 22:01:21.897] [INFO] console - Reconnecting to Discord ... +[2017-03-23 22:01:23.099] [INFO] console - Connected as: Thor +[2017-03-23 22:13:33.477] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 22:13:34.074] [INFO] console - Connected as: Thor +[2017-03-23 23:13:33.479] [INFO] console - Reconnecting to server per timeout of 3600000ms. +[2017-03-23 23:13:34.071] [INFO] console - Connected as: Thor diff --git a/node_modules/.bin/dateformat b/node_modules/.bin/dateformat new file mode 120000 index 0000000..bb9cf7b --- /dev/null +++ b/node_modules/.bin/dateformat @@ -0,0 +1 @@ +../dateformat/bin/cli.js \ No newline at end of file diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime new file mode 120000 index 0000000..fbb7ee0 --- /dev/null +++ b/node_modules/.bin/mime @@ -0,0 +1 @@ +../mime/cli.js \ No newline at end of file diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp new file mode 120000 index 0000000..017896c --- /dev/null +++ b/node_modules/.bin/mkdirp @@ -0,0 +1 @@ +../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 0000000..317eb29 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver \ No newline at end of file diff --git a/node_modules/.bin/strip-indent b/node_modules/.bin/strip-indent new file mode 120000 index 0000000..dddee7e --- /dev/null +++ b/node_modules/.bin/strip-indent @@ -0,0 +1 @@ +../strip-indent/cli.js \ No newline at end of file diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js new file mode 100644 index 0000000..b9574ed --- /dev/null +++ b/node_modules/ansi-regex/index.js @@ -0,0 +1,4 @@ +'use strict'; +module.exports = function () { + return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g; +}; diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/ansi-regex/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json new file mode 100644 index 0000000..1a06cbe --- /dev/null +++ b/node_modules/ansi-regex/package.json @@ -0,0 +1,132 @@ +{ + "_args": [ + [ + { + "raw": "ansi-regex@^2.0.0", + "scope": null, + "escapedName": "ansi-regex", + "name": "ansi-regex", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/has-ansi" + ] + ], + "_from": "ansi-regex@>=2.0.0 <3.0.0", + "_id": "ansi-regex@2.1.1", + "_inCache": true, + "_location": "/ansi-regex", + "_nodeVersion": "0.10.32", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/ansi-regex-2.1.1.tgz_1484363378013_0.4482989883981645" + }, + "_npmUser": { + "name": "qix", + "email": "i.am.qix@gmail.com" + }, + "_npmVersion": "2.14.2", + "_phantomChildren": {}, + "_requested": { + "raw": "ansi-regex@^2.0.0", + "scope": null, + "escapedName": "ansi-regex", + "name": "ansi-regex", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/has-ansi", + "/strip-ansi" + ], + "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "_shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df", + "_shrinkwrap": null, + "_spec": "ansi-regex@^2.0.0", + "_where": "/home/burchettm/statsbot/node_modules/has-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/ansi-regex/issues" + }, + "dependencies": {}, + "description": "Regular expression for matching ANSI escape codes", + "devDependencies": { + "ava": "0.17.0", + "xo": "0.16.0" + }, + "directories": {}, + "dist": { + "shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df", + "tarball": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "7c908e7b4eb6cd82bfe1295e33fdf6d166c7ed85", + "homepage": "https://github.com/chalk/ansi-regex#readme", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "license": "MIT", + "maintainers": [ + { + "name": "qix", + "email": "i.am.qix@gmail.com" + }, + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "ansi-regex", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/ansi-regex.git" + }, + "scripts": { + "test": "xo && ava --verbose", + "view-supported": "node fixtures/view-codes.js" + }, + "version": "2.1.1", + "xo": { + "rules": { + "guard-for-in": 0, + "no-loop-func": 0 + } + } +} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000..6a928ed --- /dev/null +++ b/node_modules/ansi-regex/readme.md @@ -0,0 +1,39 @@ +# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex) + +> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install --save ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001b[4mcake\u001b[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001b[4mcake\u001b[0m'.match(ansiRegex()); +//=> ['\u001b[4m', '\u001b[0m'] +``` + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js new file mode 100644 index 0000000..7894527 --- /dev/null +++ b/node_modules/ansi-styles/index.js @@ -0,0 +1,65 @@ +'use strict'; + +function assembleStyles () { + var styles = { + modifiers: { + reset: [0, 0], + bold: [1, 22], // 21 isn't widely supported and 22 does the same thing + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + colors: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39] + }, + bgColors: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49] + } + }; + + // fix humans + styles.colors.grey = styles.colors.gray; + + Object.keys(styles).forEach(function (groupName) { + var group = styles[groupName]; + + Object.keys(group).forEach(function (styleName) { + var style = group[styleName]; + + styles[styleName] = group[styleName] = { + open: '\u001b[' + style[0] + 'm', + close: '\u001b[' + style[1] + 'm' + }; + }); + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + }); + + return styles; +} + +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/ansi-styles/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json new file mode 100644 index 0000000..7e1721b --- /dev/null +++ b/node_modules/ansi-styles/package.json @@ -0,0 +1,114 @@ +{ + "_args": [ + [ + { + "raw": "ansi-styles@^2.2.1", + "scope": null, + "escapedName": "ansi-styles", + "name": "ansi-styles", + "rawSpec": "^2.2.1", + "spec": ">=2.2.1 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/chalk" + ] + ], + "_from": "ansi-styles@>=2.2.1 <3.0.0", + "_id": "ansi-styles@2.2.1", + "_inCache": true, + "_location": "/ansi-styles", + "_nodeVersion": "4.3.0", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/ansi-styles-2.2.1.tgz_1459197317833_0.9694824463222176" + }, + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "3.8.3", + "_phantomChildren": {}, + "_requested": { + "raw": "ansi-styles@^2.2.1", + "scope": null, + "escapedName": "ansi-styles", + "name": "ansi-styles", + "rawSpec": "^2.2.1", + "spec": ">=2.2.1 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/chalk" + ], + "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "_shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe", + "_shrinkwrap": null, + "_spec": "ansi-styles@^2.2.1", + "_where": "/home/burchettm/statsbot/node_modules/chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/ansi-styles/issues" + }, + "dependencies": {}, + "description": "ANSI escape codes for styling strings in the terminal", + "devDependencies": { + "mocha": "*" + }, + "directories": {}, + "dist": { + "shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe", + "tarball": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "95c59b23be760108b6530ca1c89477c21b258032", + "homepage": "https://github.com/chalk/ansi-styles#readme", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "ansi-styles", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/ansi-styles.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "2.2.1" +} diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md new file mode 100644 index 0000000..3f933f6 --- /dev/null +++ b/node_modules/ansi-styles/readme.md @@ -0,0 +1,86 @@ +# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) + +> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + +![](screenshot.png) + + +## Install + +``` +$ npm install --save ansi-styles +``` + + +## Usage + +```js +var ansi = require('ansi-styles'); + +console.log(ansi.green.open + 'Hello world!' + ansi.green.close); +``` + + +## API + +Each style has an `open` and `close` property. + + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(not widely supported)* +- `underline` +- `inverse` +- `hidden` +- `strikethrough` *(not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `gray` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` + + +## Advanced usage + +By default you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `ansi.modifiers` +- `ansi.colors` +- `ansi.bgColors` + + +###### Example + +```js +console.log(ansi.colors.green.open); +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/array-find-index/index.js b/node_modules/array-find-index/index.js new file mode 100644 index 0000000..e2dcd9a --- /dev/null +++ b/node_modules/array-find-index/index.js @@ -0,0 +1,25 @@ +'use strict'; +module.exports = function (arr, predicate, ctx) { + if (typeof Array.prototype.findIndex === 'function') { + return arr.findIndex(predicate, ctx); + } + + if (typeof predicate !== 'function') { + throw new TypeError('predicate must be a function'); + } + + var list = Object(arr); + var len = list.length; + + if (len === 0) { + return -1; + } + + for (var i = 0; i < len; i++) { + if (predicate.call(ctx, list[i], i, list)) { + return i; + } + } + + return -1; +}; diff --git a/node_modules/array-find-index/license b/node_modules/array-find-index/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/array-find-index/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/array-find-index/package.json b/node_modules/array-find-index/package.json new file mode 100644 index 0000000..fc465cb --- /dev/null +++ b/node_modules/array-find-index/package.json @@ -0,0 +1,103 @@ +{ + "_args": [ + [ + { + "raw": "array-find-index@^1.0.1", + "scope": null, + "escapedName": "array-find-index", + "name": "array-find-index", + "rawSpec": "^1.0.1", + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/currently-unhandled" + ] + ], + "_from": "array-find-index@>=1.0.1 <2.0.0", + "_id": "array-find-index@1.0.2", + "_inCache": true, + "_location": "/array-find-index", + "_nodeVersion": "4.5.0", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/array-find-index-1.0.2.tgz_1475224789159_0.7274378235451877" + }, + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.15.9", + "_phantomChildren": {}, + "_requested": { + "raw": "array-find-index@^1.0.1", + "scope": null, + "escapedName": "array-find-index", + "name": "array-find-index", + "rawSpec": "^1.0.1", + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/currently-unhandled" + ], + "_resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "_shasum": "df010aa1287e164bbda6f9723b0a96a1ec4187a1", + "_shrinkwrap": null, + "_spec": "array-find-index@^1.0.1", + "_where": "/home/burchettm/statsbot/node_modules/currently-unhandled", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/array-find-index/issues" + }, + "dependencies": {}, + "description": "ES2015 `Array#findIndex()` ponyfill", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "df010aa1287e164bbda6f9723b0a96a1ec4187a1", + "tarball": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "983f4c827ad22fa0353182b1ddcbfaecd4412859", + "homepage": "https://github.com/sindresorhus/array-find-index#readme", + "keywords": [ + "es2015", + "ponyfill", + "polyfill", + "shim", + "find", + "index", + "findindex", + "array" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "array-find-index", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/array-find-index.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.2" +} diff --git a/node_modules/array-find-index/readme.md b/node_modules/array-find-index/readme.md new file mode 100644 index 0000000..3166341 --- /dev/null +++ b/node_modules/array-find-index/readme.md @@ -0,0 +1,30 @@ +# array-find-index [![Build Status](https://travis-ci.org/sindresorhus/array-find-index.svg?branch=master)](https://travis-ci.org/sindresorhus/array-find-index) + +> ES2015 [`Array#findIndex()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex) [ponyfill](https://ponyfill.com) + + +## Install + +``` +$ npm install --save array-find-index +``` + + +## Usage + +```js +const arrayFindIndex = require('array-find-index'); + +arrayFindIndex(['rainbow', 'unicorn', 'pony'], x => x === 'unicorn'); +//=> 1 +``` + + +## API + +Same as `Array#findIndex()`, but with the input array as the first argument. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/async/CHANGELOG.md b/node_modules/async/CHANGELOG.md new file mode 100644 index 0000000..f15e081 --- /dev/null +++ b/node_modules/async/CHANGELOG.md @@ -0,0 +1,125 @@ +# v1.5.2 +- Allow using `"consructor"` as an argument in `memoize` (#998) +- Give a better error messsage when `auto` dependency checking fails (#994) +- Various doc updates (#936, #956, #979, #1002) + +# v1.5.1 +- Fix issue with `pause` in `queue` with concurrency enabled (#946) +- `while` and `until` now pass the final result to callback (#963) +- `auto` will properly handle concurrency when there is no callback (#966) +- `auto` will now properly stop execution when an error occurs (#988, #993) +- Various doc fixes (#971, #980) + +# v1.5.0 + +- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) (#892) +- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. (#873) +- `auto` now accepts an optional `concurrency` argument to limit the number of running tasks (#637) +- Added `queue#workersList()`, to retrieve the list of currently running tasks. (#891) +- Various code simplifications (#896, #904) +- Various doc fixes :scroll: (#890, #894, #903, #905, #912) + +# v1.4.2 + +- Ensure coverage files don't get published on npm (#879) + +# v1.4.1 + +- Add in overlooked `detectLimit` method (#866) +- Removed unnecessary files from npm releases (#861) +- Removed usage of a reserved word to prevent :boom: in older environments (#870) + +# v1.4.0 + +- `asyncify` now supports promises (#840) +- Added `Limit` versions of `filter` and `reject` (#836) +- Add `Limit` versions of `detect`, `some` and `every` (#828, #829) +- `some`, `every` and `detect` now short circuit early (#828, #829) +- Improve detection of the global object (#804), enabling use in WebWorkers +- `whilst` now called with arguments from iterator (#823) +- `during` now gets called with arguments from iterator (#824) +- Code simplifications and optimizations aplenty ([diff](https://github.com/caolan/async/compare/v1.3.0...v1.4.0)) + + +# v1.3.0 + +New Features: +- Added `constant` +- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. (#671, #806) +- Added `during` and `doDuring`, which are like `whilst` with an async truth test. (#800) +- `retry` now accepts an `interval` parameter to specify a delay between retries. (#793) +- `async` should work better in Web Workers due to better `root` detection (#804) +- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` (#642) +- Various internal updates (#786, #801, #802, #803) +- Various doc fixes (#790, #794) + +Bug Fixes: +- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. (#740, #744, #783) + + +# v1.2.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782) + + +# v1.2.0 + +New Features: + +- Added `timesLimit` (#743) +- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. (#747, #772) + +Bug Fixes: + +- Fixed a regression in `each` and family with empty arrays that have additional properties. (#775, #777) + + +# v1.1.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782) + + +# v1.1.0 + +New Features: + +- `cargo` now supports all of the same methods and event callbacks as `queue`. +- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. (#769) +- Optimized `map`, `eachOf`, and `waterfall` families of functions +- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array (#667). +- The callback is now optional for the composed results of `compose` and `seq`. (#618) +- Reduced file size by 4kb, (minified version by 1kb) +- Added code coverage through `nyc` and `coveralls` (#768) + +Bug Fixes: + +- `forever` will no longer stack overflow with a synchronous iterator (#622) +- `eachLimit` and other limit functions will stop iterating once an error occurs (#754) +- Always pass `null` in callbacks when there is no error (#439) +- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue (#668) +- `each` and family will properly handle an empty array (#578) +- `eachSeries` and family will finish if the underlying array is modified during execution (#557) +- `queue` will throw if a non-function is passed to `q.push()` (#593) +- Doc fixes (#629, #766) + + +# v1.0.0 + +No known breaking changes, we are simply complying with semver from here on out. + +Changes: + +- Start using a changelog! +- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) (#168 #704 #321) +- Detect deadlocks in `auto` (#663) +- Better support for require.js (#527) +- Throw if queue created with concurrency `0` (#714) +- Fix unneeded iteration in `queue.resume()` (#758) +- Guard against timer mocking overriding `setImmediate` (#609 #611) +- Miscellaneous doc fixes (#542 #596 #615 #628 #631 #690 #729) +- Use single noop function internally (#546) +- Optimize internal `_each`, `_map` and `_keys` functions. diff --git a/node_modules/async/LICENSE b/node_modules/async/LICENSE new file mode 100644 index 0000000..8f29698 --- /dev/null +++ b/node_modules/async/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010-2014 Caolan McMahon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/async/README.md b/node_modules/async/README.md new file mode 100644 index 0000000..316c405 --- /dev/null +++ b/node_modules/async/README.md @@ -0,0 +1,1877 @@ +# Async.js + +[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async) +[![NPM version](http://img.shields.io/npm/v/async.svg)](https://www.npmjs.org/package/async) +[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master) +[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + + +Async is a utility module which provides straight-forward, powerful functions +for working with asynchronous JavaScript. Although originally designed for +use with [Node.js](http://nodejs.org) and installable via `npm install async`, +it can also be used directly in the browser. + +Async is also installable via: + +- [bower](http://bower.io/): `bower install async` +- [component](https://github.com/component/component): `component install + caolan/async` +- [jam](http://jamjs.org/): `jam install async` +- [spm](http://spmjs.io/): `spm install async` + +Async provides around 20 functions that include the usual 'functional' +suspects (`map`, `reduce`, `filter`, `each`…) as well as some common patterns +for asynchronous control flow (`parallel`, `series`, `waterfall`…). All these +functions assume you follow the Node.js convention of providing a single +callback as the last argument of your `async` function. + + +## Quick Examples + +```javascript +async.map(['file1','file2','file3'], fs.stat, function(err, results){ + // results is now an array of stats for each file +}); + +async.filter(['file1','file2','file3'], fs.exists, function(results){ + // results now equals an array of the existing files +}); + +async.parallel([ + function(){ ... }, + function(){ ... } +], callback); + +async.series([ + function(){ ... }, + function(){ ... } +]); +``` + +There are many more functions available so take a look at the docs below for a +full list. This module aims to be comprehensive, so if you feel anything is +missing please create a GitHub issue for it. + +## Common Pitfalls [(StackOverflow)](http://stackoverflow.com/questions/tagged/async.js) +### Synchronous iteration functions + +If you get an error like `RangeError: Maximum call stack size exceeded.` or other stack overflow issues when using async, you are likely using a synchronous iterator. By *synchronous* we mean a function that calls its callback on the same tick in the javascript event loop, without doing any I/O or using any timers. Calling many callbacks iteratively will quickly overflow the stack. If you run into this issue, just defer your callback with `async.setImmediate` to start a new call stack on the next tick of the event loop. + +This can also arise by accident if you callback early in certain cases: + +```js +async.eachSeries(hugeArray, function iterator(item, callback) { + if (inCache(item)) { + callback(null, cache[item]); // if many items are cached, you'll overflow + } else { + doSomeIO(item, callback); + } +}, function done() { + //... +}); +``` + +Just change it to: + +```js +async.eachSeries(hugeArray, function iterator(item, callback) { + if (inCache(item)) { + async.setImmediate(function () { + callback(null, cache[item]); + }); + } else { + doSomeIO(item, callback); + //... +``` + +Async guards against synchronous functions in some, but not all, cases. If you are still running into stack overflows, you can defer as suggested above, or wrap functions with [`async.ensureAsync`](#ensureAsync) Functions that are asynchronous by their nature do not have this problem and don't need the extra callback deferral. + +If JavaScript's event loop is still a bit nebulous, check out [this article](http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/) or [this talk](http://2014.jsconf.eu/speakers/philip-roberts-what-the-heck-is-the-event-loop-anyway.html) for more detailed information about how it works. + + +### Multiple callbacks + +Make sure to always `return` when calling a callback early, otherwise you will cause multiple callbacks and unpredictable behavior in many cases. + +```js +async.waterfall([ + function (callback) { + getSomething(options, function (err, result) { + if (err) { + callback(new Error("failed getting something:" + err.message)); + // we should return here + } + // since we did not return, this callback still will be called and + // `processData` will be called twice + callback(null, result); + }); + }, + processData +], done) +``` + +It is always good practice to `return callback(err, result)` whenever a callback call is not the last statement of a function. + + +### Binding a context to an iterator + +This section is really about `bind`, not about `async`. If you are wondering how to +make `async` execute your iterators in a given context, or are confused as to why +a method of another library isn't working as an iterator, study this example: + +```js +// Here is a simple object with an (unnecessarily roundabout) squaring method +var AsyncSquaringLibrary = { + squareExponent: 2, + square: function(number, callback){ + var result = Math.pow(number, this.squareExponent); + setTimeout(function(){ + callback(null, result); + }, 200); + } +}; + +async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){ + // result is [NaN, NaN, NaN] + // This fails because the `this.squareExponent` expression in the square + // function is not evaluated in the context of AsyncSquaringLibrary, and is + // therefore undefined. +}); + +async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){ + // result is [1, 4, 9] + // With the help of bind we can attach a context to the iterator before + // passing it to async. Now the square function will be executed in its + // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent` + // will be as expected. +}); +``` + +## Download + +The source is available for download from +[GitHub](https://github.com/caolan/async/blob/master/lib/async.js). +Alternatively, you can install using Node Package Manager (`npm`): + + npm install async + +As well as using Bower: + + bower install async + +__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed + +## In the Browser + +So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. + +Usage: + +```html + + +``` + +## Documentation + +Some functions are also available in the following forms: +* `Series` - the same as `` but runs only a single async operation at a time +* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time + +### Collections + +* [`each`](#each), `eachSeries`, `eachLimit` +* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit` +* [`map`](#map), `mapSeries`, `mapLimit` +* [`filter`](#filter), `filterSeries`, `filterLimit` +* [`reject`](#reject), `rejectSeries`, `rejectLimit` +* [`reduce`](#reduce), [`reduceRight`](#reduceRight) +* [`detect`](#detect), `detectSeries`, `detectLimit` +* [`sortBy`](#sortBy) +* [`some`](#some), `someLimit` +* [`every`](#every), `everyLimit` +* [`concat`](#concat), `concatSeries` + +### Control Flow + +* [`series`](#seriestasks-callback) +* [`parallel`](#parallel), `parallelLimit` +* [`whilst`](#whilst), [`doWhilst`](#doWhilst) +* [`until`](#until), [`doUntil`](#doUntil) +* [`during`](#during), [`doDuring`](#doDuring) +* [`forever`](#forever) +* [`waterfall`](#waterfall) +* [`compose`](#compose) +* [`seq`](#seq) +* [`applyEach`](#applyEach), `applyEachSeries` +* [`queue`](#queue), [`priorityQueue`](#priorityQueue) +* [`cargo`](#cargo) +* [`auto`](#auto) +* [`retry`](#retry) +* [`iterator`](#iterator) +* [`times`](#times), `timesSeries`, `timesLimit` + +### Utils + +* [`apply`](#apply) +* [`nextTick`](#nextTick) +* [`memoize`](#memoize) +* [`unmemoize`](#unmemoize) +* [`ensureAsync`](#ensureAsync) +* [`constant`](#constant) +* [`asyncify`](#asyncify) +* [`wrapSync`](#wrapSync) +* [`log`](#log) +* [`dir`](#dir) +* [`noConflict`](#noConflict) + +## Collections + + + +### each(arr, iterator, [callback]) + +Applies the function `iterator` to each item in `arr`, in parallel. +The `iterator` is called with an item from the list, and a callback for when it +has finished. If the `iterator` passes an error to its `callback`, the main +`callback` (for the `each` function) is immediately called with the error. + +Note, that since this function applies `iterator` to each item in parallel, +there is no guarantee that the iterator functions will complete in order. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err)` which must be called once it has + completed. If no error has occurred, the `callback` should be run without + arguments or with an explicit `null` argument. The array index is not passed + to the iterator. If you need the index, use [`forEachOf`](#forEachOf). +* `callback(err)` - *Optional* A callback which is called when all `iterator` functions + have finished, or an error occurs. + +__Examples__ + + +```js +// assuming openFiles is an array of file names and saveFile is a function +// to save the modified contents of that file: + +async.each(openFiles, saveFile, function(err){ + // if any of the saves produced an error, err would equal that error +}); +``` + +```js +// assuming openFiles is an array of file names + +async.each(openFiles, function(file, callback) { + + // Perform operation on file here. + console.log('Processing file ' + file); + + if( file.length > 32 ) { + console.log('This file name is too long'); + callback('File name too long'); + } else { + // Do work to process file here + console.log('File processed'); + callback(); + } +}, function(err){ + // if any of the file processing produced an error, err would equal that error + if( err ) { + // One of the iterations produced an error. + // All processing will now stop. + console.log('A file failed to process'); + } else { + console.log('All files have been processed successfully'); + } +}); +``` + +__Related__ + +* eachSeries(arr, iterator, [callback]) +* eachLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + + + +### forEachOf(obj, iterator, [callback]) + +Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator. + +__Arguments__ + +* `obj` - An object or array to iterate over. +* `iterator(item, key, callback)` - A function to apply to each item in `obj`. +The `key` is the item's key, or index in the case of an array. The iterator is +passed a `callback(err)` which must be called once it has completed. If no +error has occurred, the callback should be run without arguments or with an +explicit `null` argument. +* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs. + +__Example__ + +```js +var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; +var configs = {}; + +async.forEachOf(obj, function (value, key, callback) { + fs.readFile(__dirname + value, "utf8", function (err, data) { + if (err) return callback(err); + try { + configs[key] = JSON.parse(data); + } catch (e) { + return callback(e); + } + callback(); + }) +}, function (err) { + if (err) console.error(err.message); + // configs is now a map of JSON data + doSomethingWith(configs); +}) +``` + +__Related__ + +* forEachOfSeries(obj, iterator, [callback]) +* forEachOfLimit(obj, limit, iterator, [callback]) + +--------------------------------------- + + +### map(arr, iterator, [callback]) + +Produces a new array of values by mapping each value in `arr` through +the `iterator` function. The `iterator` is called with an item from `arr` and a +callback for when it has finished processing. Each of these callback takes 2 arguments: +an `error`, and the transformed item from `arr`. If `iterator` passes an error to its +callback, the main `callback` (for the `map` function) is immediately called with the error. + +Note, that since this function applies the `iterator` to each item in parallel, +there is no guarantee that the `iterator` functions will complete in order. +However, the results array will be in the same order as the original `arr`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, transformed)` which must be called once + it has completed with an error (which can be `null`) and a transformed item. +* `callback(err, results)` - *Optional* A callback which is called when all `iterator` + functions have finished, or an error occurs. Results is an array of the + transformed items from the `arr`. + +__Example__ + +```js +async.map(['file1','file2','file3'], fs.stat, function(err, results){ + // results is now an array of stats for each file +}); +``` + +__Related__ +* mapSeries(arr, iterator, [callback]) +* mapLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + + +### filter(arr, iterator, [callback]) + +__Alias:__ `select` + +Returns a new array of all the values in `arr` which pass an async truth test. +_The callback for each `iterator` call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. This operation is +performed in parallel, but the results array will be in the same order as the +original. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in `arr`. + The `iterator` is passed a `callback(truthValue)`, which must be called with a + boolean argument once it has completed. +* `callback(results)` - *Optional* A callback which is called after all the `iterator` + functions have finished. + +__Example__ + +```js +async.filter(['file1','file2','file3'], fs.exists, function(results){ + // results now equals an array of the existing files +}); +``` + +__Related__ + +* filterSeries(arr, iterator, [callback]) +* filterLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + +### reject(arr, iterator, [callback]) + +The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. + +__Related__ + +* rejectSeries(arr, iterator, [callback]) +* rejectLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + +### reduce(arr, memo, iterator, [callback]) + +__Aliases:__ `inject`, `foldl` + +Reduces `arr` into a single value using an async `iterator` to return +each successive step. `memo` is the initial state of the reduction. +This function only operates in series. + +For performance reasons, it may make sense to split a call to this function into +a parallel map, and then use the normal `Array.prototype.reduce` on the results. +This function is for situations where each step in the reduction needs to be async; +if you can get the data before reducing it, then it's probably a good idea to do so. + +__Arguments__ + +* `arr` - An array to iterate over. +* `memo` - The initial state of the reduction. +* `iterator(memo, item, callback)` - A function applied to each item in the + array to produce the next step in the reduction. The `iterator` is passed a + `callback(err, reduction)` which accepts an optional error as its first + argument, and the state of the reduction as the second. If an error is + passed to the callback, the reduction is stopped and the main `callback` is + immediately called with the error. +* `callback(err, result)` - *Optional* A callback which is called after all the `iterator` + functions have finished. Result is the reduced value. + +__Example__ + +```js +async.reduce([1,2,3], 0, function(memo, item, callback){ + // pointless async: + process.nextTick(function(){ + callback(null, memo + item) + }); +}, function(err, result){ + // result is now equal to the last value of memo, which is 6 +}); +``` + +--------------------------------------- + + +### reduceRight(arr, memo, iterator, [callback]) + +__Alias:__ `foldr` + +Same as [`reduce`](#reduce), only operates on `arr` in reverse order. + + +--------------------------------------- + + +### detect(arr, iterator, [callback]) + +Returns the first value in `arr` that passes an async truth test. The +`iterator` is applied in parallel, meaning the first iterator to return `true` will +fire the detect `callback` with that result. That means the result might not be +the first item in the original `arr` (in terms of order) that passes the test. + +If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in `arr`. + The iterator is passed a `callback(truthValue)` which must be called with a + boolean argument once it has completed. **Note: this callback does not take an error as its first argument.** +* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns + `true`, or after all the `iterator` functions have finished. Result will be + the first item in the array that passes the truth test (iterator) or the + value `undefined` if none passed. **Note: this callback does not take an error as its first argument.** + +__Example__ + +```js +async.detect(['file1','file2','file3'], fs.exists, function(result){ + // result now equals the first file in the list that exists +}); +``` + +__Related__ + +* detectSeries(arr, iterator, [callback]) +* detectLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + +### sortBy(arr, iterator, [callback]) + +Sorts a list by the results of running each `arr` value through an async `iterator`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, sortValue)` which must be called once it + has completed with an error (which can be `null`) and a value to use as the sort + criteria. +* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` + functions have finished, or an error occurs. Results is the items from + the original `arr` sorted by the values returned by the `iterator` calls. + +__Example__ + +```js +async.sortBy(['file1','file2','file3'], function(file, callback){ + fs.stat(file, function(err, stats){ + callback(err, stats.mtime); + }); +}, function(err, results){ + // results is now the original array of files sorted by + // modified date +}); +``` + +__Sort Order__ + +By modifying the callback parameter the sorting order can be influenced: + +```js +//ascending order +async.sortBy([1,9,3,5], function(x, callback){ + callback(null, x); +}, function(err,result){ + //result callback +} ); + +//descending order +async.sortBy([1,9,3,5], function(x, callback){ + callback(null, x*-1); //<- x*-1 instead of x, turns the order around +}, function(err,result){ + //result callback +} ); +``` + +--------------------------------------- + + +### some(arr, iterator, [callback]) + +__Alias:__ `any` + +Returns `true` if at least one element in the `arr` satisfies an async test. +_The callback for each iterator call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. Once any iterator +call returns `true`, the main `callback` is immediately called. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in the array + in parallel. The iterator is passed a `callback(truthValue)`` which must be + called with a boolean argument once it has completed. +* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns + `true`, or after all the iterator functions have finished. Result will be + either `true` or `false` depending on the values of the async tests. + + **Note: the callbacks do not take an error as their first argument.** +__Example__ + +```js +async.some(['file1','file2','file3'], fs.exists, function(result){ + // if result is true then at least one of the files exists +}); +``` + +__Related__ + +* someLimit(arr, limit, iterator, callback) + +--------------------------------------- + + +### every(arr, iterator, [callback]) + +__Alias:__ `all` + +Returns `true` if every element in `arr` satisfies an async test. +_The callback for each `iterator` call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in the array + in parallel. The iterator is passed a `callback(truthValue)` which must be + called with a boolean argument once it has completed. +* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns + `false`, or after all the iterator functions have finished. Result will be + either `true` or `false` depending on the values of the async tests. + + **Note: the callbacks do not take an error as their first argument.** + +__Example__ + +```js +async.every(['file1','file2','file3'], fs.exists, function(result){ + // if result is true then every file exists +}); +``` + +__Related__ + +* everyLimit(arr, limit, iterator, callback) + +--------------------------------------- + + +### concat(arr, iterator, [callback]) + +Applies `iterator` to each item in `arr`, concatenating the results. Returns the +concatenated list. The `iterator`s are called in parallel, and the results are +concatenated as they return. There is no guarantee that the results array will +be returned in the original order of `arr` passed to the `iterator` function. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, results)` which must be called once it + has completed with an error (which can be `null`) and an array of results. +* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` + functions have finished, or an error occurs. Results is an array containing + the concatenated results of the `iterator` function. + +__Example__ + +```js +async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ + // files is now a list of filenames that exist in the 3 directories +}); +``` + +__Related__ + +* concatSeries(arr, iterator, [callback]) + + +## Control Flow + + +### series(tasks, [callback]) + +Run the functions in the `tasks` array in series, each one running once the previous +function has completed. If any functions in the series pass an error to its +callback, no more functions are run, and `callback` is immediately called with the value of the error. +Otherwise, `callback` receives an array of results when `tasks` have completed. + +It is also possible to use an object instead of an array. Each property will be +run as a function, and the results will be passed to the final `callback` as an object +instead of an array. This can be a more readable way of handling results from +[`series`](#series). + +**Note** that while many implementations preserve the order of object properties, the +[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) +explicitly states that + +> The mechanics and order of enumerating the properties is not specified. + +So if you rely on the order in which your series of functions are executed, and want +this to work on all platforms, consider using an array. + +__Arguments__ + +* `tasks` - An array or object containing functions to run, each function is passed + a `callback(err, result)` it must call on completion with an error `err` (which can + be `null`) and an optional `result` value. +* `callback(err, results)` - An optional callback to run once all the functions + have completed. This function gets a results array (or object) containing all + the result arguments passed to the `task` callbacks. + +__Example__ + +```js +async.series([ + function(callback){ + // do some stuff ... + callback(null, 'one'); + }, + function(callback){ + // do some more stuff ... + callback(null, 'two'); + } +], +// optional callback +function(err, results){ + // results is now equal to ['one', 'two'] +}); + + +// an example using an object instead of an array +async.series({ + one: function(callback){ + setTimeout(function(){ + callback(null, 1); + }, 200); + }, + two: function(callback){ + setTimeout(function(){ + callback(null, 2); + }, 100); + } +}, +function(err, results) { + // results is now equal to: {one: 1, two: 2} +}); +``` + +--------------------------------------- + + +### parallel(tasks, [callback]) + +Run the `tasks` array of functions in parallel, without waiting until the previous +function has completed. If any of the functions pass an error to its +callback, the main `callback` is immediately called with the value of the error. +Once the `tasks` have completed, the results are passed to the final `callback` as an +array. + +**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded. + +It is also possible to use an object instead of an array. Each property will be +run as a function and the results will be passed to the final `callback` as an object +instead of an array. This can be a more readable way of handling results from +[`parallel`](#parallel). + + +__Arguments__ + +* `tasks` - An array or object containing functions to run. Each function is passed + a `callback(err, result)` which it must call on completion with an error `err` + (which can be `null`) and an optional `result` value. +* `callback(err, results)` - An optional callback to run once all the functions + have completed successfully. This function gets a results array (or object) containing all + the result arguments passed to the task callbacks. + +__Example__ + +```js +async.parallel([ + function(callback){ + setTimeout(function(){ + callback(null, 'one'); + }, 200); + }, + function(callback){ + setTimeout(function(){ + callback(null, 'two'); + }, 100); + } +], +// optional callback +function(err, results){ + // the results array will equal ['one','two'] even though + // the second function had a shorter timeout. +}); + + +// an example using an object instead of an array +async.parallel({ + one: function(callback){ + setTimeout(function(){ + callback(null, 1); + }, 200); + }, + two: function(callback){ + setTimeout(function(){ + callback(null, 2); + }, 100); + } +}, +function(err, results) { + // results is now equals to: {one: 1, two: 2} +}); +``` + +__Related__ + +* parallelLimit(tasks, limit, [callback]) + +--------------------------------------- + + +### whilst(test, fn, callback) + +Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, +or an error occurs. + +__Arguments__ + +* `test()` - synchronous truth test to perform before each execution of `fn`. +* `fn(callback)` - A function which is called each time `test` passes. The function is + passed a `callback(err)`, which must be called once it has completed with an + optional `err` argument. +* `callback(err, [results])` - A callback which is called after the test + function has failed and repeated execution of `fn` has stopped. `callback` + will be passed an error and any arguments passed to the final `fn`'s callback. + +__Example__ + +```js +var count = 0; + +async.whilst( + function () { return count < 5; }, + function (callback) { + count++; + setTimeout(function () { + callback(null, count); + }, 1000); + }, + function (err, n) { + // 5 seconds have passed, n = 5 + } +); +``` + +--------------------------------------- + + +### doWhilst(fn, test, callback) + +The post-check version of [`whilst`](#whilst). To reflect the difference in +the order of operations, the arguments `test` and `fn` are switched. + +`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + +--------------------------------------- + + +### until(test, fn, callback) + +Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, +or an error occurs. `callback` will be passed an error and any arguments passed +to the final `fn`'s callback. + +The inverse of [`whilst`](#whilst). + +--------------------------------------- + + +### doUntil(fn, test, callback) + +Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. + +--------------------------------------- + + +### during(test, fn, callback) + +Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error. + +__Example__ + +```js +var count = 0; + +async.during( + function (callback) { + return callback(null, count < 5); + }, + function (callback) { + count++; + setTimeout(callback, 1000); + }, + function (err) { + // 5 seconds have passed + } +); +``` + +--------------------------------------- + + +### doDuring(fn, test, callback) + +The post-check version of [`during`](#during). To reflect the difference in +the order of operations, the arguments `test` and `fn` are switched. + +Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function. + +--------------------------------------- + + +### forever(fn, [errback]) + +Calls the asynchronous function `fn` with a callback parameter that allows it to +call itself again, in series, indefinitely. + +If an error is passed to the callback then `errback` is called with the +error, and execution stops, otherwise it will never be called. + +```js +async.forever( + function(next) { + // next is suitable for passing to things that need a callback(err [, whatever]); + // it will result in this function being called again. + }, + function(err) { + // if next is called with a value in its first parameter, it will appear + // in here as 'err', and execution will stop. + } +); +``` + +--------------------------------------- + + +### waterfall(tasks, [callback]) + +Runs the `tasks` array of functions in series, each passing their results to the next in +the array. However, if any of the `tasks` pass an error to their own callback, the +next function is not executed, and the main `callback` is immediately called with +the error. + +__Arguments__ + +* `tasks` - An array of functions to run, each function is passed a + `callback(err, result1, result2, ...)` it must call on completion. The first + argument is an error (which can be `null`) and any further arguments will be + passed as arguments in order to the next task. +* `callback(err, [results])` - An optional callback to run once all the functions + have completed. This will be passed the results of the last task's callback. + + + +__Example__ + +```js +async.waterfall([ + function(callback) { + callback(null, 'one', 'two'); + }, + function(arg1, arg2, callback) { + // arg1 now equals 'one' and arg2 now equals 'two' + callback(null, 'three'); + }, + function(arg1, callback) { + // arg1 now equals 'three' + callback(null, 'done'); + } +], function (err, result) { + // result now equals 'done' +}); +``` +Or, with named functions: + +```js +async.waterfall([ + myFirstFunction, + mySecondFunction, + myLastFunction, +], function (err, result) { + // result now equals 'done' +}); +function myFirstFunction(callback) { + callback(null, 'one', 'two'); +} +function mySecondFunction(arg1, arg2, callback) { + // arg1 now equals 'one' and arg2 now equals 'two' + callback(null, 'three'); +} +function myLastFunction(arg1, callback) { + // arg1 now equals 'three' + callback(null, 'done'); +} +``` + +Or, if you need to pass any argument to the first function: + +```js +async.waterfall([ + async.apply(myFirstFunction, 'zero'), + mySecondFunction, + myLastFunction, +], function (err, result) { + // result now equals 'done' +}); +function myFirstFunction(arg1, callback) { + // arg1 now equals 'zero' + callback(null, 'one', 'two'); +} +function mySecondFunction(arg1, arg2, callback) { + // arg1 now equals 'one' and arg2 now equals 'two' + callback(null, 'three'); +} +function myLastFunction(arg1, callback) { + // arg1 now equals 'three' + callback(null, 'done'); +} +``` + +--------------------------------------- + +### compose(fn1, fn2...) + +Creates a function which is a composition of the passed asynchronous +functions. Each function consumes the return value of the function that +follows. Composing functions `f()`, `g()`, and `h()` would produce the result of +`f(g(h()))`, only this version uses callbacks to obtain the return values. + +Each function is executed with the `this` binding of the composed function. + +__Arguments__ + +* `functions...` - the asynchronous functions to compose + + +__Example__ + +```js +function add1(n, callback) { + setTimeout(function () { + callback(null, n + 1); + }, 10); +} + +function mul3(n, callback) { + setTimeout(function () { + callback(null, n * 3); + }, 10); +} + +var add1mul3 = async.compose(mul3, add1); + +add1mul3(4, function (err, result) { + // result now equals 15 +}); +``` + +--------------------------------------- + +### seq(fn1, fn2...) + +Version of the compose function that is more natural to read. +Each function consumes the return value of the previous function. +It is the equivalent of [`compose`](#compose) with the arguments reversed. + +Each function is executed with the `this` binding of the composed function. + +__Arguments__ + +* `functions...` - the asynchronous functions to compose + + +__Example__ + +```js +// Requires lodash (or underscore), express3 and dresende's orm2. +// Part of an app, that fetches cats of the logged user. +// This example uses `seq` function to avoid overnesting and error +// handling clutter. +app.get('/cats', function(request, response) { + var User = request.models.User; + async.seq( + _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) + function(user, fn) { + user.getCats(fn); // 'getCats' has signature (callback(err, data)) + } + )(req.session.user_id, function (err, cats) { + if (err) { + console.error(err); + response.json({ status: 'error', message: err.message }); + } else { + response.json({ status: 'ok', message: 'Cats found', data: cats }); + } + }); +}); +``` + +--------------------------------------- + +### applyEach(fns, args..., callback) + +Applies the provided arguments to each function in the array, calling +`callback` after all functions have completed. If you only provide the first +argument, then it will return a function which lets you pass in the +arguments as if it were a single function call. + +__Arguments__ + +* `fns` - the asynchronous functions to all call with the same arguments +* `args...` - any number of separate arguments to pass to the function +* `callback` - the final argument should be the callback, called when all + functions have completed processing + + +__Example__ + +```js +async.applyEach([enableSearch, updateSchema], 'bucket', callback); + +// partial application example: +async.each( + buckets, + async.applyEach([enableSearch, updateSchema]), + callback +); +``` + +__Related__ + +* applyEachSeries(tasks, args..., [callback]) + +--------------------------------------- + + +### queue(worker, [concurrency]) + +Creates a `queue` object with the specified `concurrency`. Tasks added to the +`queue` are processed in parallel (up to the `concurrency` limit). If all +`worker`s are in progress, the task is queued until one becomes available. +Once a `worker` completes a `task`, that `task`'s callback is called. + +__Arguments__ + +* `worker(task, callback)` - An asynchronous function for processing a queued + task, which must call its `callback(err)` argument when finished, with an + optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`. +* `concurrency` - An `integer` for determining how many `worker` functions should be + run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown. + +__Queue objects__ + +The `queue` object returned by this function has the following properties and +methods: + +* `length()` - a function returning the number of items waiting to be processed. +* `started` - a function returning whether or not any items have been pushed and processed by the queue +* `running()` - a function returning the number of items currently being processed. +* `workersList()` - a function returning the array of items currently being processed. +* `idle()` - a function returning false if there are items waiting or being processed, or true if not. +* `concurrency` - an integer for determining how many `worker` functions should be + run in parallel. This property can be changed after a `queue` is created to + alter the concurrency on-the-fly. +* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once + the `worker` has finished processing the task. Instead of a single task, a `tasks` array + can be submitted. The respective callback is used for every task in the list. +* `unshift(task, [callback])` - add a new task to the front of the `queue`. +* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, + and further tasks will be queued. +* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. +* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. +* `paused` - a boolean for determining whether the queue is in a paused state +* `pause()` - a function that pauses the processing of tasks until `resume()` is called. +* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. +* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle. + +__Example__ + +```js +// create a queue object with concurrency 2 + +var q = async.queue(function (task, callback) { + console.log('hello ' + task.name); + callback(); +}, 2); + + +// assign a callback +q.drain = function() { + console.log('all items have been processed'); +} + +// add some items to the queue + +q.push({name: 'foo'}, function (err) { + console.log('finished processing foo'); +}); +q.push({name: 'bar'}, function (err) { + console.log('finished processing bar'); +}); + +// add some items to the queue (batch-wise) + +q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { + console.log('finished processing item'); +}); + +// add some items to the front of the queue + +q.unshift({name: 'bar'}, function (err) { + console.log('finished processing bar'); +}); +``` + + +--------------------------------------- + + +### priorityQueue(worker, concurrency) + +The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: + +* `push(task, priority, [callback])` - `priority` should be a number. If an array of + `tasks` is given, all tasks will be assigned the same priority. +* The `unshift` method was removed. + +--------------------------------------- + + +### cargo(worker, [payload]) + +Creates a `cargo` object with the specified payload. Tasks added to the +cargo will be processed altogether (up to the `payload` limit). If the +`worker` is in progress, the task is queued until it becomes available. Once +the `worker` has completed some tasks, each callback of those tasks is called. +Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work. + +While [queue](#queue) passes only one task to one of a group of workers +at a time, cargo passes an array of tasks to a single worker, repeating +when the worker is finished. + +__Arguments__ + +* `worker(tasks, callback)` - An asynchronous function for processing an array of + queued tasks, which must call its `callback(err)` argument when finished, with + an optional `err` argument. +* `payload` - An optional `integer` for determining how many tasks should be + processed per round; if omitted, the default is unlimited. + +__Cargo objects__ + +The `cargo` object returned by this function has the following properties and +methods: + +* `length()` - A function returning the number of items waiting to be processed. +* `payload` - An `integer` for determining how many tasks should be + process per round. This property can be changed after a `cargo` is created to + alter the payload on-the-fly. +* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called + once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` + can be submitted. The respective callback is used for every task in the list. +* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. +* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. +* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. +* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue) + +__Example__ + +```js +// create a cargo object with payload 2 + +var cargo = async.cargo(function (tasks, callback) { + for(var i=0; i +### auto(tasks, [concurrency], [callback]) + +Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied. + +If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far. + +Note, all functions are called with a `results` object as a second argument, +so it is unsafe to pass functions in the `tasks` object which cannot handle the +extra argument. + +For example, this snippet of code: + +```js +async.auto({ + readData: async.apply(fs.readFile, 'data.txt', 'utf-8') +}, callback); +``` + +will have the effect of calling `readFile` with the results object as the last +argument, which will fail: + +```js +fs.readFile('data.txt', 'utf-8', cb, {}); +``` + +Instead, wrap the call to `readFile` in a function which does not forward the +`results` object: + +```js +async.auto({ + readData: function(cb, results){ + fs.readFile('data.txt', 'utf-8', cb); + } +}, callback); +``` + +__Arguments__ + +* `tasks` - An object. Each of its properties is either a function or an array of + requirements, with the function itself the last item in the array. The object's key + of a property serves as the name of the task defined by that property, + i.e. can be used when specifying requirements for other tasks. + The function receives two arguments: (1) a `callback(err, result)` which must be + called when finished, passing an `error` (which can be `null`) and the result of + the function's execution, and (2) a `results` object, containing the results of + the previously executed functions. +* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible. +* `callback(err, results)` - An optional callback which is called when all the + tasks have been completed. It receives the `err` argument if any `tasks` + pass an error to their callback. Results are always returned; however, if + an error occurs, no further `tasks` will be performed, and the results + object will only contain partial results. + + +__Example__ + +```js +async.auto({ + get_data: function(callback){ + console.log('in get_data'); + // async code to get some data + callback(null, 'data', 'converted to array'); + }, + make_folder: function(callback){ + console.log('in make_folder'); + // async code to create a directory to store a file in + // this is run at the same time as getting the data + callback(null, 'folder'); + }, + write_file: ['get_data', 'make_folder', function(callback, results){ + console.log('in write_file', JSON.stringify(results)); + // once there is some data and the directory exists, + // write the data to a file in the directory + callback(null, 'filename'); + }], + email_link: ['write_file', function(callback, results){ + console.log('in email_link', JSON.stringify(results)); + // once the file is written let's email a link to it... + // results.write_file contains the filename returned by write_file. + callback(null, {'file':results.write_file, 'email':'user@example.com'}); + }] +}, function(err, results) { + console.log('err = ', err); + console.log('results = ', results); +}); +``` + +This is a fairly trivial example, but to do this using the basic parallel and +series functions would look like this: + +```js +async.parallel([ + function(callback){ + console.log('in get_data'); + // async code to get some data + callback(null, 'data', 'converted to array'); + }, + function(callback){ + console.log('in make_folder'); + // async code to create a directory to store a file in + // this is run at the same time as getting the data + callback(null, 'folder'); + } +], +function(err, results){ + async.series([ + function(callback){ + console.log('in write_file', JSON.stringify(results)); + // once there is some data and the directory exists, + // write the data to a file in the directory + results.push('filename'); + callback(null); + }, + function(callback){ + console.log('in email_link', JSON.stringify(results)); + // once the file is written let's email a link to it... + callback(null, {'file':results.pop(), 'email':'user@example.com'}); + } + ]); +}); +``` + +For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding +new tasks much easier (and the code more readable). + + +--------------------------------------- + + +### retry([opts = {times: 5, interval: 0}| 5], task, [callback]) + +Attempts to get a successful response from `task` no more than `times` times before +returning an error. If the task is successful, the `callback` will be passed the result +of the successful task. If all attempts fail, the callback will be passed the error and +result (if any) of the final attempt. + +__Arguments__ + +* `opts` - Can be either an object with `times` and `interval` or a number. + * `times` - The number of attempts to make before giving up. The default is `5`. + * `interval` - The time to wait between retries, in milliseconds. The default is `0`. + * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. +* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` + which must be called when finished, passing `err` (which can be `null`) and the `result` of + the function's execution, and (2) a `results` object, containing the results of + the previously executed functions (if nested inside another control flow). +* `callback(err, results)` - An optional callback which is called when the + task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. + +The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below: + +```js +// try calling apiMethod 3 times +async.retry(3, apiMethod, function(err, result) { + // do something with the result +}); +``` + +```js +// try calling apiMethod 3 times, waiting 200 ms between each retry +async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + // do something with the result +}); +``` + +```js +// try calling apiMethod the default 5 times no delay between each retry +async.retry(apiMethod, function(err, result) { + // do something with the result +}); +``` + +It can also be embedded within other control flow functions to retry individual methods +that are not as reliable, like this: + +```js +async.auto({ + users: api.getUsers.bind(api), + payments: async.retry(3, api.getPayments.bind(api)) +}, function(err, results) { + // do something with the results +}); +``` + + +--------------------------------------- + + +### iterator(tasks) + +Creates an iterator function which calls the next function in the `tasks` array, +returning a continuation to call the next one after that. It's also possible to +“peek” at the next iterator with `iterator.next()`. + +This function is used internally by the `async` module, but can be useful when +you want to manually control the flow of functions in series. + +__Arguments__ + +* `tasks` - An array of functions to run. + +__Example__ + +```js +var iterator = async.iterator([ + function(){ sys.p('one'); }, + function(){ sys.p('two'); }, + function(){ sys.p('three'); } +]); + +node> var iterator2 = iterator(); +'one' +node> var iterator3 = iterator2(); +'two' +node> iterator3(); +'three' +node> var nextfn = iterator2.next(); +node> nextfn(); +'three' +``` + +--------------------------------------- + + +### apply(function, arguments..) + +Creates a continuation function with some arguments already applied. + +Useful as a shorthand when combined with other control flow functions. Any arguments +passed to the returned function are added to the arguments originally passed +to apply. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to automatically apply when the + continuation is called. + +__Example__ + +```js +// using apply + +async.parallel([ + async.apply(fs.writeFile, 'testfile1', 'test1'), + async.apply(fs.writeFile, 'testfile2', 'test2'), +]); + + +// the same process without using apply + +async.parallel([ + function(callback){ + fs.writeFile('testfile1', 'test1', callback); + }, + function(callback){ + fs.writeFile('testfile2', 'test2', callback); + } +]); +``` + +It's possible to pass any number of additional arguments when calling the +continuation: + +```js +node> var fn = async.apply(sys.puts, 'one'); +node> fn('two', 'three'); +one +two +three +``` + +--------------------------------------- + + +### nextTick(callback), setImmediate(callback) + +Calls `callback` on a later loop around the event loop. In Node.js this just +calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` +if available, otherwise `setTimeout(callback, 0)`, which means other higher priority +events may precede the execution of `callback`. + +This is used internally for browser-compatibility purposes. + +__Arguments__ + +* `callback` - The function to call on a later loop around the event loop. + +__Example__ + +```js +var call_order = []; +async.nextTick(function(){ + call_order.push('two'); + // call_order now equals ['one','two'] +}); +call_order.push('one') +``` + + +### times(n, iterator, [callback]) + +Calls the `iterator` function `n` times, and accumulates results in the same manner +you would use with [`map`](#map). + +__Arguments__ + +* `n` - The number of times to run the function. +* `iterator` - The function to call `n` times. +* `callback` - see [`map`](#map) + +__Example__ + +```js +// Pretend this is some complicated async factory +var createUser = function(id, callback) { + callback(null, { + id: 'user' + id + }) +} +// generate 5 users +async.times(5, function(n, next){ + createUser(n, function(err, user) { + next(err, user) + }) +}, function(err, users) { + // we should now have 5 users +}); +``` + +__Related__ + +* timesSeries(n, iterator, [callback]) +* timesLimit(n, limit, iterator, [callback]) + + +## Utils + + +### memoize(fn, [hasher]) + +Caches the results of an `async` function. When creating a hash to store function +results against, the callback is omitted from the hash and an optional hash +function can be used. + +If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function. + +The cache of results is exposed as the `memo` property of the function returned +by `memoize`. + +__Arguments__ + +* `fn` - The function to proxy and cache results from. +* `hasher` - An optional function for generating a custom hash for storing + results. It has all the arguments applied to it apart from the callback, and + must be synchronous. + +__Example__ + +```js +var slow_fn = function (name, callback) { + // do something + callback(null, result); +}; +var fn = async.memoize(slow_fn); + +// fn can now be used as if it were slow_fn +fn('some name', function () { + // callback +}); +``` + + +### unmemoize(fn) + +Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized +form. Handy for testing. + +__Arguments__ + +* `fn` - the memoized function + +--------------------------------------- + + +### ensureAsync(fn) + +Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained. + +__Arguments__ + +* `fn` - an async function, one that expects a node-style callback as its last argument + +Returns a wrapped function with the exact same call signature as the function passed in. + +__Example__ + +```js +function sometimesAsync(arg, callback) { + if (cache[arg]) { + return callback(null, cache[arg]); // this would be synchronous!! + } else { + doSomeIO(arg, callback); // this IO would be asynchronous + } +} + +// this has a risk of stack overflows if many results are cached in a row +async.mapSeries(args, sometimesAsync, done); + +// this will defer sometimesAsync's callback if necessary, +// preventing stack overflows +async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + +``` + +--------------------------------------- + + +### constant(values...) + +Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`. + +__Example__ + +```js +async.waterfall([ + async.constant(42), + function (value, next) { + // value === 42 + }, + //... +], callback); + +async.waterfall([ + async.constant(filename, "utf8"), + fs.readFile, + function (fileData, next) { + //... + } + //... +], callback); + +async.auto({ + hostname: async.constant("https://server.net/"), + port: findFreePort, + launchServer: ["hostname", "port", function (cb, options) { + startServer(options, cb); + }], + //... +}, callback); + +``` + +--------------------------------------- + + + +### asyncify(func) + +__Alias:__ `wrapSync` + +Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback. + +__Example__ + +```js +async.waterfall([ + async.apply(fs.readFile, filename, "utf8"), + async.asyncify(JSON.parse), + function (data, next) { + // data is the result of parsing the text. + // If there was a parsing error, it would have been caught. + } +], callback) +``` + +If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example: + +```js +async.waterfall([ + async.apply(fs.readFile, filename, "utf8"), + async.asyncify(function (contents) { + return db.model.create(contents); + }), + function (model, next) { + // `model` is the instantiated model object. + // If there was an error, this function would be skipped. + } +], callback) +``` + +This also means you can asyncify ES2016 `async` functions. + +```js +var q = async.queue(async.asyncify(async function (file) { + var intermediateStep = await processFile(file); + return await somePromise(intermediateStep) +})); + +q.push(files); +``` + +--------------------------------------- + + +### log(function, arguments) + +Logs the result of an `async` function to the `console`. Only works in Node.js or +in browsers that support `console.log` and `console.error` (such as FF and Chrome). +If multiple arguments are returned from the async function, `console.log` is +called on each argument in order. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to apply to the function. + +__Example__ + +```js +var hello = function(name, callback){ + setTimeout(function(){ + callback(null, 'hello ' + name); + }, 1000); +}; +``` +```js +node> async.log(hello, 'world'); +'hello world' +``` + +--------------------------------------- + + +### dir(function, arguments) + +Logs the result of an `async` function to the `console` using `console.dir` to +display the properties of the resulting object. Only works in Node.js or +in browsers that support `console.dir` and `console.error` (such as FF and Chrome). +If multiple arguments are returned from the async function, `console.dir` is +called on each argument in order. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to apply to the function. + +__Example__ + +```js +var hello = function(name, callback){ + setTimeout(function(){ + callback(null, {hello: name}); + }, 1000); +}; +``` +```js +node> async.dir(hello, 'world'); +{hello: 'world'} +``` + +--------------------------------------- + + +### noConflict() + +Changes the value of `async` back to its original value, returning a reference to the +`async` object. diff --git a/node_modules/async/dist/async.js b/node_modules/async/dist/async.js new file mode 100644 index 0000000..31e7620 --- /dev/null +++ b/node_modules/async/dist/async.js @@ -0,0 +1,1265 @@ +/*! + * async + * https://github.com/caolan/async + * + * Copyright 2010-2014 Caolan McMahon + * Released under the MIT license + */ +(function () { + + var async = {}; + function noop() {} + function identity(v) { + return v; + } + function toBool(v) { + return !!v; + } + function notId(v) { + return !v; + } + + // global on the server, window in the browser + var previous_async; + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root = typeof self === 'object' && self.self === self && self || + typeof global === 'object' && global.global === global && global || + this; + + if (root != null) { + previous_async = root.async; + } + + async.noConflict = function () { + root.async = previous_async; + return async; + }; + + function only_once(fn) { + return function() { + if (fn === null) throw new Error("Callback was already called."); + fn.apply(this, arguments); + fn = null; + }; + } + + function _once(fn) { + return function() { + if (fn === null) return; + fn.apply(this, arguments); + fn = null; + }; + } + + //// cross-browser compatiblity functions //// + + var _toString = Object.prototype.toString; + + var _isArray = Array.isArray || function (obj) { + return _toString.call(obj) === '[object Array]'; + }; + + // Ported from underscore.js isObject + var _isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + function _isArrayLike(arr) { + return _isArray(arr) || ( + // has a positive integer length property + typeof arr.length === "number" && + arr.length >= 0 && + arr.length % 1 === 0 + ); + } + + function _arrayEach(arr, iterator) { + var index = -1, + length = arr.length; + + while (++index < length) { + iterator(arr[index], index, arr); + } + } + + function _map(arr, iterator) { + var index = -1, + length = arr.length, + result = Array(length); + + while (++index < length) { + result[index] = iterator(arr[index], index, arr); + } + return result; + } + + function _range(count) { + return _map(Array(count), function (v, i) { return i; }); + } + + function _reduce(arr, iterator, memo) { + _arrayEach(arr, function (x, i, a) { + memo = iterator(memo, x, i, a); + }); + return memo; + } + + function _forEachOf(object, iterator) { + _arrayEach(_keys(object), function (key) { + iterator(object[key], key); + }); + } + + function _indexOf(arr, item) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] === item) return i; + } + return -1; + } + + var _keys = Object.keys || function (obj) { + var keys = []; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + keys.push(k); + } + } + return keys; + }; + + function _keyIterator(coll) { + var i = -1; + var len; + var keys; + if (_isArrayLike(coll)) { + len = coll.length; + return function next() { + i++; + return i < len ? i : null; + }; + } else { + keys = _keys(coll); + len = keys.length; + return function next() { + i++; + return i < len ? keys[i] : null; + }; + } + } + + // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) + // This accumulates the arguments passed into an array, after a given index. + // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). + function _restParam(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0); + var rest = Array(length); + for (var index = 0; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + } + // Currently unused but handle cases outside of the switch statement: + // var args = Array(startIndex + 1); + // for (index = 0; index < startIndex; index++) { + // args[index] = arguments[index]; + // } + // args[startIndex] = rest; + // return func.apply(this, args); + }; + } + + function _withoutIndex(iterator) { + return function (value, index, callback) { + return iterator(value, callback); + }; + } + + //// exported async module functions //// + + //// nextTick implementation with browser-compatible fallback //// + + // capture the global reference to guard against fakeTimer mocks + var _setImmediate = typeof setImmediate === 'function' && setImmediate; + + var _delay = _setImmediate ? function(fn) { + // not a direct alias for IE10 compatibility + _setImmediate(fn); + } : function(fn) { + setTimeout(fn, 0); + }; + + if (typeof process === 'object' && typeof process.nextTick === 'function') { + async.nextTick = process.nextTick; + } else { + async.nextTick = _delay; + } + async.setImmediate = _setImmediate ? _delay : async.nextTick; + + + async.forEach = + async.each = function (arr, iterator, callback) { + return async.eachOf(arr, _withoutIndex(iterator), callback); + }; + + async.forEachSeries = + async.eachSeries = function (arr, iterator, callback) { + return async.eachOfSeries(arr, _withoutIndex(iterator), callback); + }; + + + async.forEachLimit = + async.eachLimit = function (arr, limit, iterator, callback) { + return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); + }; + + async.forEachOf = + async.eachOf = function (object, iterator, callback) { + callback = _once(callback || noop); + object = object || []; + + var iter = _keyIterator(object); + var key, completed = 0; + + while ((key = iter()) != null) { + completed += 1; + iterator(object[key], key, only_once(done)); + } + + if (completed === 0) callback(null); + + function done(err) { + completed--; + if (err) { + callback(err); + } + // Check key is null in case iterator isn't exhausted + // and done resolved synchronously. + else if (key === null && completed <= 0) { + callback(null); + } + } + }; + + async.forEachOfSeries = + async.eachOfSeries = function (obj, iterator, callback) { + callback = _once(callback || noop); + obj = obj || []; + var nextKey = _keyIterator(obj); + var key = nextKey(); + function iterate() { + var sync = true; + if (key === null) { + return callback(null); + } + iterator(obj[key], key, only_once(function (err) { + if (err) { + callback(err); + } + else { + key = nextKey(); + if (key === null) { + return callback(null); + } else { + if (sync) { + async.setImmediate(iterate); + } else { + iterate(); + } + } + } + })); + sync = false; + } + iterate(); + }; + + + + async.forEachOfLimit = + async.eachOfLimit = function (obj, limit, iterator, callback) { + _eachOfLimit(limit)(obj, iterator, callback); + }; + + function _eachOfLimit(limit) { + + return function (obj, iterator, callback) { + callback = _once(callback || noop); + obj = obj || []; + var nextKey = _keyIterator(obj); + if (limit <= 0) { + return callback(null); + } + var done = false; + var running = 0; + var errored = false; + + (function replenish () { + if (done && running <= 0) { + return callback(null); + } + + while (running < limit && !errored) { + var key = nextKey(); + if (key === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iterator(obj[key], key, only_once(function (err) { + running -= 1; + if (err) { + callback(err); + errored = true; + } + else { + replenish(); + } + })); + } + })(); + }; + } + + + function doParallel(fn) { + return function (obj, iterator, callback) { + return fn(async.eachOf, obj, iterator, callback); + }; + } + function doParallelLimit(fn) { + return function (obj, limit, iterator, callback) { + return fn(_eachOfLimit(limit), obj, iterator, callback); + }; + } + function doSeries(fn) { + return function (obj, iterator, callback) { + return fn(async.eachOfSeries, obj, iterator, callback); + }; + } + + function _asyncMap(eachfn, arr, iterator, callback) { + callback = _once(callback || noop); + arr = arr || []; + var results = _isArrayLike(arr) ? [] : {}; + eachfn(arr, function (value, index, callback) { + iterator(value, function (err, v) { + results[index] = v; + callback(err); + }); + }, function (err) { + callback(err, results); + }); + } + + async.map = doParallel(_asyncMap); + async.mapSeries = doSeries(_asyncMap); + async.mapLimit = doParallelLimit(_asyncMap); + + // reduce only has a series version, as doing reduce in parallel won't + // work in many situations. + async.inject = + async.foldl = + async.reduce = function (arr, memo, iterator, callback) { + async.eachOfSeries(arr, function (x, i, callback) { + iterator(memo, x, function (err, v) { + memo = v; + callback(err); + }); + }, function (err) { + callback(err, memo); + }); + }; + + async.foldr = + async.reduceRight = function (arr, memo, iterator, callback) { + var reversed = _map(arr, identity).reverse(); + async.reduce(reversed, memo, iterator, callback); + }; + + async.transform = function (arr, memo, iterator, callback) { + if (arguments.length === 3) { + callback = iterator; + iterator = memo; + memo = _isArray(arr) ? [] : {}; + } + + async.eachOf(arr, function(v, k, cb) { + iterator(memo, v, k, cb); + }, function(err) { + callback(err, memo); + }); + }; + + function _filter(eachfn, arr, iterator, callback) { + var results = []; + eachfn(arr, function (x, index, callback) { + iterator(x, function (v) { + if (v) { + results.push({index: index, value: x}); + } + callback(); + }); + }, function () { + callback(_map(results.sort(function (a, b) { + return a.index - b.index; + }), function (x) { + return x.value; + })); + }); + } + + async.select = + async.filter = doParallel(_filter); + + async.selectLimit = + async.filterLimit = doParallelLimit(_filter); + + async.selectSeries = + async.filterSeries = doSeries(_filter); + + function _reject(eachfn, arr, iterator, callback) { + _filter(eachfn, arr, function(value, cb) { + iterator(value, function(v) { + cb(!v); + }); + }, callback); + } + async.reject = doParallel(_reject); + async.rejectLimit = doParallelLimit(_reject); + async.rejectSeries = doSeries(_reject); + + function _createTester(eachfn, check, getResult) { + return function(arr, limit, iterator, cb) { + function done() { + if (cb) cb(getResult(false, void 0)); + } + function iteratee(x, _, callback) { + if (!cb) return callback(); + iterator(x, function (v) { + if (cb && check(v)) { + cb(getResult(true, x)); + cb = iterator = false; + } + callback(); + }); + } + if (arguments.length > 3) { + eachfn(arr, limit, iteratee, done); + } else { + cb = iterator; + iterator = limit; + eachfn(arr, iteratee, done); + } + }; + } + + async.any = + async.some = _createTester(async.eachOf, toBool, identity); + + async.someLimit = _createTester(async.eachOfLimit, toBool, identity); + + async.all = + async.every = _createTester(async.eachOf, notId, notId); + + async.everyLimit = _createTester(async.eachOfLimit, notId, notId); + + function _findGetResult(v, x) { + return x; + } + async.detect = _createTester(async.eachOf, identity, _findGetResult); + async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); + async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); + + async.sortBy = function (arr, iterator, callback) { + async.map(arr, function (x, callback) { + iterator(x, function (err, criteria) { + if (err) { + callback(err); + } + else { + callback(null, {value: x, criteria: criteria}); + } + }); + }, function (err, results) { + if (err) { + return callback(err); + } + else { + callback(null, _map(results.sort(comparator), function (x) { + return x.value; + })); + } + + }); + + function comparator(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } + }; + + async.auto = function (tasks, concurrency, callback) { + if (typeof arguments[1] === 'function') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = _once(callback || noop); + var keys = _keys(tasks); + var remainingTasks = keys.length; + if (!remainingTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = remainingTasks; + } + + var results = {}; + var runningTasks = 0; + + var hasError = false; + + var listeners = []; + function addListener(fn) { + listeners.unshift(fn); + } + function removeListener(fn) { + var idx = _indexOf(listeners, fn); + if (idx >= 0) listeners.splice(idx, 1); + } + function taskComplete() { + remainingTasks--; + _arrayEach(listeners.slice(0), function (fn) { + fn(); + }); + } + + addListener(function () { + if (!remainingTasks) { + callback(null, results); + } + }); + + _arrayEach(keys, function (k) { + if (hasError) return; + var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; + var taskCallback = _restParam(function(err, args) { + runningTasks--; + if (args.length <= 1) { + args = args[0]; + } + if (err) { + var safeResults = {}; + _forEachOf(results, function(val, rkey) { + safeResults[rkey] = val; + }); + safeResults[k] = args; + hasError = true; + + callback(err, safeResults); + } + else { + results[k] = args; + async.setImmediate(taskComplete); + } + }); + var requires = task.slice(0, task.length - 1); + // prevent dead-locks + var len = requires.length; + var dep; + while (len--) { + if (!(dep = tasks[requires[len]])) { + throw new Error('Has nonexistent dependency in ' + requires.join(', ')); + } + if (_isArray(dep) && _indexOf(dep, k) >= 0) { + throw new Error('Has cyclic dependencies'); + } + } + function ready() { + return runningTasks < concurrency && _reduce(requires, function (a, x) { + return (a && results.hasOwnProperty(x)); + }, true) && !results.hasOwnProperty(k); + } + if (ready()) { + runningTasks++; + task[task.length - 1](taskCallback, results); + } + else { + addListener(listener); + } + function listener() { + if (ready()) { + runningTasks++; + removeListener(listener); + task[task.length - 1](taskCallback, results); + } + } + }); + }; + + + + async.retry = function(times, task, callback) { + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var attempts = []; + + var opts = { + times: DEFAULT_TIMES, + interval: DEFAULT_INTERVAL + }; + + function parseTimes(acc, t){ + if(typeof t === 'number'){ + acc.times = parseInt(t, 10) || DEFAULT_TIMES; + } else if(typeof t === 'object'){ + acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; + acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; + } else { + throw new Error('Unsupported argument type for \'times\': ' + typeof t); + } + } + + var length = arguments.length; + if (length < 1 || length > 3) { + throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); + } else if (length <= 2 && typeof times === 'function') { + callback = task; + task = times; + } + if (typeof times !== 'function') { + parseTimes(opts, times); + } + opts.callback = callback; + opts.task = task; + + function wrappedTask(wrappedCallback, wrappedResults) { + function retryAttempt(task, finalAttempt) { + return function(seriesCallback) { + task(function(err, result){ + seriesCallback(!err || finalAttempt, {err: err, result: result}); + }, wrappedResults); + }; + } + + function retryInterval(interval){ + return function(seriesCallback){ + setTimeout(function(){ + seriesCallback(null); + }, interval); + }; + } + + while (opts.times) { + + var finalAttempt = !(opts.times-=1); + attempts.push(retryAttempt(opts.task, finalAttempt)); + if(!finalAttempt && opts.interval > 0){ + attempts.push(retryInterval(opts.interval)); + } + } + + async.series(attempts, function(done, data){ + data = data[data.length - 1]; + (wrappedCallback || opts.callback)(data.err, data.result); + }); + } + + // If a callback is passed, run this as a controll flow + return opts.callback ? wrappedTask() : wrappedTask; + }; + + async.waterfall = function (tasks, callback) { + callback = _once(callback || noop); + if (!_isArray(tasks)) { + var err = new Error('First argument to waterfall must be an array of functions'); + return callback(err); + } + if (!tasks.length) { + return callback(); + } + function wrapIterator(iterator) { + return _restParam(function (err, args) { + if (err) { + callback.apply(null, [err].concat(args)); + } + else { + var next = iterator.next(); + if (next) { + args.push(wrapIterator(next)); + } + else { + args.push(callback); + } + ensureAsync(iterator).apply(null, args); + } + }); + } + wrapIterator(async.iterator(tasks))(); + }; + + function _parallel(eachfn, tasks, callback) { + callback = callback || noop; + var results = _isArrayLike(tasks) ? [] : {}; + + eachfn(tasks, function (task, key, callback) { + task(_restParam(function (err, args) { + if (args.length <= 1) { + args = args[0]; + } + results[key] = args; + callback(err); + })); + }, function (err) { + callback(err, results); + }); + } + + async.parallel = function (tasks, callback) { + _parallel(async.eachOf, tasks, callback); + }; + + async.parallelLimit = function(tasks, limit, callback) { + _parallel(_eachOfLimit(limit), tasks, callback); + }; + + async.series = function(tasks, callback) { + _parallel(async.eachOfSeries, tasks, callback); + }; + + async.iterator = function (tasks) { + function makeCallback(index) { + function fn() { + if (tasks.length) { + tasks[index].apply(null, arguments); + } + return fn.next(); + } + fn.next = function () { + return (index < tasks.length - 1) ? makeCallback(index + 1): null; + }; + return fn; + } + return makeCallback(0); + }; + + async.apply = _restParam(function (fn, args) { + return _restParam(function (callArgs) { + return fn.apply( + null, args.concat(callArgs) + ); + }); + }); + + function _concat(eachfn, arr, fn, callback) { + var result = []; + eachfn(arr, function (x, index, cb) { + fn(x, function (err, y) { + result = result.concat(y || []); + cb(err); + }); + }, function (err) { + callback(err, result); + }); + } + async.concat = doParallel(_concat); + async.concatSeries = doSeries(_concat); + + async.whilst = function (test, iterator, callback) { + callback = callback || noop; + if (test()) { + var next = _restParam(function(err, args) { + if (err) { + callback(err); + } else if (test.apply(this, args)) { + iterator(next); + } else { + callback.apply(null, [null].concat(args)); + } + }); + iterator(next); + } else { + callback(null); + } + }; + + async.doWhilst = function (iterator, test, callback) { + var calls = 0; + return async.whilst(function() { + return ++calls <= 1 || test.apply(this, arguments); + }, iterator, callback); + }; + + async.until = function (test, iterator, callback) { + return async.whilst(function() { + return !test.apply(this, arguments); + }, iterator, callback); + }; + + async.doUntil = function (iterator, test, callback) { + return async.doWhilst(iterator, function() { + return !test.apply(this, arguments); + }, callback); + }; + + async.during = function (test, iterator, callback) { + callback = callback || noop; + + var next = _restParam(function(err, args) { + if (err) { + callback(err); + } else { + args.push(check); + test.apply(this, args); + } + }); + + var check = function(err, truth) { + if (err) { + callback(err); + } else if (truth) { + iterator(next); + } else { + callback(null); + } + }; + + test(check); + }; + + async.doDuring = function (iterator, test, callback) { + var calls = 0; + async.during(function(next) { + if (calls++ < 1) { + next(null, true); + } else { + test.apply(this, arguments); + } + }, iterator, callback); + }; + + function _queue(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } + else if(concurrency === 0) { + throw new Error('Concurrency must not be zero'); + } + function _insert(q, data, pos, callback) { + if (callback != null && typeof callback !== "function") { + throw new Error("task callback must be a function"); + } + q.started = true; + if (!_isArray(data)) { + data = [data]; + } + if(data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + return async.setImmediate(function() { + q.drain(); + }); + } + _arrayEach(data, function(task) { + var item = { + data: task, + callback: callback || noop + }; + + if (pos) { + q.tasks.unshift(item); + } else { + q.tasks.push(item); + } + + if (q.tasks.length === q.concurrency) { + q.saturated(); + } + }); + async.setImmediate(q.process); + } + function _next(q, tasks) { + return function(){ + workers -= 1; + + var removed = false; + var args = arguments; + _arrayEach(tasks, function (task) { + _arrayEach(workersList, function (worker, index) { + if (worker === task && !removed) { + workersList.splice(index, 1); + removed = true; + } + }); + + task.callback.apply(task, args); + }); + if (q.tasks.length + workers === 0) { + q.drain(); + } + q.process(); + }; + } + + var workers = 0; + var workersList = []; + var q = { + tasks: [], + concurrency: concurrency, + payload: payload, + saturated: noop, + empty: noop, + drain: noop, + started: false, + paused: false, + push: function (data, callback) { + _insert(q, data, false, callback); + }, + kill: function () { + q.drain = noop; + q.tasks = []; + }, + unshift: function (data, callback) { + _insert(q, data, true, callback); + }, + process: function () { + while(!q.paused && workers < q.concurrency && q.tasks.length){ + + var tasks = q.payload ? + q.tasks.splice(0, q.payload) : + q.tasks.splice(0, q.tasks.length); + + var data = _map(tasks, function (task) { + return task.data; + }); + + if (q.tasks.length === 0) { + q.empty(); + } + workers += 1; + workersList.push(tasks[0]); + var cb = only_once(_next(q, tasks)); + worker(data, cb); + } + }, + length: function () { + return q.tasks.length; + }, + running: function () { + return workers; + }, + workersList: function () { + return workersList; + }, + idle: function() { + return q.tasks.length + workers === 0; + }, + pause: function () { + q.paused = true; + }, + resume: function () { + if (q.paused === false) { return; } + q.paused = false; + var resumeCount = Math.min(q.concurrency, q.tasks.length); + // Need to call q.process once per concurrent + // worker to preserve full concurrency after pause + for (var w = 1; w <= resumeCount; w++) { + async.setImmediate(q.process); + } + } + }; + return q; + } + + async.queue = function (worker, concurrency) { + var q = _queue(function (items, cb) { + worker(items[0], cb); + }, concurrency, 1); + + return q; + }; + + async.priorityQueue = function (worker, concurrency) { + + function _compareTasks(a, b){ + return a.priority - b.priority; + } + + function _binarySearch(sequence, item, compare) { + var beg = -1, + end = sequence.length - 1; + while (beg < end) { + var mid = beg + ((end - beg + 1) >>> 1); + if (compare(item, sequence[mid]) >= 0) { + beg = mid; + } else { + end = mid - 1; + } + } + return beg; + } + + function _insert(q, data, priority, callback) { + if (callback != null && typeof callback !== "function") { + throw new Error("task callback must be a function"); + } + q.started = true; + if (!_isArray(data)) { + data = [data]; + } + if(data.length === 0) { + // call drain immediately if there are no tasks + return async.setImmediate(function() { + q.drain(); + }); + } + _arrayEach(data, function(task) { + var item = { + data: task, + priority: priority, + callback: typeof callback === 'function' ? callback : noop + }; + + q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); + + if (q.tasks.length === q.concurrency) { + q.saturated(); + } + async.setImmediate(q.process); + }); + } + + // Start with a normal queue + var q = async.queue(worker, concurrency); + + // Override push to accept second parameter representing priority + q.push = function (data, priority, callback) { + _insert(q, data, priority, callback); + }; + + // Remove unshift function + delete q.unshift; + + return q; + }; + + async.cargo = function (worker, payload) { + return _queue(worker, 1, payload); + }; + + function _console_fn(name) { + return _restParam(function (fn, args) { + fn.apply(null, args.concat([_restParam(function (err, args) { + if (typeof console === 'object') { + if (err) { + if (console.error) { + console.error(err); + } + } + else if (console[name]) { + _arrayEach(args, function (x) { + console[name](x); + }); + } + } + })])); + }); + } + async.log = _console_fn('log'); + async.dir = _console_fn('dir'); + /*async.info = _console_fn('info'); + async.warn = _console_fn('warn'); + async.error = _console_fn('error');*/ + + async.memoize = function (fn, hasher) { + var memo = {}; + var queues = {}; + var has = Object.prototype.hasOwnProperty; + hasher = hasher || identity; + var memoized = _restParam(function memoized(args) { + var callback = args.pop(); + var key = hasher.apply(null, args); + if (has.call(memo, key)) { + async.setImmediate(function () { + callback.apply(null, memo[key]); + }); + } + else if (has.call(queues, key)) { + queues[key].push(callback); + } + else { + queues[key] = [callback]; + fn.apply(null, args.concat([_restParam(function (args) { + memo[key] = args; + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i].apply(null, args); + } + })])); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; + }; + + async.unmemoize = function (fn) { + return function () { + return (fn.unmemoized || fn).apply(null, arguments); + }; + }; + + function _times(mapper) { + return function (count, iterator, callback) { + mapper(_range(count), iterator, callback); + }; + } + + async.times = _times(async.map); + async.timesSeries = _times(async.mapSeries); + async.timesLimit = function (count, limit, iterator, callback) { + return async.mapLimit(_range(count), limit, iterator, callback); + }; + + async.seq = function (/* functions... */) { + var fns = arguments; + return _restParam(function (args) { + var that = this; + + var callback = args[args.length - 1]; + if (typeof callback == 'function') { + args.pop(); + } else { + callback = noop; + } + + async.reduce(fns, args, function (newargs, fn, cb) { + fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { + cb(err, nextargs); + })])); + }, + function (err, results) { + callback.apply(that, [err].concat(results)); + }); + }); + }; + + async.compose = function (/* functions... */) { + return async.seq.apply(null, Array.prototype.reverse.call(arguments)); + }; + + + function _applyEach(eachfn) { + return _restParam(function(fns, args) { + var go = _restParam(function(args) { + var that = this; + var callback = args.pop(); + return eachfn(fns, function (fn, _, cb) { + fn.apply(that, args.concat([cb])); + }, + callback); + }); + if (args.length) { + return go.apply(this, args); + } + else { + return go; + } + }); + } + + async.applyEach = _applyEach(async.eachOf); + async.applyEachSeries = _applyEach(async.eachOfSeries); + + + async.forever = function (fn, callback) { + var done = only_once(callback || noop); + var task = ensureAsync(fn); + function next(err) { + if (err) { + return done(err); + } + task(next); + } + next(); + }; + + function ensureAsync(fn) { + return _restParam(function (args) { + var callback = args.pop(); + args.push(function () { + var innerArgs = arguments; + if (sync) { + async.setImmediate(function () { + callback.apply(null, innerArgs); + }); + } else { + callback.apply(null, innerArgs); + } + }); + var sync = true; + fn.apply(this, args); + sync = false; + }); + } + + async.ensureAsync = ensureAsync; + + async.constant = _restParam(function(values) { + var args = [null].concat(values); + return function (callback) { + return callback.apply(this, args); + }; + }); + + async.wrapSync = + async.asyncify = function asyncify(func) { + return _restParam(function (args) { + var callback = args.pop(); + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (_isObject(result) && typeof result.then === "function") { + result.then(function(value) { + callback(null, value); + })["catch"](function(err) { + callback(err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); + }; + + // Node.js + if (typeof module === 'object' && module.exports) { + module.exports = async; + } + // AMD / RequireJS + else if (typeof define === 'function' && define.amd) { + define([], function () { + return async; + }); + } + // included directly via + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/appenders/index.html b/node_modules/log4js/coverage/lcov-report/lib/appenders/index.html new file mode 100644 index 0000000..fd8c9b1 --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/appenders/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for lib/appenders + + + + + + + +
+
+

+ All files lib/appenders +

+
+
+ 44% + Statements + 33/75 +
+
+ 31.43% + Branches + 11/35 +
+
+ 45% + Functions + 9/20 +
+
+ 44% + Lines + 33/75 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
multiprocess.js
39.39%26/6625.81%8/3141.18%7/1739.39%26/66
stdout.js
77.78%7/975%3/466.67%2/377.78%7/9
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/appenders/multiprocess.js.html b/node_modules/log4js/coverage/lcov-report/lib/appenders/multiprocess.js.html new file mode 100644 index 0000000..34929be --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/appenders/multiprocess.js.html @@ -0,0 +1,539 @@ + + + + Code coverage report for lib/appenders/multiprocess.js + + + + + + + +
+
+

+ All files / lib/appenders multiprocess.js +

+
+
+ 39.39% + Statements + 26/66 +
+
+ 25.81% + Branches + 8/31 +
+
+ 41.18% + Functions + 7/17 +
+
+ 39.39% + Lines + 26/66 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159  +  +1x +1x +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +1x +1x +1x +1x +  +1x +  +  +  +1x +1x +1x +1x +1x +1x +  +  +  +  +  +1x +1x +1x + 
'use strict';
+ 
+const log4js = require('../log4js');
+const net = require('net');
+ 
+const END_MSG = '__LOG4JS__';
+const servers = [];
+ 
+/**
+ * Creates a server, listening on config.loggerPort, config.loggerHost.
+ * Output goes to config.actualAppender (config.appender is used to
+ * set up that appender).
+ */
+function logServer(config) {
+  /**
+   * Takes a utf-8 string, returns an object with
+   * the correct log properties.
+   */
+  function deserializeLoggingEvent(clientSocket, msg) {
+    let loggingEvent;
+    try {
+      loggingEvent = JSON.parse(msg);
+      loggingEvent.startTime = new Date(loggingEvent.startTime);
+      loggingEvent.level = log4js.levels.toLevel(loggingEvent.level.levelStr);
+    } catch (e) {
+      // JSON.parse failed, just log the contents probably a naughty.
+      loggingEvent = {
+        startTime: new Date(),
+        categoryName: 'log4js',
+        level: log4js.levels.ERROR,
+        data: ['Unable to parse log:', msg]
+      };
+    }
+ 
+    loggingEvent.remoteAddress = clientSocket.remoteAddress;
+    loggingEvent.remotePort = clientSocket.remotePort;
+ 
+    return loggingEvent;
+  }
+ 
+  const actualAppender = config.actualAppender;
+ 
+  /* eslint prefer-arrow-callback:0 */
+  const server = net.createServer(function serverCreated(clientSocket) {
+    clientSocket.setEncoding('utf8');
+    let logMessage = '';
+ 
+    function logTheMessage(msg) {
+      if (logMessage.length > 0) {
+        actualAppender(deserializeLoggingEvent(clientSocket, msg));
+      }
+    }
+ 
+    function chunkReceived(chunk) {
+      let event;
+      logMessage += chunk || '';
+      if (logMessage.indexOf(END_MSG) > -1) {
+        event = logMessage.substring(0, logMessage.indexOf(END_MSG));
+        logTheMessage(event);
+        logMessage = logMessage.substring(event.length + END_MSG.length) || '';
+        // check for more, maybe it was a big chunk
+        chunkReceived();
+      }
+    }
+ 
+    clientSocket.on('data', chunkReceived);
+    clientSocket.on('end', chunkReceived);
+  });
+ 
+  server.listen(config.loggerPort || 5000, config.loggerHost || 'localhost', function () {
+    servers.push(server);
+    // allow the process to exit, if this is the only socket active
+    server.unref();
+  });
+ 
+  return actualAppender;
+}
+ 
+function workerAppender(config) {
+  let canWrite = false;
+  const buffer = [];
+  let socket;
+ 
+  function write(loggingEvent) {
+    // JSON.stringify(new Error('test')) returns {}, which is not really useful for us.
+    // The following allows us to serialize errors correctly.
+    // Validate that we really are in this case
+    if (loggingEvent && loggingEvent.stack && JSON.stringify(loggingEvent) === '{}') {
+      loggingEvent = { stack: loggingEvent.stack };
+    }
+    socket.write(JSON.stringify(loggingEvent), 'utf8');
+    socket.write(END_MSG, 'utf8');
+  }
+ 
+  function emptyBuffer() {
+    let evt;
+ 
+    /* eslint no-cond-assign:0 */
+    while ((evt = buffer.shift())) {
+      write(evt);
+    }
+  }
+ 
+  function createSocket() {
+    socket = net.createConnection(config.loggerPort || 5000, config.loggerHost || 'localhost');
+    socket.on('connect', () => {
+      emptyBuffer();
+      canWrite = true;
+    });
+    socket.on('timeout', socket.end.bind(socket));
+    // don't bother listening for 'error', 'close' gets called after that anyway
+    socket.on('close', createSocket);
+  }
+ 
+  createSocket();
+ 
+  return function log(loggingEvent) {
+    if (canWrite) {
+      write(loggingEvent);
+    } else {
+      buffer.push(loggingEvent);
+    }
+  };
+}
+ 
+function createAppender(config) {
+  Eif (config.mode === 'master') {
+    return logServer(config);
+  }
+ 
+  return workerAppender(config);
+}
+ 
+function configure(config, options) {
+  let actualAppender;
+  Eif (config.appender && config.mode === 'master') {
+    log4js.loadAppender(config.appender.type);
+    actualAppender = log4js.appenderMakers[config.appender.type](config.appender, options);
+    config.actualAppender = actualAppender;
+  }
+  return createAppender(config);
+}
+ 
+function shutdown(done) {
+  let toBeClosed = servers.length;
+  servers.forEach(function (server) {
+    server.close(function () {
+      toBeClosed -= 1;
+      Eif (toBeClosed < 1) {
+        done();
+      }
+    });
+  });
+}
+ 
+module.exports.appender = createAppender;
+module.exports.configure = configure;
+module.exports.shutdown = shutdown;
+ 
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/appenders/stdout.js.html b/node_modules/log4js/coverage/lcov-report/lib/appenders/stdout.js.html new file mode 100644 index 0000000..162dd29 --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/appenders/stdout.js.html @@ -0,0 +1,128 @@ + + + + Code coverage report for lib/appenders/stdout.js + + + + + + + +
+
+

+ All files / lib/appenders stdout.js +

+
+
+ 77.78% + Statements + 7/9 +
+
+ 75% + Branches + 3/4 +
+
+ 66.67% + Functions + 2/3 +
+
+ 77.78% + Lines + 7/9 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22  +  +2x +  +  +3x +3x +  +  +  +  +  +  +3x +  +  +3x +  +  +2x +2x + 
'use strict';
+ 
+const layouts = require('../layouts');
+ 
+function stdoutAppender(layout, timezoneOffset) {
+  layout = layout || layouts.colouredLayout;
+  return function (loggingEvent) {
+    process.stdout.write(`${layout(loggingEvent, timezoneOffset)}\n`);
+  };
+}
+ 
+function configure(config) {
+  let layout;
+  Iif (config.layout) {
+    layout = layouts.layout(config.layout.type, config.layout);
+  }
+  return stdoutAppender(layout, config.timezoneOffset);
+}
+ 
+exports.appender = stdoutAppender;
+exports.configure = configure;
+ 
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/connect-logger.js.html b/node_modules/log4js/coverage/lcov-report/lib/connect-logger.js.html new file mode 100644 index 0000000..b716e69 --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/connect-logger.js.html @@ -0,0 +1,875 @@ + + + + Code coverage report for lib/connect-logger.js + + + + + + + +
+
+

+ All files / lib connect-logger.js +

+
+
+ 3.33% + Statements + 3/90 +
+
+ 0% + Branches + 0/81 +
+
+ 0% + Functions + 0/13 +
+
+ 3.7% + Lines + 3/81 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271  +  +  +  +2x +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x + 
/* eslint-disable no-plusplus */
+ 
+'use strict';
+ 
+const levels = require('./levels');
+ 
+const DEFAULT_FORMAT = ':remote-addr - -' +
+  ' ":method :url HTTP/:http-version"' +
+  ' :status :content-length ":referrer"' +
+  ' ":user-agent"';
+ 
+/**
+ * Log requests with the given `options` or a `format` string.
+ *
+ * Options:
+ *
+ *   - `format`        Format string, see below for tokens
+ *   - `level`         A log4js levels instance. Supports also 'auto'
+ *   - `nolog`         A string or RegExp to exclude target logs
+ *
+ * Tokens:
+ *
+ *   - `:req[header]` ex: `:req[Accept]`
+ *   - `:res[header]` ex: `:res[Content-Length]`
+ *   - `:http-version`
+ *   - `:response-time`
+ *   - `:remote-addr`
+ *   - `:date`
+ *   - `:method`
+ *   - `:url`
+ *   - `:referrer`
+ *   - `:user-agent`
+ *   - `:status`
+ *
+ * @return {Function}
+ * @param logger4js
+ * @param options
+ * @api public
+ */
+function getLogger(logger4js, options) {
+  /* eslint no-underscore-dangle:0 */
+  if (typeof options === 'object') {
+    options = options || {};
+  } else if (options) {
+    options = { format: options };
+  } else {
+    options = {};
+  }
+ 
+  const thisLogger = logger4js;
+  let level = levels.toLevel(options.level, levels.INFO);
+  const fmt = options.format || DEFAULT_FORMAT;
+  const nolog = options.nolog ? createNoLogCondition(options.nolog) : null;
+ 
+  return (req, res, next) => {
+    // mount safety
+    if (req._logging) return next();
+ 
+    // nologs
+    if (nolog && nolog.test(req.originalUrl)) return next();
+ 
+    if (thisLogger.isLevelEnabled(level) || options.level === 'auto') {
+      const start = new Date();
+      const writeHead = res.writeHead;
+ 
+      // flag as logging
+      req._logging = true;
+ 
+      // proxy for statusCode.
+      res.writeHead = (code, headers) => {
+        res.writeHead = writeHead;
+        res.writeHead(code, headers);
+ 
+        res.__statusCode = code;
+        res.__headers = headers || {};
+ 
+        // status code response level handling
+        if (options.level === 'auto') {
+          level = levels.INFO;
+          if (code >= 300) level = levels.WARN;
+          if (code >= 400) level = levels.ERROR;
+        } else {
+          level = levels.toLevel(options.level, levels.INFO);
+        }
+      };
+ 
+      // hook on end request to emit the log entry of the HTTP request.
+      res.on('finish', () => {
+        res.responseTime = new Date() - start;
+        // status code response level handling
+        if (res.statusCode && options.level === 'auto') {
+          level = levels.INFO;
+          if (res.statusCode >= 300) level = levels.WARN;
+          if (res.statusCode >= 400) level = levels.ERROR;
+        }
+ 
+        if (thisLogger.isLevelEnabled(level)) {
+          const combinedTokens = assembleTokens(req, res, options.tokens || []);
+ 
+          if (typeof fmt === 'function') {
+            const line = fmt(req, res, str => format(str, combinedTokens));
+            if (line) thisLogger.log(level, line);
+          } else {
+            thisLogger.log(level, format(fmt, combinedTokens));
+          }
+        }
+      });
+    }
+ 
+    // ensure next gets always called
+    return next();
+  };
+}
+ 
+/**
+ * Adds custom {token, replacement} objects to defaults,
+ * overwriting the defaults if any tokens clash
+ *
+ * @param  {IncomingMessage} req
+ * @param  {ServerResponse} res
+ * @param  {Array} customTokens
+ *    [{ token: string-or-regexp, replacement: string-or-replace-function }]
+ * @return {Array}
+ */
+function assembleTokens(req, res, customTokens) {
+  const arrayUniqueTokens = (array) => {
+    const a = array.concat();
+    for (let i = 0; i < a.length; ++i) {
+      for (let j = i + 1; j < a.length; ++j) {
+        // not === because token can be regexp object
+        /* eslint eqeqeq:0 */
+        if (a[i].token == a[j].token) {
+          a.splice(j--, 1);
+        }
+      }
+    }
+    return a;
+  };
+ 
+  const defaultTokens = [];
+  defaultTokens.push({ token: ':url', replacement: getUrl(req) });
+  defaultTokens.push({ token: ':protocol', replacement: req.protocol });
+  defaultTokens.push({ token: ':hostname', replacement: req.hostname });
+  defaultTokens.push({ token: ':method', replacement: req.method });
+  defaultTokens.push({ token: ':status', replacement: res.__statusCode || res.statusCode });
+  defaultTokens.push({ token: ':response-time', replacement: res.responseTime });
+  defaultTokens.push({ token: ':date', replacement: new Date().toUTCString() });
+  defaultTokens.push({
+    token: ':referrer',
+    replacement: req.headers.referer || req.headers.referrer || ''
+  });
+  defaultTokens.push({
+    token: ':http-version',
+    replacement: `${req.httpVersionMajor}.${req.httpVersionMinor}`
+  });
+  defaultTokens.push({
+    token: ':remote-addr',
+    replacement: req.headers['x-forwarded-for'] ||
+    req.ip ||
+    req._remoteAddress ||
+    (req.socket &&
+      (req.socket.remoteAddress ||
+        (req.socket.socket && req.socket.socket.remoteAddress)
+      )
+    )
+  });
+  defaultTokens.push({ token: ':user-agent', replacement: req.headers['user-agent'] });
+  defaultTokens.push({
+    token: ':content-length',
+    replacement: (res._headers && res._headers['content-length']) ||
+    (res.__headers && res.__headers['Content-Length']) ||
+    '-'
+  });
+  defaultTokens.push({
+    token: /:req\[([^\]]+)]/g,
+    replacement: function (_, field) {
+      return req.headers[field.toLowerCase()];
+    }
+  });
+  defaultTokens.push({
+    token: /:res\[([^\]]+)]/g,
+    replacement: function (_, field) {
+      return res._headers ?
+             (res._headers[field.toLowerCase()] || res.__headers[field])
+        : (res.__headers && res.__headers[field]);
+    }
+  });
+ 
+  return arrayUniqueTokens(customTokens.concat(defaultTokens));
+}
+ 
+/**
+ * Return request url path,
+ * adding this function prevents the Cyclomatic Complexity,
+ * for the assemble_tokens function at low, to pass the tests.
+ *
+ * @param  {IncomingMessage} req
+ * @return {String}
+ * @api private
+ */
+ 
+function getUrl(req) {
+  return req.originalUrl || req.url;
+}
+ 
+/**
+ * Return formatted log line.
+ *
+ * @param  {String} str
+ * @param {Array} tokens
+ * @return {String}
+ * @api private
+ */
+function format(str, tokens) {
+  for (let i = 0; i < tokens.length; i++) {
+    str = str.replace(tokens[i].token, tokens[i].replacement);
+  }
+  return str;
+}
+ 
+/**
+ * Return RegExp Object about nolog
+ *
+ * @param  {String|Array} nolog
+ * @return {RegExp}
+ * @api private
+ *
+ * syntax
+ *  1. String
+ *   1.1 "\\.gif"
+ *         NOT LOGGING http://example.com/hoge.gif and http://example.com/hoge.gif?fuga
+ *         LOGGING http://example.com/hoge.agif
+ *   1.2 in "\\.gif|\\.jpg$"
+ *         NOT LOGGING http://example.com/hoge.gif and
+ *           http://example.com/hoge.gif?fuga and http://example.com/hoge.jpg?fuga
+ *         LOGGING http://example.com/hoge.agif,
+ *           http://example.com/hoge.ajpg and http://example.com/hoge.jpg?hoge
+ *   1.3 in "\\.(gif|jpe?g|png)$"
+ *         NOT LOGGING http://example.com/hoge.gif and http://example.com/hoge.jpeg
+ *         LOGGING http://example.com/hoge.gif?uid=2 and http://example.com/hoge.jpg?pid=3
+ *  2. RegExp
+ *   2.1 in /\.(gif|jpe?g|png)$/
+ *         SAME AS 1.3
+ *  3. Array
+ *   3.1 ["\\.jpg$", "\\.png", "\\.gif"]
+ *         SAME AS "\\.jpg|\\.png|\\.gif"
+ */
+function createNoLogCondition(nolog) {
+  let regexp = null;
+ 
+  if (nolog) {
+    if (nolog instanceof RegExp) {
+      regexp = nolog;
+    }
+ 
+    if (typeof nolog === 'string') {
+      regexp = new RegExp(nolog);
+    }
+ 
+    if (Array.isArray(nolog)) {
+      // convert to strings
+      const regexpsAsStrings = nolog.map(reg => (reg.source ? reg.source : reg));
+      regexp = new RegExp(regexpsAsStrings.join('|'));
+    }
+  }
+ 
+  return regexp;
+}
+ 
+module.exports.connectLogger = getLogger;
+ 
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/date_format.js.html b/node_modules/log4js/coverage/lcov-report/lib/date_format.js.html new file mode 100644 index 0000000..248b275 --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/date_format.js.html @@ -0,0 +1,281 @@ + + + + Code coverage report for lib/date_format.js + + + + + + + +
+
+

+ All files / lib date_format.js +

+
+
+ 13.16% + Statements + 5/38 +
+
+ 0% + Branches + 0/12 +
+
+ 0% + Functions + 0/4 +
+
+ 13.16% + Lines + 5/38 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73  +  +4x +4x +4x +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
'use strict';
+ 
+module.exports.ISO8601_FORMAT = 'yyyy-MM-dd hh:mm:ss.SSS';
+module.exports.ISO8601_WITH_TZ_OFFSET_FORMAT = 'yyyy-MM-ddThh:mm:ss.SSSO';
+module.exports.DATETIME_FORMAT = 'dd MM yyyy hh:mm:ss.SSS';
+module.exports.ABSOLUTETIME_FORMAT = 'hh:mm:ss.SSS';
+ 
+function padWithZeros(vNumber, width) {
+  let numAsString = vNumber.toString();
+  while (numAsString.length < width) {
+    numAsString = `0${numAsString}`;
+  }
+  return numAsString;
+}
+ 
+function addZero(vNumber) {
+  return padWithZeros(vNumber, 2);
+}
+ 
+/**
+ * Formats the TimeOffset
+ * Thanks to http://www.svendtofte.com/code/date_format/
+ * @private
+ */
+function offset(timezoneOffset) {
+  // Difference to Greenwich time (GMT) in hours
+  const os = Math.abs(timezoneOffset);
+  let h = String(Math.floor(os / 60));
+  let m = String(os % 60);
+  if (h.length === 1) {
+    h = `0${h}`;
+  }
+  if (m.length === 1) {
+    m = `0${m}`;
+  }
+  return timezoneOffset < 0 ? `+${h}${m}` : `-${h}${m}`;
+}
+ 
+module.exports.asString = function (format, date, timezoneOffset) {
+  if (typeof format !== 'string') {
+    timezoneOffset = date;
+    date = format;
+    format = module.exports.ISO8601_FORMAT;
+  }
+  // make the date independent of the system timezone by working with UTC
+  if (timezoneOffset === undefined) {
+    timezoneOffset = date.getTimezoneOffset();
+  }
+ 
+  date.setUTCMinutes(date.getUTCMinutes() - timezoneOffset);
+  const vDay = addZero(date.getUTCDate());
+  const vMonth = addZero(date.getUTCMonth() + 1);
+  const vYearLong = addZero(date.getUTCFullYear());
+  const vYearShort = addZero(date.getUTCFullYear().toString().substring(2, 4));
+  const vYear = (format.indexOf('yyyy') > -1 ? vYearLong : vYearShort);
+  const vHour = addZero(date.getUTCHours());
+  const vMinute = addZero(date.getUTCMinutes());
+  const vSecond = addZero(date.getUTCSeconds());
+  const vMillisecond = padWithZeros(date.getUTCMilliseconds(), 3);
+  const vTimeZone = offset(timezoneOffset);
+  date.setUTCMinutes(date.getUTCMinutes() + timezoneOffset);
+  const formatted = format
+    .replace(/dd/g, vDay)
+    .replace(/MM/g, vMonth)
+    .replace(/y{1,4}/g, vYear)
+    .replace(/hh/g, vHour)
+    .replace(/mm/g, vMinute)
+    .replace(/ss/g, vSecond)
+    .replace(/SSS/g, vMillisecond)
+    .replace(/O/g, vTimeZone);
+  return formatted;
+};
+ 
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/index.html b/node_modules/log4js/coverage/lcov-report/lib/index.html new file mode 100644 index 0000000..e7eb76d --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/index.html @@ -0,0 +1,158 @@ + + + + Code coverage report for lib + + + + + + + +
+
+

+ All files lib +

+
+
+ 35.4% + Statements + 177/500 +
+
+ 22.43% + Branches + 61/272 +
+
+ 32.77% + Functions + 39/119 +
+
+ 36.2% + Lines + 177/489 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
connect-logger.js
3.33%3/900%0/810%0/133.7%3/81
date_format.js
13.16%5/380%0/120%0/413.16%5/38
layouts.js
14.55%16/1106.9%4/5810.26%4/3914.55%16/110
levels.js
40%10/2531.25%5/1657.14%4/740%10/25
log4js.js
55.96%108/19352.69%49/9353.49%23/4356.25%108/192
logger.js
79.55%35/4425%3/1261.54%8/1381.4%35/43
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/layouts.js.html b/node_modules/log4js/coverage/lcov-report/lib/layouts.js.html new file mode 100644 index 0000000..6648359 --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/layouts.js.html @@ -0,0 +1,1193 @@ + + + + Code coverage report for lib/layouts.js + + + + + + + +
+
+

+ All files / lib layouts.js +

+
+
+ 14.55% + Statements + 16/110 +
+
+ 6.9% + Branches + 4/58 +
+
+ 10.26% + Functions + 4/39 +
+
+ 14.55% + Lines + 16/110 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377  +  +4x +4x +4x +  +4x +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +4x +  +  +8x +14x +  +  +  +  +  +  +14x +  +  +  +  +  +  +8x +8x +  +  +  +  +  +  +8x +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +8x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  + 
'use strict';
+ 
+const dateFormat = require('./date_format');
+const os = require('os');
+const util = require('util');
+ 
+const eol = os.EOL || '\n';
+const layoutMakers = {
+  messagePassThrough: function () {
+    return messagePassThroughLayout;
+  },
+  basic: function () {
+    return basicLayout;
+  },
+  colored: function () {
+    return colouredLayout;
+  },
+  coloured: function () {
+    return colouredLayout;
+  },
+  pattern: function (config) {
+    return patternLayout(config && config.pattern, config && config.tokens);
+  },
+  dummy: function () {
+    return dummyLayout;
+  }
+};
+const colours = {
+  ALL: 'grey',
+  TRACE: 'blue',
+  DEBUG: 'cyan',
+  INFO: 'green',
+  WARN: 'yellow',
+  ERROR: 'red',
+  FATAL: 'magenta',
+  OFF: 'grey'
+};
+const semver = require('semver');
+ 
+function wrapErrorsWithInspect(items) {
+  return items.map((item) => {
+    Iif ((item instanceof Error) && item.stack) {
+      return {
+        inspect: function () {
+          return semver.satisfies(process.version, '>=6') ? util.format(item) : `${util.format(item)}\n${item.stack}`;
+        }
+      };
+    }
+    return item;
+  });
+}
+ 
+/* eslint prefer-rest-params:0 */
+// todo: once node v4 support dropped, use rest parameter instead
+function formatLogData(logData) {
+  let data = logData;
+  Iif (!Array.isArray(data)) {
+    const numArgs = arguments.length;
+    data = new Array(numArgs);
+    for (let i = 0; i < numArgs; i++) { // eslint-disable-line no-plusplus
+      data[i] = arguments[i];
+    }
+  }
+  return util.format.apply(util, wrapErrorsWithInspect(data));
+}
+ 
+const styles = {
+  // styles
+  bold: [1, 22],
+  italic: [3, 23],
+  underline: [4, 24],
+  inverse: [7, 27],
+  // grayscale
+  white: [37, 39],
+  grey: [90, 39],
+  black: [90, 39],
+  // colors
+  blue: [34, 39],
+  cyan: [36, 39],
+  green: [32, 39],
+  magenta: [35, 39],
+  red: [31, 39],
+  yellow: [33, 39]
+};
+ 
+function colorizeStart(style) {
+  return style ? `\x1B[${styles[style][0]}m` : '';
+}
+ 
+function colorizeEnd(style) {
+  return style ? `\x1B[${styles[style][1]}m` : '';
+}
+ 
+/**
+ * Taken from masylum's fork (https://github.com/masylum/log4js-node)
+ */
+function colorize(str, style) {
+  return colorizeStart(style) + str + colorizeEnd(style);
+}
+ 
+function timestampLevelAndCategory(loggingEvent, colour, timezoneOffset) {
+  return colorize(
+    formatLogData(
+      '[%s] [%s] %s - '
+      , dateFormat.asString(loggingEvent.startTime, timezoneOffset)
+      , loggingEvent.level
+      , loggingEvent.categoryName
+    )
+    , colour
+  );
+}
+ 
+/**
+ * BasicLayout is a simple layout for storing the logs. The logs are stored
+ * in following format:
+ * <pre>
+ * [startTime] [logLevel] categoryName - message\n
+ * </pre>
+ *
+ * @author Stephan Strittmatter
+ */
+function basicLayout(loggingEvent, timezoneOffset) {
+  return timestampLevelAndCategory(
+      loggingEvent,
+      undefined,
+      timezoneOffset
+    ) + formatLogData(loggingEvent.data);
+}
+ 
+/**
+ * colouredLayout - taken from masylum's fork.
+ * same as basicLayout, but with colours.
+ */
+function colouredLayout(loggingEvent, timezoneOffset) {
+  return timestampLevelAndCategory(
+      loggingEvent,
+      colours[loggingEvent.level.toString()],
+      timezoneOffset
+    ) + formatLogData(loggingEvent.data);
+}
+ 
+function messagePassThroughLayout(loggingEvent) {
+  return formatLogData(loggingEvent.data);
+}
+ 
+function dummyLayout(loggingEvent) {
+  return loggingEvent.data[0];
+}
+ 
+/**
+ * PatternLayout
+ * Format for specifiers is %[padding].[truncation][field]{[format]}
+ * e.g. %5.10p - left pad the log level by 5 characters, up to a max of 10
+ * Fields can be any of:
+ *  - %r time in toLocaleTimeString format
+ *  - %p log level
+ *  - %c log category
+ *  - %h hostname
+ *  - %m log data
+ *  - %d date in constious formats
+ *  - %% %
+ *  - %n newline
+ *  - %z pid
+ *  - %x{<tokenname>} add dynamic tokens to your log. Tokens are specified in the tokens parameter
+ * You can use %[ and %] to define a colored block.
+ *
+ * Tokens are specified as simple key:value objects.
+ * The key represents the token name whereas the value can be a string or function
+ * which is called to extract the value to put in the log message. If token is not
+ * found, it doesn't replace the field.
+ *
+ * A sample token would be: { 'pid' : function() { return process.pid; } }
+ *
+ * Takes a pattern string, array of tokens and returns a layout function.
+ * @return {Function}
+ * @param pattern
+ * @param tokens
+ * @param timezoneOffset
+ *
+ * @authors ['Stephan Strittmatter', 'Jan Schmidle']
+ */
+function patternLayout(pattern, tokens, timezoneOffset) {
+  const TTCC_CONVERSION_PATTERN = '%r %p %c - %m%n';
+  const regex = /%(-?[0-9]+)?(\.?[0-9]+)?([[\]cdhmnprzxy%])(\{([^}]+)\})?|([^%]+)/;
+ 
+  pattern = pattern || TTCC_CONVERSION_PATTERN;
+ 
+  function categoryName(loggingEvent, specifier) {
+    let loggerName = loggingEvent.categoryName;
+    if (specifier) {
+      const precision = parseInt(specifier, 10);
+      const loggerNameBits = loggerName.split('.');
+      if (precision < loggerNameBits.length) {
+        loggerName = loggerNameBits.slice(loggerNameBits.length - precision).join('.');
+      }
+    }
+    return loggerName;
+  }
+ 
+  function formatAsDate(loggingEvent, specifier) {
+    let format = dateFormat.ISO8601_FORMAT;
+    if (specifier) {
+      format = specifier;
+      // Pick up special cases
+      if (format === 'ISO8601') {
+        format = dateFormat.ISO8601_FORMAT;
+      } else if (format === 'ISO8601_WITH_TZ_OFFSET') {
+        format = dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT;
+      } else if (format === 'ABSOLUTE') {
+        format = dateFormat.ABSOLUTETIME_FORMAT;
+      } else if (format === 'DATE') {
+        format = dateFormat.DATETIME_FORMAT;
+      }
+    }
+    // Format the date
+    return dateFormat.asString(format, loggingEvent.startTime, timezoneOffset);
+  }
+ 
+  function hostname() {
+    return os.hostname().toString();
+  }
+ 
+  function formatMessage(loggingEvent) {
+    return formatLogData(loggingEvent.data);
+  }
+ 
+  function endOfLine() {
+    return eol;
+  }
+ 
+  function logLevel(loggingEvent) {
+    return loggingEvent.level.toString();
+  }
+ 
+  function startTime(loggingEvent) {
+    return dateFormat.asString('hh:mm:ss', loggingEvent.startTime, timezoneOffset);
+  }
+ 
+  function startColour(loggingEvent) {
+    return colorizeStart(colours[loggingEvent.level.toString()]);
+  }
+ 
+  function endColour(loggingEvent) {
+    return colorizeEnd(colours[loggingEvent.level.toString()]);
+  }
+ 
+  function percent() {
+    return '%';
+  }
+ 
+  function pid(loggingEvent) {
+    return loggingEvent && loggingEvent.pid ? loggingEvent.pid : process.pid;
+  }
+ 
+  function clusterInfo(loggingEvent, specifier) {
+    if (loggingEvent.cluster && specifier) {
+      return specifier
+        .replace('%m', loggingEvent.cluster.master)
+        .replace('%w', loggingEvent.cluster.worker)
+        .replace('%i', loggingEvent.cluster.workerId);
+    } else if (loggingEvent.cluster) {
+      return `${loggingEvent.cluster.worker}@${loggingEvent.cluster.master}`;
+    }
+ 
+    return pid();
+  }
+ 
+  function userDefined(loggingEvent, specifier) {
+    if (typeof tokens[specifier] !== 'undefined') {
+      return typeof tokens[specifier] === 'function' ? tokens[specifier](loggingEvent) : tokens[specifier];
+    }
+ 
+    return null;
+  }
+ 
+  /* eslint quote-props:0 */
+  const replacers = {
+    'c': categoryName,
+    'd': formatAsDate,
+    'h': hostname,
+    'm': formatMessage,
+    'n': endOfLine,
+    'p': logLevel,
+    'r': startTime,
+    '[': startColour,
+    ']': endColour,
+    'y': clusterInfo,
+    'z': pid,
+    '%': percent,
+    'x': userDefined
+  };
+ 
+  function replaceToken(conversionCharacter, loggingEvent, specifier) {
+    return replacers[conversionCharacter](loggingEvent, specifier);
+  }
+ 
+  function truncate(truncation, toTruncate) {
+    let len;
+    if (truncation) {
+      len = parseInt(truncation.substr(1), 10);
+      return toTruncate.substring(0, len);
+    }
+ 
+    return toTruncate;
+  }
+ 
+  function pad(padding, toPad) {
+    let len;
+    if (padding) {
+      if (padding.charAt(0) === '-') {
+        len = parseInt(padding.substr(1), 10);
+        // Right pad with spaces
+        while (toPad.length < len) {
+          toPad += ' ';
+        }
+      } else {
+        len = parseInt(padding, 10);
+        // Left pad with spaces
+        while (toPad.length < len) {
+          toPad = ` ${toPad}`;
+        }
+      }
+    }
+    return toPad;
+  }
+ 
+  function truncateAndPad(toTruncAndPad, truncation, padding) {
+    let replacement = toTruncAndPad;
+    replacement = truncate(truncation, replacement);
+    replacement = pad(padding, replacement);
+    return replacement;
+  }
+ 
+  return function (loggingEvent) {
+    let formattedString = '';
+    let result;
+    let searchString = pattern;
+ 
+    /* eslint no-cond-assign:0 */
+    while ((result = regex.exec(searchString)) !== null) {
+      // const matchedString = result[0];
+      const padding = result[1];
+      const truncation = result[2];
+      const conversionCharacter = result[3];
+      const specifier = result[5];
+      const text = result[6];
+ 
+      // Check if the pattern matched was just normal text
+      if (text) {
+        formattedString += text.toString();
+      } else {
+        // Create a raw replacement string based on the conversion
+        // character and specifier
+        const replacement = replaceToken(conversionCharacter, loggingEvent, specifier);
+        formattedString += truncateAndPad(replacement, truncation, padding);
+      }
+      searchString = searchString.substr(result.index + result[0].length);
+    }
+    return formattedString;
+  };
+}
+ 
+module.exports = {
+  basicLayout: basicLayout,
+  messagePassThroughLayout: messagePassThroughLayout,
+  patternLayout: patternLayout,
+  colouredLayout: colouredLayout,
+  coloredLayout: colouredLayout,
+  dummyLayout: dummyLayout,
+  addLayout: function (name, serializerGenerator) {
+    layoutMakers[name] = serializerGenerator;
+  },
+  layout: function (name, config) {
+    return layoutMakers[name] && layoutMakers[name](config);
+  }
+};
+ 
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/levels.js.html b/node_modules/log4js/coverage/lcov-report/lib/levels.js.html new file mode 100644 index 0000000..8be5f3e --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/levels.js.html @@ -0,0 +1,320 @@ + + + + Code coverage report for lib/levels.js + + + + + + + +
+
+

+ All files / lib levels.js +

+
+
+ 40% + Statements + 10/25 +
+
+ 31.25% + Branches + 5/16 +
+
+ 57.14% + Functions + 4/7 +
+
+ 40% + Lines + 10/25 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86  +  +  +  +  +  +  +  +18x +18x +  +  +  +14x +  +  +  +3x +  +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +17x +  +  +  +17x +  +  +  +  +17x +17x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  + 
'use strict';
+ 
+/**
+ * @name Level
+ * @namespace Log4js
+ */
+class Level {
+  constructor(level, levelStr) {
+    this.level = level;
+    this.levelStr = levelStr;
+  }
+ 
+  toString() {
+    return this.levelStr;
+  }
+ 
+  isLessThanOrEqualTo(otherLevel) {
+    Iif (typeof otherLevel === 'string') {
+      otherLevel = toLevel(otherLevel);
+    }
+    return this.level <= otherLevel.level;
+  }
+ 
+  isGreaterThanOrEqualTo(otherLevel) {
+    if (typeof otherLevel === 'string') {
+      otherLevel = toLevel(otherLevel);
+    }
+    return this.level >= otherLevel.level;
+  }
+ 
+  isEqualTo(otherLevel) {
+    if (typeof otherLevel === 'string') {
+      otherLevel = toLevel(otherLevel);
+    }
+    return this.level === otherLevel.level;
+  }
+ 
+}
+ 
+/**
+ * converts given String to corresponding Level
+ * @param {Level|String} sArg -- String value of Level OR Log4js.Level
+ * @param {Level} [defaultLevel] -- default Level, if no String representation
+ * @return {Level}
+ */
+function toLevel(sArg, defaultLevel) {
+  Iif (!sArg) {
+    return defaultLevel;
+  }
+ 
+  Iif (sArg instanceof Level) {
+    module.exports[sArg.toString()] = sArg;
+    return sArg;
+  }
+ 
+  Eif (typeof sArg === 'string') {
+    return module.exports[sArg.toUpperCase()] || defaultLevel;
+  }
+ 
+  return toLevel(sArg.toString());
+}
+ 
+function getLevel(levelStr) {
+  let level;
+  if (typeof levelStr === 'string') {
+    const levelUpper = levelStr.toUpperCase();
+    level = toLevel(levelUpper);
+  }
+  return level;
+}
+ 
+module.exports = {
+  ALL: new Level(Number.MIN_VALUE, 'ALL'),
+  TRACE: new Level(5000, 'TRACE'),
+  DEBUG: new Level(10000, 'DEBUG'),
+  INFO: new Level(20000, 'INFO'),
+  WARN: new Level(30000, 'WARN'),
+  ERROR: new Level(40000, 'ERROR'),
+  FATAL: new Level(50000, 'FATAL'),
+  MARK: new Level(9007199254740992, 'MARK'), // 2^53
+  OFF: new Level(Number.MAX_VALUE, 'OFF'),
+  toLevel: toLevel,
+  Level: Level,
+  getLevel: getLevel
+};
+ 
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/log4js.js.html b/node_modules/log4js/coverage/lcov-report/lib/log4js.js.html new file mode 100644 index 0000000..d220517 --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/log4js.js.html @@ -0,0 +1,1685 @@ + + + + Code coverage report for lib/log4js.js + + + + + + + +
+
+

+ All files / lib log4js.js +

+
+
+ 55.96% + Statements + 108/193 +
+
+ 52.69% + Branches + 49/93 +
+
+ 53.49% + Functions + 23/43 +
+
+ 56.25% + Lines + 108/192 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +2x +2x +2x +2x +  +2x +  +2x +2x +2x +2x +2x +  +  +  +  +  +  +2x +  +  +3x +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +  +3x +3x +3x +  +  +  +  +  +  +  +  +  +  +3x +  +  +  +3x +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +1x +1x +1x +1x +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  +3x +  +  +  +  +  +  +  +  +6x +6x +  +6x +3x +  +  +6x +3x +  +  +6x +  +  +  +6x +6x +  +6x +3x +  +3x +2x +2x +  +  +  +  +  +  +  +3x +  +  +  +  +  +  +  +6x +4x +  +6x +  +  +  +  +  +4x +4x +4x +  +  +  +  +  +  +  +3x +3x +3x +3x +  +3x +3x +3x +3x +  +  +  +  +  +  +  +  +3x +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +2x +  +  +2x +  +  +  +3x +3x +3x +3x +3x +  +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +3x +3x +  +3x +2x +  +  +2x +  +1x +  +  +  +  +  +3x +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +15x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +4x +  +  +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +  +4x +  +  +  +4x +4x +1x +  +4x +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +2x +  +  +  +  +2x +  +2x +  +  +2x +2x +2x +2x +  +  +  +2x +2x +2x +  +  +  +2x +  +  +  +2x +2x +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +2x + 
/* eslint no-prototype-builtins:1,no-restricted-syntax:[1, "ForInStatement"],no-plusplus:0 */
+ 
+'use strict';
+ 
+/**
+ * @fileoverview log4js is a library to log in JavaScript in similar manner
+ * than in log4j for Java. The API should be nearly the same.
+ *
+ * <h3>Example:</h3>
+ * <pre>
+ *  let logging = require('log4js');
+ *  //add an appender that logs all messages to stdout.
+ *  logging.addAppender(logging.consoleAppender());
+ *  //add an appender that logs 'some-category' to a file
+ *  logging.addAppender(logging.fileAppender('file.log'), 'some-category');
+ *  //get a logger
+ *  let log = logging.getLogger('some-category');
+ *  log.setLevel(logging.levels.TRACE); //set the Level
+ *
+ *  ...
+ *
+ *  //call the log
+ *  log.trace('trace me' );
+ * </pre>
+ *
+ * NOTE: the authors below are the original browser-based log4js authors
+ * don't try to contact them about bugs in this version :)
+ * @version 1.0
+ * @author Stephan Strittmatter - http://jroller.com/page/stritti
+ * @author Seth Chisamore - http://www.chisamore.com
+ * @since 2005-05-20
+ * @static
+ * Website: http://log4js.berlios.de
+ */
+const fs = require('fs');
+const util = require('util');
+const layouts = require('./layouts');
+const levels = require('./levels');
+const loggerModule = require('./logger');
+const connectLogger = require('./connect-logger').connectLogger;
+ 
+const Logger = loggerModule.Logger;
+ 
+const ALL_CATEGORIES = '[all]';
+const loggers = {};
+const appenderMakers = {};
+const appenderShutdowns = {};
+const defaultConfig = {
+  appenders: [
+    { type: 'stdout' }
+  ],
+  replaceConsole: false
+};
+ 
+let appenders = {};
+ 
+function hasLogger(logger) {
+  return loggers.hasOwnProperty(logger);
+}
+ 
+// todo: this method should be moved back to levels.js, but for loop require, need some refactor
+levels.forName = function (levelStr, levelVal) {
+  let level;
+  if (typeof levelStr === 'string' && typeof levelVal === 'number') {
+    const levelUpper = levelStr.toUpperCase();
+    level = new levels.Level(levelVal, levelUpper);
+    loggerModule.addLevelMethods(level);
+  }
+  return level;
+};
+ 
+function getBufferedLogger(categoryName) {
+  const baseLogger = getLogger(categoryName);
+  const logger = {};
+  logger.temp = [];
+  logger.target = baseLogger;
+  logger.flush = function () {
+    for (let i = 0; i < logger.temp.length; i++) {
+      const log = logger.temp[i];
+      logger.target[log.level](log.message);
+      delete logger.temp[i];
+    }
+  };
+  logger.trace = function (message) {
+    logger.temp.push({ level: 'trace', message: message });
+  };
+  logger.debug = function (message) {
+    logger.temp.push({ level: 'debug', message: message });
+  };
+  logger.info = function (message) {
+    logger.temp.push({ level: 'info', message: message });
+  };
+  logger.warn = function (message) {
+    logger.temp.push({ level: 'warn', message: message });
+  };
+  logger.error = function (message) {
+    logger.temp.push({ level: 'error', message: message });
+  };
+  logger.fatal = function (message) {
+    logger.temp.push({ level: 'fatal', message: message });
+  };
+ 
+  return logger;
+}
+ 
+function normalizeCategory(category) {
+  return `${category}.`;
+}
+ 
+function doesLevelEntryContainsLogger(levelCategory, loggerCategory) {
+  const normalizedLevelCategory = normalizeCategory(levelCategory);
+  const normalizedLoggerCategory = normalizeCategory(loggerCategory);
+  return normalizedLoggerCategory.substring(0, normalizedLevelCategory.length) === normalizedLevelCategory;
+}
+ 
+function doesAppenderContainsLogger(appenderCategory, loggerCategory) {
+  const normalizedAppenderCategory = normalizeCategory(appenderCategory);
+  const normalizedLoggerCategory = normalizeCategory(loggerCategory);
+  return normalizedLoggerCategory.substring(0, normalizedAppenderCategory.length) === normalizedAppenderCategory;
+}
+ 
+/**
+ * Get a logger instance. Instance is cached on categoryName level.
+ * @static
+ * @param loggerCategoryName
+ * @return {Logger} instance of logger for the category
+ */
+function getLogger(loggerCategoryName) {
+  // Use default logger if categoryName is not specified or invalid
+  Iif (typeof loggerCategoryName !== 'string') {
+    loggerCategoryName = Logger.DEFAULT_CATEGORY;
+  }
+ 
+  if (!hasLogger(loggerCategoryName)) {
+    let level;
+ 
+    /* jshint -W073 */
+    // If there's a 'levels' entry in the configuration
+    Iif (levels.config) {
+      // Goes through the categories in the levels configuration entry,
+      // starting with the 'higher' ones.
+      const keys = Object.keys(levels.config).sort();
+      for (let idx = 0; idx < keys.length; idx++) {
+        const levelCategory = keys[idx];
+        if (doesLevelEntryContainsLogger(levelCategory, loggerCategoryName)) {
+          // level for the logger
+          level = levels.config[levelCategory];
+        }
+      }
+    }
+    /* jshint +W073 */
+ 
+    // Create the logger for this name if it doesn't already exist
+    loggers[loggerCategoryName] = new Logger(loggerCategoryName, level);
+ 
+    /* jshint -W083 */
+    let appenderList;
+    for (const appenderCategory in appenders) {
+      Eif (doesAppenderContainsLogger(appenderCategory, loggerCategoryName)) {
+        appenderList = appenders[appenderCategory];
+        appenderList.forEach((appender) => {
+          loggers[loggerCategoryName].addListener('log', appender);
+        });
+      }
+    }
+    /* jshint +W083 */
+ 
+    Iif (appenders[ALL_CATEGORIES]) {
+      appenderList = appenders[ALL_CATEGORIES];
+      appenderList.forEach((appender) => {
+        loggers[loggerCategoryName].addListener('log', appender);
+      });
+    }
+  }
+ 
+  return loggers[loggerCategoryName];
+}
+ 
+/**
+ * args are appender, optional shutdown function, then zero or more categories
+ */
+function addAppender() {
+  /* eslint prefer-rest-params:0 */
+  // todo: once node v4 support dropped, use rest parameter instead
+  let args = Array.from(arguments);
+  const appender = args.shift();
+  // check for a shutdown fn
+  if (args.length > 0 && typeof args[0] === 'function') {
+    appenderShutdowns[appender] = args.shift();
+  }
+ 
+  if (args.length === 0 || args[0] === undefined) {
+    args = [ALL_CATEGORIES];
+  }
+  // argument may already be an array
+  Iif (Array.isArray(args[0])) {
+    args = args[0];
+  }
+ 
+  args.forEach((appenderCategory) => {
+    addAppenderToCategory(appender, appenderCategory);
+ 
+    if (appenderCategory === ALL_CATEGORIES) {
+      addAppenderToAllLoggers(appender);
+    } else {
+      for (const loggerCategory in loggers) {
+        Eif (doesAppenderContainsLogger(appenderCategory, loggerCategory)) {
+          loggers[loggerCategory].addListener('log', appender);
+        }
+      }
+    }
+  });
+}
+ 
+function addAppenderToAllLoggers(appender) {
+  for (const logger in loggers) {
+    if (hasLogger(logger)) {
+      loggers[logger].addListener('log', appender);
+    }
+  }
+}
+ 
+function addAppenderToCategory(appender, category) {
+  if (!appenders[category]) {
+    appenders[category] = [];
+  }
+  appenders[category].push(appender);
+}
+ 
+function clearAppenders() {
+  // if we're calling clearAppenders, we're probably getting ready to write
+  // so turn log writes back on, just in case this is after a shutdown
+  loggerModule.enableAllLogWrites();
+  appenders = {};
+  for (const logger in loggers) {
+    if (hasLogger(logger)) {
+      loggers[logger].removeAllListeners('log');
+    }
+  }
+}
+ 
+function configureAppenders(appenderList, options) {
+  clearAppenders();
+  Eif (appenderList) {
+    appenderList.forEach((appenderConfig) => {
+      loadAppender(appenderConfig.type);
+      let appender;
+      appenderConfig.makers = appenderMakers;
+      try {
+        appender = appenderMakers[appenderConfig.type](appenderConfig, options);
+        addAppender(appender, appenderConfig.category);
+      } catch (e) {
+        throw new Error(`log4js configuration problem for ${util.inspect(appenderConfig)}`, e);
+      }
+    });
+  }
+}
+ 
+function configureLevels(_levels) {
+  levels.config = _levels; // Keep it so we can create loggers later using this cfg
+  Iif (_levels) {
+    const keys = Object.keys(levels.config).sort();
+ 
+    /* eslint-disable guard-for-in */
+    for (const idx in keys) {
+      const category = keys[idx];
+      if (category === ALL_CATEGORIES) {
+        setGlobalLogLevel(_levels[category]);
+      }
+ 
+      for (const loggerCategory in loggers) {
+        if (doesLevelEntryContainsLogger(category, loggerCategory)) {
+          loggers[loggerCategory].setLevel(_levels[category]);
+        }
+      }
+    }
+  }
+}
+ 
+function setGlobalLogLevel(level) {
+  Logger.prototype.level = levels.toLevel(level, levels.TRACE);
+}
+ 
+/**
+ * Get the default logger instance.
+ * @return {Logger} instance of default logger
+ * @static
+ */
+function getDefaultLogger() {
+  return getLogger(Logger.DEFAULT_CATEGORY);
+}
+ 
+const configState = {};
+ 
+function loadConfigurationFile(filename) {
+  Iif (filename) {
+    return JSON.parse(fs.readFileSync(filename, 'utf8'));
+  }
+  return undefined;
+}
+ 
+function configureOnceOff(config, options) {
+  Eif (config) {
+    try {
+      restoreConsole();
+      configureLevels(config.levels);
+      configureAppenders(config.appenders, options);
+ 
+      Iif (config.replaceConsole) {
+        replaceConsole();
+      }
+    } catch (e) {
+      throw new Error(
+        `Problem reading log4js config ${util.inspect(config)}. Error was '${e.message}' (${e.stack})`
+      );
+    }
+  }
+}
+ 
+function reloadConfiguration(options) {
+  const mtime = getMTime(configState.filename);
+  if (!mtime) return;
+ 
+  if (configState.lastMTime && (mtime.getTime() > configState.lastMTime.getTime())) {
+    configureOnceOff(loadConfigurationFile(configState.filename), options);
+  }
+  configState.lastMTime = mtime;
+}
+ 
+function getMTime(filename) {
+  let mtime;
+  try {
+    mtime = fs.statSync(configState.filename).mtime;
+  } catch (e) {
+    getLogger('log4js').warn(`Failed to load configuration file ${filename}`);
+  }
+  return mtime;
+}
+ 
+function initReloadConfiguration(filename, options) {
+  if (configState.timerId) {
+    clearInterval(configState.timerId);
+    delete configState.timerId;
+  }
+  configState.filename = filename;
+  configState.lastMTime = getMTime(filename);
+  configState.timerId = setInterval(reloadConfiguration, options.reloadSecs * 1000, options);
+}
+ 
+function configure(configurationFileOrObject, options) {
+  let config = configurationFileOrObject;
+  config = config || process.env.LOG4JS_CONFIG;
+  options = options || {};
+ 
+  if (config === undefined || config === null || typeof config === 'string') {
+    Iif (options.reloadSecs) {
+      initReloadConfiguration(config, options);
+    }
+    config = loadConfigurationFile(config) || defaultConfig;
+  } else {
+    Iif (options.reloadSecs) { // eslint-disable-line
+      getLogger('log4js').warn(
+        'Ignoring configuration reload parameter for "object" configuration.'
+      );
+    }
+  }
+  configureOnceOff(config, options);
+}
+ 
+const originalConsoleFunctions = {
+  log: console.log,
+  debug: console.debug,
+  info: console.info,
+  warn: console.warn,
+  error: console.error
+};
+ 
+function replaceConsole(logger) {
+  function replaceWith(fn) {
+    return function () {
+      /* eslint prefer-rest-params:0 */
+      // todo: once node v4 support dropped, use rest parameter instead
+      fn.apply(logger, Array.from(arguments));
+    };
+  }
+ 
+  logger = logger || getLogger('console');
+ 
+  ['log', 'debug', 'info', 'warn', 'error'].forEach((item) => {
+    console[item] = replaceWith(item === 'log' ? logger.info : logger[item]);
+  });
+}
+ 
+function restoreConsole() {
+  ['log', 'debug', 'info', 'warn', 'error'].forEach((item) => {
+    console[item] = originalConsoleFunctions[item];
+  });
+}
+ 
+/* eslint global-require:0 */
+/**
+ * Load an appenderModule based on the provided appender filepath. Will first
+ * check if the appender path is a subpath of the log4js 'lib/appenders' directory.
+ * If not, it will attempt to load the the appender as complete path.
+ *
+ * @param {string} appender The filepath for the appender.
+ * @returns {Object|null} The required appender or null if appender could not be loaded.
+ * @private
+ */
+function requireAppender(appender) {
+  let appenderModule;
+  try {
+    appenderModule = require(`./appenders/${appender}`); // eslint-disable-line
+  } catch (e) {
+    appenderModule = require(appender); // eslint-disable-line
+  }
+  return appenderModule;
+}
+ 
+/**
+ * Load an appender. Provided the appender path to be loaded. If appenderModule is defined,
+ * it will be used in place of requiring the appender module.
+ *
+ * @param {string} appender The path to the appender module.
+ * @param {Object|void} [appenderModule] The pre-required appender module. When provided,
+ * instead of requiring the appender by its path, this object will be used.
+ * @returns {void}
+ * @private
+ */
+function loadAppender(appender, appenderModule) {
+  appenderModule = appenderModule || requireAppender(appender);
+ 
+  Iif (!appenderModule) {
+    throw new Error(`Invalid log4js appender: ${util.inspect(appender)}`);
+  }
+ 
+  log4js.appenders[appender] = appenderModule.appender.bind(appenderModule);
+  if (appenderModule.shutdown) {
+    appenderShutdowns[appender] = appenderModule.shutdown.bind(appenderModule);
+  }
+  appenderMakers[appender] = appenderModule.configure.bind(appenderModule);
+}
+ 
+/**
+ * Shutdown all log appenders. This will first disable all writing to appenders
+ * and then call the shutdown function each appender.
+ *
+ * @params {Function} cb - The callback to be invoked once all appenders have
+ *  shutdown. If an error occurs, the callback will be given the error object
+ *  as the first argument.
+ */
+function shutdown(cb) {
+  // First, disable all writing to appenders. This prevents appenders from
+  // not being able to be drained because of run-away log writes.
+  loggerModule.disableAllLogWrites();
+ 
+  // turn off config reloading
+  Iif (configState.timerId) {
+    clearInterval(configState.timerId);
+  }
+ 
+  // Call each of the shutdown functions in parallel
+  let completed = 0;
+  let error;
+  const shutdownFunctions = [];
+ 
+  function complete(err) {
+    error = error || err;
+    completed++;
+    Eif (completed >= shutdownFunctions.length) {
+      cb(error);
+    }
+  }
+ 
+  for (const category in appenderShutdowns) {
+    Eif (appenderShutdowns.hasOwnProperty(category)) {
+      shutdownFunctions.push(appenderShutdowns[category]);
+    }
+  }
+ 
+  Iif (!shutdownFunctions.length) {
+    return cb();
+  }
+ 
+  shutdownFunctions.forEach((shutdownFct) => {
+    shutdownFct(complete);
+  });
+ 
+  return null;
+}
+ 
+/**
+ * @name log4js
+ * @namespace Log4js
+ * @property getBufferedLogger
+ * @property getLogger
+ * @property getDefaultLogger
+ * @property hasLogger
+ * @property addAppender
+ * @property loadAppender
+ * @property clearAppenders
+ * @property configure
+ * @property shutdown
+ * @property replaceConsole
+ * @property restoreConsole
+ * @property levels
+ * @property setGlobalLogLevel
+ * @property layouts
+ * @property appenders
+ * @property appenderMakers
+ * @property connectLogger
+ */
+const log4js = {
+  getBufferedLogger,
+  getLogger,
+  getDefaultLogger,
+  hasLogger,
+ 
+  addAppender,
+  loadAppender,
+  clearAppenders,
+  configure,
+  shutdown,
+ 
+  replaceConsole,
+  restoreConsole,
+ 
+  levels,
+  setGlobalLogLevel,
+ 
+  layouts,
+  appenders: {},
+  appenderMakers,
+  connectLogger
+};
+ 
+module.exports = log4js;
+ 
+// set ourselves up
+configure();
+ 
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/lib/logger.js.html b/node_modules/log4js/coverage/lcov-report/lib/logger.js.html new file mode 100644 index 0000000..9dc2351 --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/lib/logger.js.html @@ -0,0 +1,461 @@ + + + + Code coverage report for lib/logger.js + + + + + + + +
+
+

+ All files / lib logger.js +

+
+
+ 79.55% + Statements + 35/44 +
+
+ 25% + Branches + 3/12 +
+
+ 61.54% + Functions + 8/13 +
+
+ 81.4% + Lines + 35/43 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133  +  +  +  +2x +2x +  +2x +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +3x +3x +3x +3x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +3x +3x +  +  +3x +  +  +  +3x +  +  +  +3x +3x +  +  +  +2x +2x +  +2x +  +  +14x +  +14x +14x +14x +  +14x +  +  +  +14x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +  +  +  +  +  +  +  +4x +  +  +2x +2x +2x +2x +2x + 
/* eslint no-underscore-dangle:0 */
+ 
+'use strict';
+ 
+const levels = require('./levels');
+const EventEmitter = require('events');
+ 
+const DEFAULT_CATEGORY = '[default]';
+ 
+let logWritesEnabled = true;
+ 
+/**
+ * @name LoggingEvent
+ * @namespace Log4js
+ */
+class LoggingEvent {
+  /**
+   * Models a logging event.
+   * @constructor
+   * @param {String} categoryName name of category
+   * @param {Log4js.Level} level level of message
+   * @param {Array} data objects to log
+   * @param {Logger} logger the associated logger
+   * @author Seth Chisamore
+   */
+  constructor(categoryName, level, data, logger) {
+    this.startTime = new Date();
+    this.categoryName = categoryName;
+    this.data = data;
+    this.level = level;
+    this.logger = logger;
+  }
+}
+ 
+/**
+ * Logger to log messages.
+ * use {@see log4js#getLogger(String)} to get an instance.
+ *
+ * @name Logger
+ * @namespace Log4js
+ * @param name name of category to log to
+ * @param level
+ *
+ * @author Stephan Strittmatter
+ */
+class Logger extends EventEmitter {
+  constructor(name, level) {
+    super();
+ 
+    this.category = name || DEFAULT_CATEGORY;
+ 
+    Iif (level) {
+      this.setLevel(level);
+    }
+  }
+ 
+  setLevel(level) {
+    this.level = levels.toLevel(level, this.level || levels.TRACE);
+  }
+ 
+  removeLevel() {
+    delete this.level;
+  }
+ 
+  log() {
+    /* eslint prefer-rest-params:0 */
+    // todo: once node v4 support dropped, use rest parameter instead
+    const args = Array.from(arguments);
+    const logLevel = levels.toLevel(args[0], levels.INFO);
+    Iif (!this.isLevelEnabled(logLevel)) {
+      return;
+    }
+    this._log(logLevel, args.slice(1));
+  }
+ 
+  isLevelEnabled(otherLevel) {
+    return this.level.isLessThanOrEqualTo(otherLevel);
+  }
+ 
+  _log(level, data) {
+    const loggingEvent = new LoggingEvent(this.category, level, data, this);
+    this.emit('log', loggingEvent);
+  }
+}
+ 
+Logger.DEFAULT_CATEGORY = DEFAULT_CATEGORY;
+Logger.prototype.level = levels.TRACE;
+ 
+['Trace', 'Debug', 'Info', 'Warn', 'Error', 'Fatal', 'Mark'].forEach(addLevelMethods);
+ 
+function addLevelMethods(target) {
+  const level = levels.toLevel(target);
+ 
+  const levelStrLower = level.toString().toLowerCase();
+  const levelMethod = levelStrLower.replace(/_([a-z])/g, g => g[1].toUpperCase());
+  const isLevelMethod = levelMethod[0].toUpperCase() + levelMethod.slice(1);
+ 
+  Logger.prototype[`is${isLevelMethod}Enabled`] = function () {
+    return this.isLevelEnabled(level.toString());
+  };
+ 
+  Logger.prototype[levelMethod] = function () {
+    /* eslint prefer-rest-params:0 */
+    // todo: once node v4 support dropped, use rest parameter instead
+    const args = Array.from(arguments);
+    if (logWritesEnabled && this.isLevelEnabled(level)) {
+      this._log(level, args);
+    }
+  };
+}
+ 
+/**
+ * Disable all log writes.
+ * @returns {void}
+ */
+function disableAllLogWrites() {
+  logWritesEnabled = false;
+}
+ 
+/**
+ * Enable log writes.
+ * @returns {void}
+ */
+function enableAllLogWrites() {
+  logWritesEnabled = true;
+}
+ 
+module.exports.LoggingEvent = LoggingEvent;
+module.exports.Logger = Logger;
+module.exports.disableAllLogWrites = disableAllLogWrites;
+module.exports.enableAllLogWrites = enableAllLogWrites;
+module.exports.addLevelMethods = addLevelMethods;
+ 
+
+
+ + + + + + + diff --git a/node_modules/log4js/coverage/lcov-report/prettify.css b/node_modules/log4js/coverage/lcov-report/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/log4js/coverage/lcov-report/prettify.js b/node_modules/log4js/coverage/lcov-report/prettify.js new file mode 100644 index 0000000..ef51e03 --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/log4js/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/log4js/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000..03f704a Binary files /dev/null and b/node_modules/log4js/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/node_modules/log4js/coverage/lcov-report/sorter.js b/node_modules/log4js/coverage/lcov-report/sorter.js new file mode 100644 index 0000000..6c5034e --- /dev/null +++ b/node_modules/log4js/coverage/lcov-report/sorter.js @@ -0,0 +1,158 @@ +var addSorting = (function () { + "use strict"; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { return document.querySelector('.coverage-summary'); } + // returns the thead element of the summary table + function getTableHeader() { return getTable().querySelector('thead tr'); } + // returns the tbody element of the summary table + function getTableBody() { return getTable().querySelector('tbody'); } + // returns the th element for nth column + function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function (a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function (a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function () { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i =0 ; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function () { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(cols); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/node_modules/log4js/coverage/lcov.info b/node_modules/log4js/coverage/lcov.info new file mode 100644 index 0000000..9336232 --- /dev/null +++ b/node_modules/log4js/coverage/lcov.info @@ -0,0 +1,1221 @@ +TN: +SF:/Users/garethjones/stuff/log4js-node/lib/connect-logger.js +FN:40,getLogger +FN:55,(anonymous_1) +FN:70,(anonymous_2) +FN:88,(anonymous_3) +FN:101,(anonymous_4) +FN:125,assembleTokens +FN:126,(anonymous_6) +FN:176,(anonymous_7) +FN:182,(anonymous_8) +FN:202,getUrl +FN:214,format +FN:248,createNoLogCondition +FN:262,(anonymous_12) +FNF:13 +FNH:0 +FNDA:0,getLogger +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,assembleTokens +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,getUrl +FNDA:0,format +FNDA:0,createNoLogCondition +FNDA:0,(anonymous_12) +DA:5,2 +DA:7,2 +DA:42,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:47,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:55,0 +DA:57,0 +DA:60,0 +DA:62,0 +DA:63,0 +DA:64,0 +DA:67,0 +DA:70,0 +DA:71,0 +DA:72,0 +DA:74,0 +DA:75,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:81,0 +DA:83,0 +DA:88,0 +DA:89,0 +DA:91,0 +DA:92,0 +DA:93,0 +DA:94,0 +DA:97,0 +DA:98,0 +DA:100,0 +DA:101,0 +DA:102,0 +DA:104,0 +DA:111,0 +DA:126,0 +DA:127,0 +DA:128,0 +DA:129,0 +DA:132,0 +DA:133,0 +DA:137,0 +DA:140,0 +DA:141,0 +DA:142,0 +DA:143,0 +DA:144,0 +DA:145,0 +DA:146,0 +DA:147,0 +DA:148,0 +DA:152,0 +DA:156,0 +DA:167,0 +DA:168,0 +DA:174,0 +DA:177,0 +DA:180,0 +DA:183,0 +DA:189,0 +DA:203,0 +DA:215,0 +DA:216,0 +DA:218,0 +DA:249,0 +DA:251,0 +DA:252,0 +DA:253,0 +DA:256,0 +DA:257,0 +DA:260,0 +DA:262,0 +DA:263,0 +DA:267,0 +DA:270,2 +LF:81 +LH:3 +BRDA:42,0,0,0 +BRDA:42,0,1,0 +BRDA:43,1,0,0 +BRDA:43,1,1,0 +BRDA:44,2,0,0 +BRDA:44,2,1,0 +BRDA:52,3,0,0 +BRDA:52,3,1,0 +BRDA:53,4,0,0 +BRDA:53,4,1,0 +BRDA:57,5,0,0 +BRDA:57,5,1,0 +BRDA:60,6,0,0 +BRDA:60,6,1,0 +BRDA:60,7,0,0 +BRDA:60,7,1,0 +BRDA:62,8,0,0 +BRDA:62,8,1,0 +BRDA:62,9,0,0 +BRDA:62,9,1,0 +BRDA:75,10,0,0 +BRDA:75,10,1,0 +BRDA:78,11,0,0 +BRDA:78,11,1,0 +BRDA:80,12,0,0 +BRDA:80,12,1,0 +BRDA:81,13,0,0 +BRDA:81,13,1,0 +BRDA:91,14,0,0 +BRDA:91,14,1,0 +BRDA:91,15,0,0 +BRDA:91,15,1,0 +BRDA:93,16,0,0 +BRDA:93,16,1,0 +BRDA:94,17,0,0 +BRDA:94,17,1,0 +BRDA:97,18,0,0 +BRDA:97,18,1,0 +BRDA:98,19,0,0 +BRDA:98,19,1,0 +BRDA:100,20,0,0 +BRDA:100,20,1,0 +BRDA:102,21,0,0 +BRDA:102,21,1,0 +BRDA:132,22,0,0 +BRDA:132,22,1,0 +BRDA:145,23,0,0 +BRDA:145,23,1,0 +BRDA:150,24,0,0 +BRDA:150,24,1,0 +BRDA:150,24,2,0 +BRDA:158,25,0,0 +BRDA:158,25,1,0 +BRDA:158,25,2,0 +BRDA:158,25,3,0 +BRDA:158,25,4,0 +BRDA:158,25,5,0 +BRDA:158,25,6,0 +BRDA:170,26,0,0 +BRDA:170,26,1,0 +BRDA:170,26,2,0 +BRDA:170,26,3,0 +BRDA:170,26,4,0 +BRDA:183,27,0,0 +BRDA:183,27,1,0 +BRDA:184,28,0,0 +BRDA:184,28,1,0 +BRDA:185,29,0,0 +BRDA:185,29,1,0 +BRDA:203,30,0,0 +BRDA:203,30,1,0 +BRDA:251,31,0,0 +BRDA:251,31,1,0 +BRDA:252,32,0,0 +BRDA:252,32,1,0 +BRDA:256,33,0,0 +BRDA:256,33,1,0 +BRDA:260,34,0,0 +BRDA:260,34,1,0 +BRDA:262,35,0,0 +BRDA:262,35,1,0 +BRF:81 +BRH:0 +end_of_record +TN: +SF:/Users/garethjones/stuff/log4js-node/lib/date_format.js +FN:8,padWithZeros +FN:16,addZero +FN:25,offset +FN:39,(anonymous_3) +FNF:4 +FNH:0 +FNDA:0,padWithZeros +FNDA:0,addZero +FNDA:0,offset +FNDA:0,(anonymous_3) +DA:3,4 +DA:4,4 +DA:5,4 +DA:6,4 +DA:9,0 +DA:10,0 +DA:11,0 +DA:13,0 +DA:17,0 +DA:27,0 +DA:28,0 +DA:29,0 +DA:30,0 +DA:31,0 +DA:33,0 +DA:34,0 +DA:36,0 +DA:39,4 +DA:40,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:46,0 +DA:47,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:62,0 +DA:71,0 +LF:38 +LH:5 +BRDA:30,0,0,0 +BRDA:30,0,1,0 +BRDA:33,1,0,0 +BRDA:33,1,1,0 +BRDA:36,2,0,0 +BRDA:36,2,1,0 +BRDA:40,3,0,0 +BRDA:40,3,1,0 +BRDA:46,4,0,0 +BRDA:46,4,1,0 +BRDA:55,5,0,0 +BRDA:55,5,1,0 +BRF:12 +BRH:0 +end_of_record +TN: +SF:/Users/garethjones/stuff/log4js-node/lib/layouts.js +FN:9,(anonymous_0) +FN:12,(anonymous_1) +FN:15,(anonymous_2) +FN:18,(anonymous_3) +FN:21,(anonymous_4) +FN:24,(anonymous_5) +FN:40,wrapErrorsWithInspect +FN:41,(anonymous_7) +FN:44,(anonymous_8) +FN:55,formatLogData +FN:86,colorizeStart +FN:90,colorizeEnd +FN:97,colorize +FN:101,timestampLevelAndCategory +FN:122,basicLayout +FN:134,colouredLayout +FN:142,messagePassThroughLayout +FN:146,dummyLayout +FN:182,patternLayout +FN:188,categoryName +FN:200,formatAsDate +FN:219,hostname +FN:223,formatMessage +FN:227,endOfLine +FN:231,logLevel +FN:235,startTime +FN:239,startColour +FN:243,endColour +FN:247,percent +FN:251,pid +FN:255,clusterInfo +FN:268,userDefined +FN:293,replaceToken +FN:297,truncate +FN:307,pad +FN:327,truncateAndPad +FN:334,(anonymous_36) +FN:370,(anonymous_37) +FN:373,(anonymous_38) +FNF:39 +FNH:4 +FNDA:0,(anonymous_0) +FNDA:0,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:8,wrapErrorsWithInspect +FNDA:14,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:8,formatLogData +FNDA:0,colorizeStart +FNDA:0,colorizeEnd +FNDA:0,colorize +FNDA:0,timestampLevelAndCategory +FNDA:0,basicLayout +FNDA:0,colouredLayout +FNDA:8,messagePassThroughLayout +FNDA:0,dummyLayout +FNDA:0,patternLayout +FNDA:0,categoryName +FNDA:0,formatAsDate +FNDA:0,hostname +FNDA:0,formatMessage +FNDA:0,endOfLine +FNDA:0,logLevel +FNDA:0,startTime +FNDA:0,startColour +FNDA:0,endColour +FNDA:0,percent +FNDA:0,pid +FNDA:0,clusterInfo +FNDA:0,userDefined +FNDA:0,replaceToken +FNDA:0,truncate +FNDA:0,pad +FNDA:0,truncateAndPad +FNDA:0,(anonymous_36) +FNDA:0,(anonymous_37) +FNDA:0,(anonymous_38) +DA:3,4 +DA:4,4 +DA:5,4 +DA:7,4 +DA:8,4 +DA:10,0 +DA:13,0 +DA:16,0 +DA:19,0 +DA:22,0 +DA:25,0 +DA:28,4 +DA:38,4 +DA:41,8 +DA:42,14 +DA:43,0 +DA:45,0 +DA:49,14 +DA:56,8 +DA:57,8 +DA:58,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:64,8 +DA:67,4 +DA:87,0 +DA:91,0 +DA:98,0 +DA:102,0 +DA:123,0 +DA:135,0 +DA:143,8 +DA:147,0 +DA:183,0 +DA:184,0 +DA:186,0 +DA:189,0 +DA:190,0 +DA:191,0 +DA:192,0 +DA:193,0 +DA:194,0 +DA:197,0 +DA:201,0 +DA:202,0 +DA:203,0 +DA:205,0 +DA:206,0 +DA:207,0 +DA:208,0 +DA:209,0 +DA:210,0 +DA:211,0 +DA:212,0 +DA:216,0 +DA:220,0 +DA:224,0 +DA:228,0 +DA:232,0 +DA:236,0 +DA:240,0 +DA:244,0 +DA:248,0 +DA:252,0 +DA:256,0 +DA:257,0 +DA:261,0 +DA:262,0 +DA:265,0 +DA:269,0 +DA:270,0 +DA:273,0 +DA:277,0 +DA:294,0 +DA:299,0 +DA:300,0 +DA:301,0 +DA:304,0 +DA:309,0 +DA:310,0 +DA:311,0 +DA:313,0 +DA:314,0 +DA:317,0 +DA:319,0 +DA:320,0 +DA:324,0 +DA:328,0 +DA:329,0 +DA:330,0 +DA:331,0 +DA:334,0 +DA:335,0 +DA:337,0 +DA:340,0 +DA:342,0 +DA:343,0 +DA:344,0 +DA:345,0 +DA:346,0 +DA:349,0 +DA:350,0 +DA:354,0 +DA:355,0 +DA:357,0 +DA:359,0 +DA:363,4 +DA:371,0 +DA:374,0 +LF:110 +LH:16 +BRDA:7,0,0,4 +BRDA:7,0,1,0 +BRDA:22,1,0,0 +BRDA:22,1,1,0 +BRDA:22,2,0,0 +BRDA:22,2,1,0 +BRDA:42,3,0,0 +BRDA:42,3,1,14 +BRDA:42,4,0,14 +BRDA:42,4,1,0 +BRDA:45,5,0,0 +BRDA:45,5,1,0 +BRDA:57,6,0,0 +BRDA:57,6,1,8 +BRDA:87,7,0,0 +BRDA:87,7,1,0 +BRDA:91,8,0,0 +BRDA:91,8,1,0 +BRDA:186,9,0,0 +BRDA:186,9,1,0 +BRDA:190,10,0,0 +BRDA:190,10,1,0 +BRDA:193,11,0,0 +BRDA:193,11,1,0 +BRDA:202,12,0,0 +BRDA:202,12,1,0 +BRDA:205,13,0,0 +BRDA:205,13,1,0 +BRDA:207,14,0,0 +BRDA:207,14,1,0 +BRDA:209,15,0,0 +BRDA:209,15,1,0 +BRDA:211,16,0,0 +BRDA:211,16,1,0 +BRDA:252,17,0,0 +BRDA:252,17,1,0 +BRDA:252,18,0,0 +BRDA:252,18,1,0 +BRDA:256,19,0,0 +BRDA:256,19,1,0 +BRDA:256,20,0,0 +BRDA:256,20,1,0 +BRDA:261,21,0,0 +BRDA:261,21,1,0 +BRDA:269,22,0,0 +BRDA:269,22,1,0 +BRDA:270,23,0,0 +BRDA:270,23,1,0 +BRDA:299,24,0,0 +BRDA:299,24,1,0 +BRDA:309,25,0,0 +BRDA:309,25,1,0 +BRDA:310,26,0,0 +BRDA:310,26,1,0 +BRDA:349,27,0,0 +BRDA:349,27,1,0 +BRDA:374,28,0,0 +BRDA:374,28,1,0 +BRF:58 +BRH:4 +end_of_record +TN: +SF:/Users/garethjones/stuff/log4js-node/lib/levels.js +FN:8,(anonymous_0) +FN:13,(anonymous_1) +FN:17,(anonymous_2) +FN:24,(anonymous_3) +FN:31,(anonymous_4) +FN:46,toLevel +FN:63,getLevel +FNF:7 +FNH:4 +FNDA:18,(anonymous_0) +FNDA:14,(anonymous_1) +FNDA:3,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:17,toLevel +FNDA:0,getLevel +DA:9,18 +DA:10,18 +DA:14,14 +DA:18,3 +DA:19,0 +DA:21,3 +DA:25,0 +DA:26,0 +DA:28,0 +DA:32,0 +DA:33,0 +DA:35,0 +DA:47,17 +DA:48,0 +DA:51,17 +DA:52,0 +DA:53,0 +DA:56,17 +DA:57,17 +DA:60,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:69,0 +DA:72,2 +LF:25 +LH:10 +BRDA:18,0,0,0 +BRDA:18,0,1,3 +BRDA:25,1,0,0 +BRDA:25,1,1,0 +BRDA:32,2,0,0 +BRDA:32,2,1,0 +BRDA:47,3,0,0 +BRDA:47,3,1,17 +BRDA:51,4,0,0 +BRDA:51,4,1,17 +BRDA:56,5,0,17 +BRDA:56,5,1,0 +BRDA:57,6,0,17 +BRDA:57,6,1,0 +BRDA:65,7,0,0 +BRDA:65,7,1,0 +BRF:16 +BRH:5 +end_of_record +TN: +SF:/Users/garethjones/stuff/log4js-node/lib/log4js.js +FN:57,hasLogger +FN:62,(anonymous_1) +FN:72,getBufferedLogger +FN:77,(anonymous_3) +FN:84,(anonymous_4) +FN:87,(anonymous_5) +FN:90,(anonymous_6) +FN:93,(anonymous_7) +FN:96,(anonymous_8) +FN:99,(anonymous_9) +FN:106,normalizeCategory +FN:110,doesLevelEntryContainsLogger +FN:116,doesAppenderContainsLogger +FN:128,getLogger +FN:161,(anonymous_14) +FN:170,(anonymous_15) +FN:182,addAppender +FN:200,(anonymous_17) +FN:215,addAppenderToAllLoggers +FN:223,addAppenderToCategory +FN:230,clearAppenders +FN:242,configureAppenders +FN:245,(anonymous_22) +FN:259,configureLevels +FN:280,setGlobalLogLevel +FN:289,getDefaultLogger +FN:295,loadConfigurationFile +FN:302,configureOnceOff +FN:320,reloadConfiguration +FN:330,getMTime +FN:340,initReloadConfiguration +FN:350,configure +FN:378,replaceConsole +FN:379,replaceWith +FN:380,(anonymous_34) +FN:389,(anonymous_35) +FN:394,restoreConsole +FN:395,(anonymous_37) +FN:410,requireAppender +FN:430,loadAppender +FN:452,shutdown +FN:467,complete +FN:485,(anonymous_42) +FNF:43 +FNH:23 +FNDA:3,hasLogger +FNDA:0,(anonymous_1) +FNDA:0,getBufferedLogger +FNDA:0,(anonymous_3) +FNDA:0,(anonymous_4) +FNDA:0,(anonymous_5) +FNDA:0,(anonymous_6) +FNDA:0,(anonymous_7) +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:6,normalizeCategory +FNDA:0,doesLevelEntryContainsLogger +FNDA:3,doesAppenderContainsLogger +FNDA:3,getLogger +FNDA:1,(anonymous_14) +FNDA:0,(anonymous_15) +FNDA:6,addAppender +FNDA:6,(anonymous_17) +FNDA:3,addAppenderToAllLoggers +FNDA:6,addAppenderToCategory +FNDA:4,clearAppenders +FNDA:3,configureAppenders +FNDA:3,(anonymous_22) +FNDA:3,configureLevels +FNDA:0,setGlobalLogLevel +FNDA:0,getDefaultLogger +FNDA:2,loadConfigurationFile +FNDA:3,configureOnceOff +FNDA:0,reloadConfiguration +FNDA:0,getMTime +FNDA:0,initReloadConfiguration +FNDA:3,configure +FNDA:0,replaceConsole +FNDA:0,replaceWith +FNDA:0,(anonymous_34) +FNDA:0,(anonymous_35) +FNDA:3,restoreConsole +FNDA:15,(anonymous_37) +FNDA:4,requireAppender +FNDA:4,loadAppender +FNDA:2,shutdown +FNDA:2,complete +FNDA:2,(anonymous_42) +DA:35,2 +DA:36,2 +DA:37,2 +DA:38,2 +DA:39,2 +DA:40,2 +DA:42,2 +DA:44,2 +DA:45,2 +DA:46,2 +DA:47,2 +DA:48,2 +DA:55,2 +DA:58,3 +DA:62,2 +DA:64,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:69,0 +DA:73,0 +DA:74,0 +DA:75,0 +DA:76,0 +DA:77,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:81,0 +DA:84,0 +DA:85,0 +DA:87,0 +DA:88,0 +DA:90,0 +DA:91,0 +DA:93,0 +DA:94,0 +DA:96,0 +DA:97,0 +DA:99,0 +DA:100,0 +DA:103,0 +DA:107,6 +DA:111,0 +DA:112,0 +DA:113,0 +DA:117,3 +DA:118,3 +DA:119,3 +DA:130,3 +DA:131,0 +DA:134,3 +DA:139,1 +DA:142,0 +DA:143,0 +DA:144,0 +DA:145,0 +DA:147,0 +DA:154,1 +DA:158,1 +DA:159,1 +DA:160,1 +DA:161,1 +DA:162,1 +DA:168,1 +DA:169,0 +DA:170,0 +DA:171,0 +DA:176,3 +DA:185,6 +DA:186,6 +DA:188,6 +DA:189,3 +DA:192,6 +DA:193,3 +DA:196,6 +DA:197,0 +DA:200,6 +DA:201,6 +DA:203,6 +DA:204,3 +DA:206,3 +DA:207,2 +DA:208,2 +DA:216,3 +DA:217,0 +DA:218,0 +DA:224,6 +DA:225,4 +DA:227,6 +DA:233,4 +DA:234,4 +DA:235,4 +DA:236,0 +DA:237,0 +DA:243,3 +DA:244,3 +DA:245,3 +DA:246,3 +DA:248,3 +DA:249,3 +DA:250,3 +DA:251,3 +DA:253,0 +DA:260,3 +DA:261,3 +DA:262,0 +DA:265,0 +DA:266,0 +DA:267,0 +DA:268,0 +DA:271,0 +DA:272,0 +DA:273,0 +DA:281,0 +DA:290,0 +DA:293,2 +DA:296,2 +DA:297,0 +DA:299,2 +DA:303,3 +DA:304,3 +DA:305,3 +DA:306,3 +DA:307,3 +DA:309,3 +DA:310,0 +DA:313,0 +DA:321,0 +DA:322,0 +DA:324,0 +DA:325,0 +DA:327,0 +DA:332,0 +DA:333,0 +DA:335,0 +DA:337,0 +DA:341,0 +DA:342,0 +DA:343,0 +DA:345,0 +DA:346,0 +DA:347,0 +DA:351,3 +DA:352,3 +DA:353,3 +DA:355,3 +DA:356,2 +DA:357,0 +DA:359,2 +DA:361,1 +DA:362,0 +DA:367,3 +DA:370,2 +DA:380,0 +DA:383,0 +DA:387,0 +DA:389,0 +DA:390,0 +DA:395,3 +DA:396,15 +DA:412,4 +DA:413,4 +DA:415,0 +DA:417,4 +DA:431,4 +DA:433,4 +DA:434,0 +DA:437,4 +DA:438,4 +DA:439,1 +DA:441,4 +DA:455,2 +DA:458,2 +DA:459,0 +DA:463,2 +DA:465,2 +DA:468,2 +DA:469,2 +DA:470,2 +DA:471,2 +DA:475,2 +DA:476,2 +DA:477,2 +DA:481,2 +DA:482,0 +DA:485,2 +DA:486,2 +DA:489,2 +DA:513,2 +DA:537,2 +DA:540,2 +LF:192 +LH:108 +BRDA:64,0,0,0 +BRDA:64,0,1,0 +BRDA:64,1,0,0 +BRDA:64,1,1,0 +BRDA:130,2,0,0 +BRDA:130,2,1,3 +BRDA:134,3,0,1 +BRDA:134,3,1,2 +BRDA:139,4,0,0 +BRDA:139,4,1,1 +BRDA:145,5,0,0 +BRDA:145,5,1,0 +BRDA:159,6,0,1 +BRDA:159,6,1,0 +BRDA:168,7,0,0 +BRDA:168,7,1,1 +BRDA:188,8,0,3 +BRDA:188,8,1,3 +BRDA:188,9,0,6 +BRDA:188,9,1,6 +BRDA:192,10,0,3 +BRDA:192,10,1,3 +BRDA:192,11,0,6 +BRDA:192,11,1,6 +BRDA:196,12,0,0 +BRDA:196,12,1,6 +BRDA:203,13,0,3 +BRDA:203,13,1,3 +BRDA:207,14,0,2 +BRDA:207,14,1,0 +BRDA:217,15,0,0 +BRDA:217,15,1,0 +BRDA:224,16,0,4 +BRDA:224,16,1,2 +BRDA:236,17,0,0 +BRDA:236,17,1,0 +BRDA:244,18,0,3 +BRDA:244,18,1,0 +BRDA:261,19,0,0 +BRDA:261,19,1,3 +BRDA:267,20,0,0 +BRDA:267,20,1,0 +BRDA:272,21,0,0 +BRDA:272,21,1,0 +BRDA:296,22,0,0 +BRDA:296,22,1,2 +BRDA:303,23,0,3 +BRDA:303,23,1,0 +BRDA:309,24,0,0 +BRDA:309,24,1,3 +BRDA:322,25,0,0 +BRDA:322,25,1,0 +BRDA:324,26,0,0 +BRDA:324,26,1,0 +BRDA:324,27,0,0 +BRDA:324,27,1,0 +BRDA:341,28,0,0 +BRDA:341,28,1,0 +BRDA:352,29,0,3 +BRDA:352,29,1,2 +BRDA:353,30,0,3 +BRDA:353,30,1,3 +BRDA:355,31,0,2 +BRDA:355,31,1,1 +BRDA:355,32,0,3 +BRDA:355,32,1,1 +BRDA:355,32,2,1 +BRDA:356,33,0,0 +BRDA:356,33,1,2 +BRDA:359,34,0,2 +BRDA:359,34,1,2 +BRDA:361,35,0,0 +BRDA:361,35,1,1 +BRDA:387,36,0,0 +BRDA:387,36,1,0 +BRDA:390,37,0,0 +BRDA:390,37,1,0 +BRDA:431,38,0,4 +BRDA:431,38,1,4 +BRDA:433,39,0,0 +BRDA:433,39,1,4 +BRDA:438,40,0,1 +BRDA:438,40,1,3 +BRDA:458,41,0,0 +BRDA:458,41,1,2 +BRDA:468,42,0,2 +BRDA:468,42,1,2 +BRDA:470,43,0,2 +BRDA:470,43,1,0 +BRDA:476,44,0,2 +BRDA:476,44,1,0 +BRDA:481,45,0,0 +BRDA:481,45,1,2 +BRF:93 +BRH:49 +end_of_record +TN: +SF:/Users/garethjones/stuff/log4js-node/lib/logger.js +FN:26,(anonymous_0) +FN:47,(anonymous_1) +FN:57,(anonymous_2) +FN:61,(anonymous_3) +FN:65,(anonymous_4) +FN:76,(anonymous_5) +FN:80,(anonymous_6) +FN:91,addLevelMethods +FN:95,(anonymous_8) +FN:98,(anonymous_9) +FN:102,(anonymous_10) +FN:116,disableAllLogWrites +FN:124,enableAllLogWrites +FNF:13 +FNH:8 +FNDA:3,(anonymous_0) +FNDA:1,(anonymous_1) +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:3,(anonymous_4) +FNDA:3,(anonymous_5) +FNDA:3,(anonymous_6) +FNDA:14,addLevelMethods +FNDA:0,(anonymous_8) +FNDA:0,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:2,disableAllLogWrites +FNDA:4,enableAllLogWrites +DA:5,2 +DA:6,2 +DA:8,2 +DA:10,2 +DA:27,3 +DA:28,3 +DA:29,3 +DA:30,3 +DA:31,3 +DA:48,1 +DA:50,1 +DA:52,1 +DA:53,0 +DA:58,0 +DA:62,0 +DA:68,3 +DA:69,3 +DA:70,3 +DA:71,0 +DA:73,3 +DA:77,3 +DA:81,3 +DA:82,3 +DA:86,2 +DA:87,2 +DA:89,2 +DA:92,14 +DA:94,14 +DA:95,14 +DA:96,14 +DA:98,14 +DA:99,0 +DA:102,14 +DA:105,0 +DA:106,0 +DA:107,0 +DA:117,2 +DA:125,4 +DA:128,2 +DA:129,2 +DA:130,2 +DA:131,2 +DA:132,2 +LF:43 +LH:35 +BRDA:50,0,0,1 +BRDA:50,0,1,0 +BRDA:52,1,0,0 +BRDA:52,1,1,1 +BRDA:58,2,0,0 +BRDA:58,2,1,0 +BRDA:70,3,0,0 +BRDA:70,3,1,3 +BRDA:106,4,0,0 +BRDA:106,4,1,0 +BRDA:106,5,0,0 +BRDA:106,5,1,0 +BRF:12 +BRH:3 +end_of_record +TN: +SF:/Users/garethjones/stuff/log4js-node/lib/appenders/multiprocess.js +FN:14,logServer +FN:19,deserializeLoggingEvent +FN:44,serverCreated +FN:48,logTheMessage +FN:54,chunkReceived +FN:70,(anonymous_5) +FN:79,workerAppender +FN:84,write +FN:95,emptyBuffer +FN:104,createSocket +FN:106,(anonymous_10) +FN:117,log +FN:126,createAppender +FN:134,configure +FN:144,shutdown +FN:146,(anonymous_15) +FN:147,(anonymous_16) +FNF:17 +FNH:7 +FNDA:1,logServer +FNDA:0,deserializeLoggingEvent +FNDA:0,serverCreated +FNDA:0,logTheMessage +FNDA:0,chunkReceived +FNDA:1,(anonymous_5) +FNDA:0,workerAppender +FNDA:0,write +FNDA:0,emptyBuffer +FNDA:0,createSocket +FNDA:0,(anonymous_10) +FNDA:0,log +FNDA:1,createAppender +FNDA:1,configure +FNDA:1,shutdown +FNDA:1,(anonymous_15) +FNDA:1,(anonymous_16) +DA:3,1 +DA:4,1 +DA:6,1 +DA:7,1 +DA:21,0 +DA:22,0 +DA:23,0 +DA:24,0 +DA:27,0 +DA:35,0 +DA:36,0 +DA:38,0 +DA:41,1 +DA:44,1 +DA:45,0 +DA:46,0 +DA:49,0 +DA:50,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:60,0 +DA:62,0 +DA:66,0 +DA:67,0 +DA:70,1 +DA:71,1 +DA:73,1 +DA:76,1 +DA:80,0 +DA:81,0 +DA:88,0 +DA:89,0 +DA:91,0 +DA:92,0 +DA:99,0 +DA:100,0 +DA:105,0 +DA:106,0 +DA:107,0 +DA:108,0 +DA:110,0 +DA:112,0 +DA:115,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:121,0 +DA:127,1 +DA:128,1 +DA:131,0 +DA:136,1 +DA:137,1 +DA:138,1 +DA:139,1 +DA:141,1 +DA:145,1 +DA:146,1 +DA:147,1 +DA:148,1 +DA:149,1 +DA:150,1 +DA:156,1 +DA:157,1 +DA:158,1 +LF:66 +LH:26 +BRDA:49,0,0,0 +BRDA:49,0,1,0 +BRDA:56,1,0,0 +BRDA:56,1,1,0 +BRDA:57,2,0,0 +BRDA:57,2,1,0 +BRDA:60,3,0,0 +BRDA:60,3,1,0 +BRDA:70,4,0,1 +BRDA:70,4,1,0 +BRDA:70,5,0,1 +BRDA:70,5,1,1 +BRDA:88,6,0,0 +BRDA:88,6,1,0 +BRDA:88,7,0,0 +BRDA:88,7,1,0 +BRDA:88,7,2,0 +BRDA:105,8,0,0 +BRDA:105,8,1,0 +BRDA:105,9,0,0 +BRDA:105,9,1,0 +BRDA:118,10,0,0 +BRDA:118,10,1,0 +BRDA:127,11,0,1 +BRDA:127,11,1,0 +BRDA:136,12,0,1 +BRDA:136,12,1,0 +BRDA:136,13,0,1 +BRDA:136,13,1,1 +BRDA:149,14,0,1 +BRDA:149,14,1,0 +BRF:31 +BRH:8 +end_of_record +TN: +SF:/Users/garethjones/stuff/log4js-node/lib/appenders/stdout.js +FN:5,stdoutAppender +FN:7,(anonymous_1) +FN:12,configure +FNF:3 +FNH:2 +FNDA:3,stdoutAppender +FNDA:0,(anonymous_1) +FNDA:3,configure +DA:3,2 +DA:6,3 +DA:7,3 +DA:8,0 +DA:14,3 +DA:15,0 +DA:17,3 +DA:20,2 +DA:21,2 +LF:9 +LH:7 +BRDA:6,0,0,3 +BRDA:6,0,1,3 +BRDA:14,1,0,0 +BRDA:14,1,1,3 +BRF:4 +BRH:3 +end_of_record diff --git a/node_modules/log4js/examples/example-connect-logger.js b/node_modules/log4js/examples/example-connect-logger.js new file mode 100644 index 0000000..ed7b013 --- /dev/null +++ b/node_modules/log4js/examples/example-connect-logger.js @@ -0,0 +1,46 @@ +//The connect/express logger was added to log4js by danbell. This allows connect/express servers to log using log4js. +//https://github.com/nomiddlename/log4js-node/wiki/Connect-Logger + +// load modules +var log4js = require('log4js'); +var express = require("express"); +var app = express(); + +//config +log4js.configure({ + appenders: [ + { type: 'console' }, + { type: 'file', filename: 'logs/log4jsconnect.log', category: 'log4jslog' } + ] +}); + +//define logger +var logger = log4js.getLogger('log4jslog'); + +// set at which time msg is logged print like: only on error & above +// logger.setLevel('ERROR'); + +//express app +app.configure(function() { + app.use(express.favicon('')); + // app.use(log4js.connectLogger(logger, { level: log4js.levels.INFO })); + // app.use(log4js.connectLogger(logger, { level: 'auto', format: ':method :url :status' })); + + //### AUTO LEVEL DETECTION + //http responses 3xx, level = WARN + //http responses 4xx & 5xx, level = ERROR + //else.level = INFO + app.use(log4js.connectLogger(logger, { level: 'auto' })); +}); + +//route +app.get('/', function(req,res) { + res.send('hello world'); +}); + +//start app +app.listen(5000); + +console.log('server runing at localhost:5000'); +console.log('Simulation of normal response: goto localhost:5000'); +console.log('Simulation of error response: goto localhost:5000/xxx'); diff --git a/node_modules/log4js/examples/example-socket.js b/node_modules/log4js/examples/example-socket.js new file mode 100644 index 0000000..31bb5ab --- /dev/null +++ b/node_modules/log4js/examples/example-socket.js @@ -0,0 +1,45 @@ +var log4js = require('./lib/log4js') +, cluster = require('cluster') +, numCPUs = require('os').cpus().length +, i = 0; + +if (cluster.isMaster) { + log4js.configure({ + appenders: [ + { + type: "multiprocess", + mode: "master", + appender: { + type: "console" + } + } + ] + }); + + console.info("Master creating %d workers", numCPUs); + for (i=0; i < numCPUs; i++) { + cluster.fork(); + } + + cluster.on('death', function(worker) { + console.info("Worker %d died.", worker.pid); + }); +} else { + log4js.configure({ + appenders: [ + { + type: "multiprocess", + mode: "worker" + } + ] + }); + var logger = log4js.getLogger('example-socket'); + + console.info("Worker %d started.", process.pid); + for (i=0; i < 1000; i++) { + logger.info("Worker %d - logging something %d", process.pid, i); + } +} + + + diff --git a/node_modules/log4js/examples/example.js b/node_modules/log4js/examples/example.js new file mode 100644 index 0000000..8879a23 --- /dev/null +++ b/node_modules/log4js/examples/example.js @@ -0,0 +1,58 @@ +"use strict"; +var log4js = require('../lib/log4js'); +//log the cheese logger messages to a file, and the console ones as well. +log4js.configure({ + appenders: [ + { + type: "file", + filename: "cheese.log", + category: [ 'cheese','console' ] + }, + { + type: "console" + } + ], + replaceConsole: true +}); + +//to add an appender programmatically, and without clearing other appenders +//loadAppender is only necessary if you haven't already configured an appender of this type +log4js.loadAppender('file'); +log4js.addAppender(log4js.appenders.file('pants.log'), 'pants'); +//a custom logger outside of the log4js/lib/appenders directory can be accessed like so +//log4js.loadAppender('what/you/would/put/in/require'); +//log4js.addAppender(log4js.appenders['what/you/would/put/in/require'](args)); +//or through configure as: +//log4js.configure({ +// appenders: [ { type: 'what/you/would/put/in/require', otherArgs: 'blah' } ] +//}); + +var logger = log4js.getLogger('cheese'); +//only errors and above get logged. +//you can also set this log level in the config object +//via the levels field. +logger.setLevel('ERROR'); + +//console logging methods have been replaced with log4js ones. +//so this will get coloured output on console, and appear in cheese.log +console.error("AAArgh! Something went wrong", { some: "otherObject", useful_for: "debug purposes" }); +console.log("This should appear as info output"); + +//these will not appear (logging level beneath error) +logger.trace('Entering cheese testing'); +logger.debug('Got cheese.'); +logger.info('Cheese is Gouda.'); +logger.log('Something funny about cheese.'); +logger.warn('Cheese is quite smelly.'); +//these end up on the console and in cheese.log +logger.error('Cheese %s is too ripe!', "gouda"); +logger.fatal('Cheese was breeding ground for listeria.'); + +//these don't end up in cheese.log, but will appear on the console +var anotherLogger = log4js.getLogger('another'); +anotherLogger.debug("Just checking"); + +//one for pants.log +//will also go to console, since that's configured for all categories +var pantsLog = log4js.getLogger('pants'); +pantsLog.debug("Something for pants"); diff --git a/node_modules/log4js/examples/flush-on-exit.js b/node_modules/log4js/examples/flush-on-exit.js new file mode 100644 index 0000000..19c661c --- /dev/null +++ b/node_modules/log4js/examples/flush-on-exit.js @@ -0,0 +1,27 @@ +/** + * run this, then "ab -c 10 -n 100 localhost:4444/" to test (in + * another shell) + */ +var log4js = require('../lib/log4js'); +log4js.configure({ + appenders: [ + { type: 'file', filename: 'cheese.log', category: 'cheese' }, + { type: 'console'} + ] +}); + +var logger = log4js.getLogger('cheese'); +logger.setLevel('INFO'); + +var http=require('http'); + +var server = http.createServer(function(request, response){ + response.writeHead(200, {'Content-Type': 'text/plain'}); + var rd = Math.random() * 50; + logger.info("hello " + rd); + response.write('hello '); + if (Math.floor(rd) == 30){ + log4js.shutdown(function() { process.exit(1); }); + } + response.end(); +}).listen(4444); diff --git a/node_modules/log4js/examples/fromreadme.js b/node_modules/log4js/examples/fromreadme.js new file mode 100644 index 0000000..8d837f4 --- /dev/null +++ b/node_modules/log4js/examples/fromreadme.js @@ -0,0 +1,19 @@ +//remember to change the require to just 'log4js' if you've npm install'ed it +var log4js = require('../lib/log4js'); +//by default the console appender is loaded +//log4js.loadAppender('console'); +//you'd only need to add the console appender if you +//had previously called log4js.clearAppenders(); +//log4js.addAppender(log4js.appenders.console()); +log4js.loadAppender('file'); +log4js.addAppender(log4js.appenders.file('cheese.log'), 'cheese'); + +var logger = log4js.getLogger('cheese'); +logger.setLevel('ERROR'); + +logger.trace('Entering cheese testing'); +logger.debug('Got cheese.'); +logger.info('Cheese is Gouda.'); +logger.warn('Cheese is quite smelly.'); +logger.error('Cheese is too ripe!'); +logger.fatal('Cheese was breeding ground for listeria.'); diff --git a/node_modules/log4js/examples/hipchat-appender.js b/node_modules/log4js/examples/hipchat-appender.js new file mode 100644 index 0000000..1cdf674 --- /dev/null +++ b/node_modules/log4js/examples/hipchat-appender.js @@ -0,0 +1,54 @@ +/** + * !!! The hipchat-appender requires `hipchat-notifier` from npm, e.g. + * - list as a dependency in your application's package.json || + * - npm install hipchat-notifier + */ + +var log4js = require('../lib/log4js'); + +log4js.configure({ + "appenders": [ + { + "type" : "hipchat", + "hipchat_token": process.env.HIPCHAT_TOKEN || '< User token with Notification Privileges >', + "hipchat_room": process.env.HIPCHAT_ROOM || '< Room ID or Name >' + } + ] +}); + +var logger = log4js.getLogger("hipchat"); +logger.warn("Test Warn message"); +logger.info("Test Info message"); +logger.debug("Test Debug Message"); +logger.trace("Test Trace Message"); +logger.fatal("Test Fatal Message"); +logger.error("Test Error Message"); + + +// alternative configuration demonstrating callback + custom layout +/////////////////////////////////////////////////////////////////// + +// use a custom layout function (in this case, the provided basicLayout) +// format: [TIMESTAMP][LEVEL][category] - [message] +var customLayout = require('../lib/layouts').basicLayout; + +log4js.configure({ + "appenders": [ + { + "type" : "hipchat", + "hipchat_token": process.env.HIPCHAT_TOKEN || '< User token with Notification Privileges >', + "hipchat_room": process.env.HIPCHAT_ROOM || '< Room ID or Name >', + "hipchat_from": "Mr. Semantics", + "hipchat_notify": false, + "hipchat_response_callback": function(err, response, body){ + if(err || response.statusCode > 300){ + throw new Error('hipchat-notifier failed'); + } + console.log('mr semantics callback success'); + }, + "layout": customLayout + } + ] +}); + +logger.info("Test customLayout from Mr. Semantics"); diff --git a/node_modules/log4js/examples/log-rolling.js b/node_modules/log4js/examples/log-rolling.js new file mode 100644 index 0000000..7519c5f --- /dev/null +++ b/node_modules/log4js/examples/log-rolling.js @@ -0,0 +1,27 @@ +var log4js = require('../lib/log4js') +, log +, i = 0; +log4js.configure({ + "appenders": [ + { + type: "console" + , category: "console" + }, + { + "type": "file", + "filename": "tmp-test.log", + "maxLogSize": 1024, + "backups": 3, + "category": "test" + } + ] +}); +log = log4js.getLogger("test"); + +function doTheLogging(x) { + log.info("Logging something %d", x); +} + +for ( ; i < 5000; i++) { + doTheLogging(i); +} \ No newline at end of file diff --git a/node_modules/log4js/examples/log-to-files.js b/node_modules/log4js/examples/log-to-files.js new file mode 100644 index 0000000..6f140da --- /dev/null +++ b/node_modules/log4js/examples/log-to-files.js @@ -0,0 +1,36 @@ +"use strict"; +var path = require('path') +, log4js = require('../lib/log4js'); + +log4js.configure( + { + appenders: [ + { + type: "file", + filename: "important-things.log", + maxLogSize: 10*1024*1024, // = 10Mb + numBackups: 5, // keep five backup files + compress: true, // compress the backups + encoding: 'utf-8', + mode: parseInt('0640', 8), + flags: 'w+' + }, + { + type: "dateFile", + filename: "more-important-things.log", + pattern: "yyyy-MM-dd-hh", + compress: true + }, + { + type: "stdout" + } + ] + } +); + +var logger = log4js.getLogger('things'); +logger.debug("This little thing went to market"); +logger.info("This little thing stayed at home"); +logger.error("This little thing had roast beef"); +logger.fatal("This little thing had none"); +logger.trace("and this little thing went wee, wee, wee, all the way home."); diff --git a/node_modules/log4js/examples/logFaces-appender.js b/node_modules/log4js/examples/logFaces-appender.js new file mode 100644 index 0000000..2f398f0 --- /dev/null +++ b/node_modules/log4js/examples/logFaces-appender.js @@ -0,0 +1,24 @@ +var log4js = require('../lib/log4js'); + +/* + logFaces server configured with UDP receiver, using JSON format, + listening on port 55201 will receive the logs from the appender below. +*/ + +log4js.configure({ + "appenders": [ + { + "type": "logFacesAppender", // (mandatory) appender type + "application": "MY-NODEJS", // (optional) name of the application (domain) + "remoteHost": "localhost", // (optional) logFaces server host or IP address + "port": 55201, // (optional) logFaces UDP receiver port (must use JSON format) + "layout": { // (optional) the layout to use for messages + "type": "pattern", + "pattern": "%m" + } + } + ] +}); + +var logger = log4js.getLogger("myLogger"); +logger.info("Testing message %s", "arg1"); diff --git a/node_modules/log4js/examples/loggly-appender.js b/node_modules/log4js/examples/loggly-appender.js new file mode 100644 index 0000000..1465c92 --- /dev/null +++ b/node_modules/log4js/examples/loggly-appender.js @@ -0,0 +1,24 @@ +//Note that loggly appender needs node-loggly to work. +//If you haven't got node-loggly installed, you'll get cryptic +//"cannot find module" errors when using the loggly appender +var log4js = require('../lib/log4js'); + +log4js.configure({ + "appenders": [ + { + type: "console", + category: "test" + }, + { + "type" : "loggly", + "token" : "12345678901234567890", + "subdomain": "your-subdomain", + "tags" : ["test"], + "category" : "loggly" + } + ] +}); + +var logger = log4js.getLogger("loggly"); +logger.info("Test log message"); +//logger.debug("Test log message"); \ No newline at end of file diff --git a/node_modules/log4js/examples/logstashUDP.js b/node_modules/log4js/examples/logstashUDP.js new file mode 100644 index 0000000..871f157 --- /dev/null +++ b/node_modules/log4js/examples/logstashUDP.js @@ -0,0 +1,39 @@ +var log4js = require('../lib/log4js'); + +/* + Sample logstash config: + udp { + codec => json + port => 10001 + queue_size => 2 + workers => 2 + type => myAppType + } +*/ + +log4js.configure({ + "appenders": [ + { + type: "console", + category: "myLogger" + }, + { + "host": "127.0.0.1", + "port": 10001, + "type": "logstashUDP", + "logType": "myAppType", // Optional, defaults to 'category' + "fields": { // Optional, will be added to the 'fields' object in logstash + "field1": "value1", + "field2": "value2" + }, + "layout": { + "type": "pattern", + "pattern": "%m" + }, + "category": "myLogger" + } + ] +}); + +var logger = log4js.getLogger("myLogger"); +logger.info("Test log message %s", "arg1", "arg2"); diff --git a/node_modules/log4js/examples/memory-test.js b/node_modules/log4js/examples/memory-test.js new file mode 100644 index 0000000..4cc6f2d --- /dev/null +++ b/node_modules/log4js/examples/memory-test.js @@ -0,0 +1,37 @@ +var log4js = require('../lib/log4js') +, logger +, usage +, i; + +log4js.configure( + { + appenders: [ + { + category: "memory-test" + , type: "file" + , filename: "memory-test.log" + }, + { + type: "console" + , category: "memory-usage" + }, + { + type: "file" + , filename: "memory-usage.log" + , category: "memory-usage" + , layout: { + type: "messagePassThrough" + } + } + ] + } +); +logger = log4js.getLogger("memory-test"); +usage = log4js.getLogger("memory-usage"); + +for (i=0; i < 1000000; i++) { + if ( (i % 5000) === 0) { + usage.info("%d %d", i, process.memoryUsage().rss); + } + logger.info("Doing something."); +} diff --git a/node_modules/log4js/examples/patternLayout-tokens.js b/node_modules/log4js/examples/patternLayout-tokens.js new file mode 100644 index 0000000..84b171c --- /dev/null +++ b/node_modules/log4js/examples/patternLayout-tokens.js @@ -0,0 +1,21 @@ +var log4js = require('./lib/log4js'); + +var config = { + "appenders": [ + { + "type": "console", + "layout": { + "type": "pattern", + "pattern": "%[%r (%x{pid}) %p %c -%] %m%n", + "tokens": { + "pid" : function() { return process.pid; } + } + } + } + ] + }; + +log4js.configure(config, {}); + +var logger = log4js.getLogger("app"); +logger.info("Test log message"); \ No newline at end of file diff --git a/node_modules/log4js/examples/reload.js b/node_modules/log4js/examples/reload.js new file mode 100644 index 0000000..a8ede43 --- /dev/null +++ b/node_modules/log4js/examples/reload.js @@ -0,0 +1,14 @@ +"use strict"; +var path = require('path') +, log4js = require('../lib/log4js'); + +log4js.configure( + // config reloading only works with file-based config (obvs) + path.join(__dirname, '../test/tape/test-config.json'), + { reloadSecs: 10 } +); + +log4js.getLogger('testing').info("Just testing"); +log4js.shutdown(function() { + //callback gets you notified when log4js has finished shutting down. +}); diff --git a/node_modules/log4js/examples/slack-appender.js b/node_modules/log4js/examples/slack-appender.js new file mode 100644 index 0000000..eb8d419 --- /dev/null +++ b/node_modules/log4js/examples/slack-appender.js @@ -0,0 +1,24 @@ +//Note that slack appender needs slack-node package to work. +var log4js = require('../lib/log4js'); + +log4js.configure({ + "appenders": [ + { + "type" : "slack", + "token": 'TOKEN', + "channel_id": "#CHANNEL", + "username": "USERNAME", + "format": "text", + "category" : "slack", + "icon_url" : "ICON_URL" + } + ] +}); + +var logger = log4js.getLogger("slack"); +logger.warn("Test Warn message"); +logger.info("Test Info message"); +logger.debug("Test Debug Message"); +logger.trace("Test Trace Message"); +logger.fatal("Test Fatal Message"); +logger.error("Test Error Message"); diff --git a/node_modules/log4js/examples/smtp-appender.js b/node_modules/log4js/examples/smtp-appender.js new file mode 100644 index 0000000..134ce90 --- /dev/null +++ b/node_modules/log4js/examples/smtp-appender.js @@ -0,0 +1,43 @@ +//Note that smtp appender needs nodemailer to work. +//If you haven't got nodemailer installed, you'll get cryptic +//"cannot find module" errors when using the smtp appender +var log4js = require('../lib/log4js') +, log +, logmailer +, i = 0; +log4js.configure({ + "appenders": [ + { + type: "console", + category: "test" + }, + { + "type": "smtp", + "recipients": "logfilerecipient@logging.com", + "sendInterval": 5, + "transport": "SMTP", + "SMTP": { + "host": "smtp.gmail.com", + "secureConnection": true, + "port": 465, + "auth": { + "user": "someone@gmail", + "pass": "********************" + }, + "debug": true + }, + "category": "mailer" + } + ] +}); +log = log4js.getLogger("test"); +logmailer = log4js.getLogger("mailer"); + +function doTheLogging(x) { + log.info("Logging something %d", x); + logmailer.info("Logging something %d", x); +} + +for ( ; i < 500; i++) { + doTheLogging(i); +} diff --git a/node_modules/log4js/lib/appenders/categoryFilter.js b/node_modules/log4js/lib/appenders/categoryFilter.js new file mode 100644 index 0000000..c51dbfc --- /dev/null +++ b/node_modules/log4js/lib/appenders/categoryFilter.js @@ -0,0 +1,20 @@ +"use strict"; +var log4js = require('../log4js'); + +function categoryFilter (excludes, appender) { + if (typeof(excludes) === 'string') excludes = [excludes]; + return function(logEvent) { + if (excludes.indexOf(logEvent.categoryName) === -1) { + appender(logEvent); + } + }; +} + +function configure(config, options) { + log4js.loadAppender(config.appender.type); + var appender = log4js.appenderMakers[config.appender.type](config.appender, options); + return categoryFilter(config.exclude, appender); +} + +exports.appender = categoryFilter; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/clustered.js b/node_modules/log4js/lib/appenders/clustered.js new file mode 100755 index 0000000..3af1eca --- /dev/null +++ b/node_modules/log4js/lib/appenders/clustered.js @@ -0,0 +1,153 @@ +"use strict"; + +var cluster = require('cluster'); +var log4js = require('../log4js'); + +/** + * Takes a loggingEvent object, returns string representation of it. + */ +function serializeLoggingEvent(loggingEvent) { + // JSON.stringify(new Error('test')) returns {}, which is not really useful for us. + // The following allows us to serialize errors correctly. + for (var i = 0; i < loggingEvent.data.length; i++) { + var item = loggingEvent.data[i]; + // Validate that we really are in this case + if (item && item.stack && JSON.stringify(item) === '{}') { + loggingEvent.data[i] = {stack : item.stack}; + } + } + return JSON.stringify(loggingEvent); +} + +/** + * Takes a string, returns an object with + * the correct log properties. + * + * This method has been "borrowed" from the `multiprocess` appender + * by `nomiddlename` + * (https://github.com/nomiddlename/log4js-node/blob/master/lib/appenders/multiprocess.js) + * + * Apparently, node.js serializes everything to strings when using `process.send()`, + * so we need smart deserialization that will recreate log date and level for further + * processing by log4js internals. + */ +function deserializeLoggingEvent(loggingEventString) { + + var loggingEvent; + + try { + + loggingEvent = JSON.parse(loggingEventString); + loggingEvent.startTime = new Date(loggingEvent.startTime); + loggingEvent.level = log4js.levels.toLevel(loggingEvent.level.levelStr); + // Unwrap serialized errors + for (var i = 0; i < loggingEvent.data.length; i++) { + var item = loggingEvent.data[i]; + if (item && item.stack) { + loggingEvent.data[i] = item.stack; + } + } + + } catch (e) { + + // JSON.parse failed, just log the contents probably a naughty. + loggingEvent = { + startTime: new Date(), + categoryName: 'log4js', + level: log4js.levels.ERROR, + data: [ 'Unable to parse log:', loggingEventString ] + }; + } + return loggingEvent; +} + +/** + * Creates an appender. + * + * If the current process is a master (`cluster.isMaster`), then this will be a "master appender". + * Otherwise this will be a worker appender, that just sends loggingEvents to the master process. + * + * If you are using this method directly, make sure to provide it with `config.actualAppenders` + * array of actual appender instances. + * + * Or better use `configure(config, options)` + */ +function createAppender(config) { + + if (cluster.isMaster) { + + var masterAppender = function(loggingEvent) { + + if (config.actualAppenders) { + var size = config.actualAppenders.length; + for(var i = 0; i < size; i++) { + if ( + !config.appenders[i].category || + config.appenders[i].category === loggingEvent.categoryName + ) { + // Relying on the index is not a good practice but otherwise + // the change would have been bigger. + config.actualAppenders[i](loggingEvent); + } + } + } + }; + + // Listen on new workers + cluster.on('fork', function(worker) { + + worker.on('message', function(message) { + if (message.type && message.type === '::log-message') { + var loggingEvent = deserializeLoggingEvent(message.event); + + // Adding PID metadata + loggingEvent.pid = worker.process.pid; + loggingEvent.cluster = { + master: process.pid, + worker: worker.process.pid, + workerId: worker.id + }; + + masterAppender(loggingEvent); + } + }); + + }); + + return masterAppender; + + } else { + + return function(loggingEvent) { + // If inside the worker process, then send the logger event to master. + if (cluster.isWorker) { + // console.log("worker " + cluster.worker.id + " is sending message"); + process.send({ type: '::log-message', event: serializeLoggingEvent(loggingEvent)}); + } + }; + } +} + +function configure(config, options) { + + if (config.appenders && cluster.isMaster) { + + var size = config.appenders.length; + config.actualAppenders = new Array(size); + + for(var i = 0; i < size; i++) { + + log4js.loadAppender(config.appenders[i].type); + config.actualAppenders[i] = log4js.appenderMakers[config.appenders[i].type]( + config.appenders[i], + options + ); + + } + } + + return createAppender(config); +} + +exports.appender = createAppender; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/console.js b/node_modules/log4js/lib/appenders/console.js new file mode 100644 index 0000000..20f80b1 --- /dev/null +++ b/node_modules/log4js/lib/appenders/console.js @@ -0,0 +1,21 @@ +"use strict"; +var layouts = require('../layouts') +, consoleLog = console.log.bind(console); + +function consoleAppender (layout, timezoneOffset) { + layout = layout || layouts.colouredLayout; + return function(loggingEvent) { + consoleLog(layout(loggingEvent, timezoneOffset)); + }; +} + +function configure(config) { + var layout; + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + return consoleAppender(layout, config.timezoneOffset); +} + +exports.appender = consoleAppender; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/dateFile.js b/node_modules/log4js/lib/appenders/dateFile.js new file mode 100644 index 0000000..5451d15 --- /dev/null +++ b/node_modules/log4js/lib/appenders/dateFile.js @@ -0,0 +1,90 @@ +"use strict"; +var streams = require('streamroller') +, layouts = require('../layouts') +, path = require('path') +, os = require('os') +, eol = os.EOL || '\n' +, openFiles = []; + +//close open files on process exit. +process.on('exit', function() { + openFiles.forEach(function (file) { + file.end(); + }); +}); + +/** + * File appender that rolls files according to a date pattern. + * @filename base filename. + * @pattern the format that will be added to the end of filename when rolling, + * also used to check when to roll files - defaults to '.yyyy-MM-dd' + * @layout layout function for log messages - defaults to basicLayout + * @timezoneOffset optional timezone offset in minutes - defaults to system local + */ +function appender(filename, pattern, layout, options, timezoneOffset) { + layout = layout || layouts.basicLayout; + + var logFile = new streams.DateRollingFileStream( + filename, + pattern, + options + ); + openFiles.push(logFile); + + return function(logEvent) { + logFile.write(layout(logEvent, timezoneOffset) + eol, "utf8"); + }; + +} + +function configure(config, options) { + var layout; + + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + + if (!config.alwaysIncludePattern) { + config.alwaysIncludePattern = false; + } + + if (options && options.cwd && !config.absolute) { + config.filename = path.join(options.cwd, config.filename); + } + + return appender( + config.filename, + config.pattern, + layout, + config, + config.timezoneOffset + ); +} + +function shutdown(cb) { + var completed = 0; + var error; + var complete = function(err) { + error = error || err; + completed++; + if (completed >= openFiles.length) { + cb(error); + } + }; + if (!openFiles.length) { + return cb(); + } + openFiles.forEach(function(file) { + if (!file.write(eol, "utf-8")) { + file.once('drain', function() { + file.end(complete); + }); + } else { + file.end(complete); + } + }); +} + +exports.appender = appender; +exports.configure = configure; +exports.shutdown = shutdown; diff --git a/node_modules/log4js/lib/appenders/file.js b/node_modules/log4js/lib/appenders/file.js new file mode 100644 index 0000000..021f261 --- /dev/null +++ b/node_modules/log4js/lib/appenders/file.js @@ -0,0 +1,129 @@ +"use strict"; +var debug = require('debug')('log4js:file') +, layouts = require('../layouts') +, path = require('path') +, fs = require('fs') +, streams = require('streamroller') +, os = require('os') +, eol = os.EOL || '\n' +, openFiles = [] +, levels = require('../levels'); + +//close open files on process exit. +process.on('exit', function() { + debug('Exit handler called.'); + openFiles.forEach(function (file) { + file.end(); + }); +}); + +// On SIGHUP, close and reopen all files. This allows this appender to work with +// logrotate. Note that if you are using logrotate, you should not set +// `logSize`. +process.on('SIGHUP', function() { + debug('SIGHUP handler called.'); + openFiles.forEach(function(writer) { + writer.closeTheStream(writer.openTheStream.bind(writer)); + }); +}); + +/** + * File Appender writing the logs to a text file. Supports rolling of logs by size. + * + * @param file file log messages will be written to + * @param layout a function that takes a logevent and returns a string + * (defaults to basicLayout). + * @param logSize - the maximum size (in bytes) for a log file, + * if not provided then logs won't be rotated. + * @param numBackups - the number of log files to keep after logSize + * has been reached (default 5) + * @param options - options to be passed to the underlying stream + * @param timezoneOffset - optional timezone offset in minutes (default system local) + */ +function fileAppender (file, layout, logSize, numBackups, options, timezoneOffset) { + file = path.normalize(file); + layout = layout || layouts.basicLayout; + numBackups = numBackups === undefined ? 5 : numBackups; + //there has to be at least one backup if logSize has been specified + numBackups = numBackups === 0 ? 1 : numBackups; + + debug("Creating file appender (", + file, ", ", + logSize, ", ", + numBackups, ", ", + options, ", ", + timezoneOffset, ")" + ); + var writer = openTheStream(file, logSize, numBackups, options); + + // push file to the stack of open handlers + openFiles.push(writer); + + return function(loggingEvent) { + writer.write(layout(loggingEvent, timezoneOffset) + eol, "utf8"); + }; + +} + +function openTheStream(file, fileSize, numFiles, options) { + var stream = new streams.RollingFileStream( + file, + fileSize, + numFiles, + options + ); + stream.on("error", function (err) { + console.error("log4js.fileAppender - Writing to file %s, error happened ", file, err); + }); + return stream; +} + + +function configure(config, options) { + var layout; + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + + if (options && options.cwd && !config.absolute) { + config.filename = path.join(options.cwd, config.filename); + } + + return fileAppender( + config.filename, + layout, + config.maxLogSize, + config.backups, + config, + config.timezoneOffset + ); +} + +function shutdown(cb) { + var completed = 0; + var error; + var complete = function(err) { + error = error || err; + completed++; + if (completed >= openFiles.length) { + cb(error); + } + }; + if (!openFiles.length) { + return cb(); + } + openFiles.forEach(function(file) { + var stream = file; + if (!stream.write(eol, "utf-8")) { + stream.once('drain', function() { + stream.end(complete); + }); + } else { + stream.end(complete); + } + }); +} + +exports.appender = fileAppender; +exports.configure = configure; +exports.shutdown = shutdown; diff --git a/node_modules/log4js/lib/appenders/fileSync.js b/node_modules/log4js/lib/appenders/fileSync.js new file mode 100755 index 0000000..ef4bfbb --- /dev/null +++ b/node_modules/log4js/lib/appenders/fileSync.js @@ -0,0 +1,194 @@ +"use strict"; +var debug = require('debug')('log4js:fileSync') +, layouts = require('../layouts') +, path = require('path') +, fs = require('fs') +, os = require('os') +, eol = os.EOL || '\n' +; + +function RollingFileSync (filename, size, backups, options) { + debug("In RollingFileStream"); + + function throwErrorIfArgumentsAreNotValid() { + if (!filename || !size || size <= 0) { + throw new Error("You must specify a filename and file size"); + } + } + + throwErrorIfArgumentsAreNotValid(); + + this.filename = filename; + this.size = size; + this.backups = backups || 1; + this.options = options || { encoding: 'utf8', mode: parseInt('0644', 8), flags: 'a' }; + this.currentSize = 0; + + function currentFileSize(file) { + var fileSize = 0; + try { + fileSize = fs.statSync(file).size; + } catch (e) { + // file does not exist + fs.appendFileSync(filename, ''); + } + return fileSize; + } + + this.currentSize = currentFileSize(this.filename); +} + +RollingFileSync.prototype.shouldRoll = function() { + debug("should roll with current size %d, and max size %d", this.currentSize, this.size); + return this.currentSize >= this.size; +}; + +RollingFileSync.prototype.roll = function(filename) { + var that = this, + nameMatcher = new RegExp('^' + path.basename(filename)); + + function justTheseFiles (item) { + return nameMatcher.test(item); + } + + function index(filename_) { + return parseInt(filename_.substring((path.basename(filename) + '.').length), 10) || 0; + } + + function byIndex(a, b) { + if (index(a) > index(b)) { + return 1; + } else if (index(a) < index(b) ) { + return -1; + } else { + return 0; + } + } + + function increaseFileIndex (fileToRename) { + var idx = index(fileToRename); + debug('Index of ' + fileToRename + ' is ' + idx); + if (idx < that.backups) { + //on windows, you can get a EEXIST error if you rename a file to an existing file + //so, we'll try to delete the file we're renaming to first + try { + fs.unlinkSync(filename + '.' + (idx+1)); + } catch(e) { + //ignore err: if we could not delete, it's most likely that it doesn't exist + } + + debug('Renaming ' + fileToRename + ' -> ' + filename + '.' + (idx+1)); + fs.renameSync(path.join(path.dirname(filename), fileToRename), filename + '.' + (idx + 1)); + } + } + + function renameTheFiles() { + //roll the backups (rename file.n to file.n+1, where n <= numBackups) + debug("Renaming the old files"); + + var files = fs.readdirSync(path.dirname(filename)); + files.filter(justTheseFiles).sort(byIndex).reverse().forEach(increaseFileIndex); + } + + debug("Rolling, rolling, rolling"); + renameTheFiles(); +}; + +RollingFileSync.prototype.write = function(chunk, encoding) { + var that = this; + + + function writeTheChunk() { + debug("writing the chunk to the file"); + that.currentSize += chunk.length; + fs.appendFileSync(that.filename, chunk); + } + + debug("in write"); + + + if (this.shouldRoll()) { + this.currentSize = 0; + this.roll(this.filename); + } + + writeTheChunk(); +}; + + +/** + * File Appender writing the logs to a text file. Supports rolling of logs by size. + * + * @param file file log messages will be written to + * @param layout a function that takes a logevent and returns a string + * (defaults to basicLayout). + * @param logSize - the maximum size (in bytes) for a log file, + * if not provided then logs won't be rotated. + * @param numBackups - the number of log files to keep after logSize + * has been reached (default 5) + * @param timezoneOffset - optional timezone offset in minutes + * (default system local) + */ +function fileAppender (file, layout, logSize, numBackups, timezoneOffset) { + debug("fileSync appender created"); + var bytesWritten = 0; + file = path.normalize(file); + layout = layout || layouts.basicLayout; + numBackups = numBackups === undefined ? 5 : numBackups; + //there has to be at least one backup if logSize has been specified + numBackups = numBackups === 0 ? 1 : numBackups; + + function openTheStream(file, fileSize, numFiles) { + var stream; + + if (fileSize) { + stream = new RollingFileSync( + file, + fileSize, + numFiles + ); + } else { + stream = (function(f) { + // create file if it doesn't exist + if (!fs.existsSync(f)) + fs.appendFileSync(f, ''); + + return { + write: function(data) { + fs.appendFileSync(f, data); + } + }; + })(file); + } + + return stream; + } + + var logFile = openTheStream(file, logSize, numBackups); + + return function(loggingEvent) { + logFile.write(layout(loggingEvent, timezoneOffset) + eol); + }; +} + +function configure(config, options) { + var layout; + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + + if (options && options.cwd && !config.absolute) { + config.filename = path.join(options.cwd, config.filename); + } + + return fileAppender( + config.filename, + layout, + config.maxLogSize, + config.backups, + config.timezoneOffset + ); +} + +exports.appender = fileAppender; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/gelf.js b/node_modules/log4js/lib/appenders/gelf.js new file mode 100644 index 0000000..4f4093d --- /dev/null +++ b/node_modules/log4js/lib/appenders/gelf.js @@ -0,0 +1,155 @@ +"use strict"; +var zlib = require('zlib'); +var layouts = require('../layouts'); +var levels = require('../levels'); +var dgram = require('dgram'); +var util = require('util'); +var debug = require('debug')('log4js:gelf'); + +var LOG_EMERG=0; // system is unusable +var LOG_ALERT=1; // action must be taken immediately +var LOG_CRIT=2; // critical conditions +var LOG_ERR=3; // error conditions +var LOG_ERROR=3; // because people WILL typo +var LOG_WARNING=4; // warning conditions +var LOG_NOTICE=5; // normal, but significant, condition +var LOG_INFO=6; // informational message +var LOG_DEBUG=7; // debug-level message + +var levelMapping = {}; +levelMapping[levels.ALL] = LOG_DEBUG; +levelMapping[levels.TRACE] = LOG_DEBUG; +levelMapping[levels.DEBUG] = LOG_DEBUG; +levelMapping[levels.INFO] = LOG_INFO; +levelMapping[levels.WARN] = LOG_WARNING; +levelMapping[levels.ERROR] = LOG_ERR; +levelMapping[levels.FATAL] = LOG_CRIT; + +var client; + +/** + * GELF appender that supports sending UDP packets to a GELF compatible server such as Graylog + * + * @param layout a function that takes a logevent and returns a string (defaults to none). + * @param host - host to which to send logs (default:localhost) + * @param port - port at which to send logs to (default:12201) + * @param hostname - hostname of the current host (default:os hostname) + * @param facility - facility to log to (default:nodejs-server) + */ + /* jshint maxstatements:21 */ +function gelfAppender (layout, host, port, hostname, facility) { + var config, customFields; + if (typeof(host) === 'object') { + config = host; + host = config.host; + port = config.port; + hostname = config.hostname; + facility = config.facility; + customFields = config.customFields; + } + + host = host || 'localhost'; + port = port || 12201; + hostname = hostname || require('os').hostname(); + layout = layout || layouts.messagePassThroughLayout; + + var defaultCustomFields = customFields || {}; + + if(facility) { + defaultCustomFields._facility = facility; + } + + client = dgram.createSocket("udp4"); + + process.on('exit', function() { + if (client) client.close(); + }); + + /** + * Add custom fields (start with underscore ) + * - if the first object passed to the logger contains 'GELF' field, + * copy the underscore fields to the message + * @param loggingEvent + * @param msg + */ + function addCustomFields(loggingEvent, msg){ + + /* append defaultCustomFields firsts */ + Object.keys(defaultCustomFields).forEach(function(key) { + // skip _id field for graylog2, skip keys not starts with UNDERSCORE + if (key.match(/^_/) && key !== "_id") { + msg[key] = defaultCustomFields[key]; + } + }); + + /* append custom fields per message */ + var data = loggingEvent.data; + if (!Array.isArray(data) || data.length === 0) return; + var firstData = data[0]; + + if (!firstData.GELF) return; // identify with GELF field defined + // Remove the GELF key, some gelf supported logging systems drop the message with it + delete firstData.GELF; + Object.keys(firstData).forEach(function(key) { + // skip _id field for graylog2, skip keys not starts with UNDERSCORE + if (key.match(/^_/) || key !== "_id") { + msg[key] = firstData[key]; + } + }); + + /* the custom field object should be removed, so it will not be looged by the later appenders */ + loggingEvent.data.shift(); + } + + function preparePacket(loggingEvent) { + var msg = {}; + addCustomFields(loggingEvent, msg); + msg.short_message = layout(loggingEvent); + + msg.version="1.1"; + msg.timestamp = msg.timestamp || new Date().getTime() / 1000; // log should use millisecond + msg.host = hostname; + msg.level = levelMapping[loggingEvent.level || levels.DEBUG]; + return msg; + } + + function sendPacket(packet) { + client.send(packet, 0, packet.length, port, host, function(err) { + if (err) { console.error(err); } + }); + } + + return function(loggingEvent) { + var message = preparePacket(loggingEvent); + zlib.gzip(new Buffer(JSON.stringify(message)), function(err, packet) { + if (err) { + console.error(err.stack); + } else { + if (packet.length > 8192) { + debug("Message packet length (" + packet.length + ") is larger than 8k. Not sending"); + } else { + sendPacket(packet); + } + } + }); + }; +} + +function configure(config) { + var layout; + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + return gelfAppender(layout, config); +} + +function shutdown(cb) { + if (client) { + client.close(cb); + client = null; + } +} + +exports.appender = gelfAppender; +exports.configure = configure; +exports.shutdown = shutdown; diff --git a/node_modules/log4js/lib/appenders/hipchat.js b/node_modules/log4js/lib/appenders/hipchat.js new file mode 100644 index 0000000..3fd65df --- /dev/null +++ b/node_modules/log4js/lib/appenders/hipchat.js @@ -0,0 +1,90 @@ +"use strict"; + +var hipchat = require('hipchat-notifier'); +var layouts = require('../layouts'); + +exports.name = 'hipchat'; +exports.appender = hipchatAppender; +exports.configure = hipchatConfigure; + +/** + @invoke as + + log4js.configure({ + "appenders": [ + { + "type" : "hipchat", + "hipchat_token": "< User token with Notification Privileges >", + "hipchat_room": "< Room ID or Name >", + // optionl + "hipchat_from": "[ additional from label ]", + "hipchat_notify": "[ notify boolean to bug people ]", + "hipchat_host" : "api.hipchat.com" + } + ] + }); + + var logger = log4js.getLogger("hipchat"); + logger.warn("Test Warn message"); + + @invoke + */ + +function hipchatNotifierResponseCallback(err, response, body){ + if(err) { + throw err; + } +} + +function hipchatAppender(config) { + + var notifier = hipchat.make(config.hipchat_room, config.hipchat_token); + + // @lint W074 This function's cyclomatic complexity is too high. (10) + return function(loggingEvent){ + + var notifierFn; + + notifier.setRoom(config.hipchat_room); + notifier.setFrom(config.hipchat_from || ''); + notifier.setNotify(config.hipchat_notify || false); + + if(config.hipchat_host) { + notifier.setHost(config.hipchat_host); + } + + switch (loggingEvent.level.toString()) { + case "TRACE": + case "DEBUG": + notifierFn = "info"; + break; + case "WARN": + notifierFn = "warning"; + break; + case "ERROR": + case "FATAL": + notifierFn = "failure"; + break; + default: + notifierFn = "success"; + } + + // @TODO, re-work in timezoneOffset ? + var layoutMessage = config.layout(loggingEvent); + + // dispatch hipchat api request, do not return anything + // [overide hipchatNotifierResponseCallback] + notifier[notifierFn](layoutMessage, config.hipchat_response_callback || + hipchatNotifierResponseCallback); + }; +} + +function hipchatConfigure(config) { + var layout; + + if (!config.layout) { + config.layout = layouts.messagePassThroughLayout; + } + + return hipchatAppender(config, layout); +} diff --git a/node_modules/log4js/lib/appenders/logFacesAppender.js b/node_modules/log4js/lib/appenders/logFacesAppender.js new file mode 100644 index 0000000..efe6858 --- /dev/null +++ b/node_modules/log4js/lib/appenders/logFacesAppender.js @@ -0,0 +1,125 @@ +/** +* logFaces appender sends JSON formatted log events to logFaces receivers. +* There are two types of receivers supported - raw UDP sockets (for server side apps), +* and HTTP (for client side apps). Depending on the usage, this appender +* requires either of the two: +* +* For UDP require 'dgram', see 'https://nodejs.org/api/dgram.html' +* For HTTP require 'axios', see 'https://www.npmjs.com/package/axios' +* +* Make sure your project have relevant dependancy installed before using this appender. +*/ + +"use strict"; +var util = require('util'); +var context = {}; + +function datagram(config){ + var sock = require('dgram').createSocket('udp4'); + var host = config.remoteHost || "127.0.0.1"; + var port = config.port || 55201; + + return function(event){ + var buff = new Buffer(JSON.stringify(event)); + sock.send(buff, 0, buff.length, port, host, function(err, bytes) { + if(err){ + console.error("log4js.logFacesAppender failed to %s:%d, error: %s", + host, port, err); + } + }); + }; +} + +function servlet(config){ + var axios = require('axios').create(); + axios.defaults.baseURL = config.url; + axios.defaults.timeout = config.timeout || 5000; + axios.defaults.headers = {'Content-Type': 'application/json'}; + axios.defaults.withCredentials = true; + + return function(lfsEvent){ + axios.post("", lfsEvent) + .then(function(response){ + if(response.status != 200){ + console.error("log4js.logFacesAppender post to %s failed: %d", + config.url, response.status); + } + }) + .catch(function(response){ + console.error("log4js.logFacesAppender post to %s excepted: %s", + config.url, response.status); + }); + }; +} + +/** +* For UDP (node.js) use the following configuration params: +* { +* "type": "logFacesAppender", // must be present for instantiation +* "application": "LFS-TEST", // name of the application (domain) +* "remoteHost": "127.0.0.1", // logFaces server address (hostname) +* "port": 55201 // UDP receiver listening port +* } +* +* For HTTP (browsers or node.js) use the following configuration params: +* { +* "type": "logFacesAppender", // must be present for instantiation +* "application": "LFS-TEST", // name of the application (domain) +* "url": "http://lfs-server/logs", // logFaces receiver servlet URL +* } +*/ +function logFacesAppender(config) { + var send = config.send; + if(send === undefined){ + send = (config.url === undefined) ? datagram(config) : servlet(config); + } + + return function log(event) { + // convert to logFaces compact json format + var lfsEvent = { + a: config.application || "", // application name + t: event.startTime.getTime(), // time stamp + p: event.level.levelStr, // level (priority) + g: event.categoryName, // logger name + m: format(event.data) // message text + }; + + // add context variables if exist + Object.keys(context).forEach(function(key) { + lfsEvent['p_' + key] = context[key]; + }); + + // send to server + send(lfsEvent); + }; +} + +function configure(config) { + return logFacesAppender(config); +} + +function setContext(key, value){ + context[key] = value; +} + +function format(logData) { + var data = Array.isArray(logData) ? + logData : Array.prototype.slice.call(arguments); + return util.format.apply(util, wrapErrorsWithInspect(data)); +} + +function wrapErrorsWithInspect(items) { + return items.map(function(item) { + if ((item instanceof Error) && item.stack) { + return { inspect: function() { + return util.format(item) + '\n' + item.stack; + }}; + } else { + return item; + } + }); +} + +exports.appender = logFacesAppender; +exports.configure = configure; +exports.setContext = setContext; diff --git a/node_modules/log4js/lib/appenders/logLevelFilter.js b/node_modules/log4js/lib/appenders/logLevelFilter.js new file mode 100644 index 0000000..cdd273f --- /dev/null +++ b/node_modules/log4js/lib/appenders/logLevelFilter.js @@ -0,0 +1,23 @@ +"use strict"; +var levels = require('../levels') +, log4js = require('../log4js'); + +function logLevelFilter (minLevelString, maxLevelString, appender) { + var minLevel = levels.toLevel(minLevelString); + var maxLevel = levels.toLevel(maxLevelString, levels.FATAL); + return function(logEvent) { + var eventLevel = logEvent.level; + if (eventLevel.isGreaterThanOrEqualTo(minLevel) && eventLevel.isLessThanOrEqualTo(maxLevel)) { + appender(logEvent); + } + }; +} + +function configure(config, options) { + log4js.loadAppender(config.appender.type); + var appender = log4js.appenderMakers[config.appender.type](config.appender, options); + return logLevelFilter(config.level, config.maxLevel, appender); +} + +exports.appender = logLevelFilter; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/loggly.js b/node_modules/log4js/lib/appenders/loggly.js new file mode 100644 index 0000000..b2da578 --- /dev/null +++ b/node_modules/log4js/lib/appenders/loggly.js @@ -0,0 +1,114 @@ +'use strict'; +var layouts = require('../layouts') +, loggly = require('loggly') +, os = require('os') +, passThrough = layouts.messagePassThroughLayout +, openRequests = 0 +, shutdownCB; + +function isAnyObject(value) { + return value !== null && (typeof value === 'object' || typeof value === 'function'); +} + +function numKeys(o) { + var res = 0; + for (var k in o) { + if (o.hasOwnProperty(k)) res++; + } + return res; +} + +/** + * @param msg - array of args for logging. + * @returns { deTaggedMsg: [], additionalTags: [] } + */ +function processTags(msgListArgs) { + var msgList = (msgListArgs.length === 1 ? [msgListArgs[0]] : Array.apply(null, msgListArgs)); + + return msgList.reduce(function (accum, element, currentIndex, array) { + if (isAnyObject(element) && Array.isArray(element.tags) && numKeys(element) == 1) { + accum.additionalTags = accum.additionalTags.concat(element.tags); + } else { + accum.deTaggedData.push(element); + } + return accum; + }, { deTaggedData: [], additionalTags: [] }); +} + +/** + * Loggly Appender. Sends logging events to Loggly using node-loggly, optionally adding tags. + * + * This appender will scan the msg from the logging event, and pull out any argument of the + * shape `{ tags: [] }` so that it's possibleto add tags in a normal logging call. + * + * For example: + * + * logger.info({ tags: ['my-tag-1', 'my-tag-2'] }, 'Some message', someObj, ...) + * + * And then this appender will remove the tags param and append it to the config.tags. + * + * @param config object with loggly configuration data + * { + * token: 'your-really-long-input-token', + * subdomain: 'your-subdomain', + * tags: ['loggly-tag1', 'loggly-tag2', .., 'loggly-tagn'] + * } + * @param layout a function that takes a logevent and returns a string (defaults to objectLayout). + */ +function logglyAppender(config, layout) { + var client = loggly.createClient(config); + if(!layout) layout = passThrough; + + return function(loggingEvent) { + var result = processTags(loggingEvent.data); + var deTaggedData = result.deTaggedData; + var additionalTags = result.additionalTags; + + // Replace the data property with the deTaggedData + loggingEvent.data = deTaggedData; + + var msg = layout(loggingEvent); + + openRequests++; + + client.log({ + msg: msg, + level: loggingEvent.level.levelStr, + category: loggingEvent.categoryName, + hostname: os.hostname().toString(), + }, additionalTags, function (error, result) { + if (error) { + console.error("log4js.logglyAppender - error occurred: ", error); + } + + openRequests--; + + if (shutdownCB && openRequests === 0) { + shutdownCB(); + + shutdownCB = undefined; + } + }); + }; +} + +function configure(config) { + var layout; + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + return logglyAppender(config, layout); +} + +function shutdown (cb) { + if (openRequests === 0) { + cb(); + } else { + shutdownCB = cb; + } +} + +exports.name = 'loggly'; +exports.appender = logglyAppender; +exports.configure = configure; +exports.shutdown = shutdown; diff --git a/node_modules/log4js/lib/appenders/logstashUDP.js b/node_modules/log4js/lib/appenders/logstashUDP.js new file mode 100644 index 0000000..a0e3df2 --- /dev/null +++ b/node_modules/log4js/lib/appenders/logstashUDP.js @@ -0,0 +1,69 @@ +"use strict"; +var layouts = require('../layouts') +, dgram = require('dgram') +, util = require('util'); + +function logstashUDP (config, layout) { + var udp = dgram.createSocket('udp4'); + var type = config.logType ? config.logType : config.category; + layout = layout || layouts.dummyLayout; + if(!config.fields) { + config.fields = {}; + } + return function log(loggingEvent) { + + /* + https://gist.github.com/jordansissel/2996677 + { + "message" => "hello world", + "@version" => "1", + "@timestamp" => "2014-04-22T23:03:14.111Z", + "type" => "stdin", + "host" => "hello.local" + } + @timestamp is the ISO8601 high-precision timestamp for the event. + @version is the version number of this json schema + Every other field is valid and fine. + */ + + if (loggingEvent.data.length > 1) { + var secondEvData = loggingEvent.data[1]; + for (var k in secondEvData) { + config.fields[k] = secondEvData[k]; + } + } + config.fields.level = loggingEvent.level.levelStr; + config.fields.category = loggingEvent.categoryName; + + var logObject = { + "@version" : "1", + "@timestamp" : (new Date(loggingEvent.startTime)).toISOString(), + "type" : config.logType ? config.logType : config.category, + "message" : layout(loggingEvent), + "fields" : config.fields + }; + sendLog(udp, config.host, config.port, logObject); + }; +} + +function sendLog(udp, host, port, logObject) { + var buffer = new Buffer(JSON.stringify(logObject)); + udp.send(buffer, 0, buffer.length, port, host, function(err, bytes) { + if(err) { + console.error( + "log4js.logstashUDP - %s:%p Error: %s", host, port, util.inspect(err) + ); + } + }); +} + +function configure(config) { + var layout; + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + return logstashUDP(config, layout); +} + +exports.appender = logstashUDP; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/mailgun.js b/node_modules/log4js/lib/appenders/mailgun.js new file mode 100644 index 0000000..c2f3f56 --- /dev/null +++ b/node_modules/log4js/lib/appenders/mailgun.js @@ -0,0 +1,43 @@ +"use strict"; +var layouts = require('../layouts'); +var layout; +var config; +var mailgun; + +function mailgunAppender(_config, _layout) { + + config = _config; + layout = _layout || layouts.basicLayout; + + return function (loggingEvent) { + + var data = { + from: _config.from, + to: _config.to, + subject: _config.subject, + text: layout(loggingEvent, config.timezoneOffset) + }; + + mailgun.messages().send(data, function (error, body) { + if (error !== null) console.error("log4js.mailgunAppender - Error happened", error); + }); + }; +} + +function configure(_config) { + config = _config; + + if (_config.layout) { + layout = layouts.layout(_config.layout.type, _config.layout); + } + + mailgun = require('mailgun-js')({ + apiKey: _config.apikey, + domain: _config.domain + }); + + return mailgunAppender(_config, layout); +} + +exports.appender = mailgunAppender; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/multiprocess.js b/node_modules/log4js/lib/appenders/multiprocess.js new file mode 100644 index 0000000..0250378 --- /dev/null +++ b/node_modules/log4js/lib/appenders/multiprocess.js @@ -0,0 +1,157 @@ +"use strict"; +var log4js = require('../log4js') +, debug = require('debug')('log4js:multiprocess') +, net = require('net') +, END_MSG = '__LOG4JS__' +, servers = []; + +/** + * Creates a server, listening on config.loggerPort, config.loggerHost. + * Output goes to config.actualAppender (config.appender is used to + * set up that appender). + */ +function logServer(config) { + + /** + * Takes a utf-8 string, returns an object with + * the correct log properties. + */ + function deserializeLoggingEvent(clientSocket, msg) { + var loggingEvent; + try { + loggingEvent = JSON.parse(msg); + loggingEvent.startTime = new Date(loggingEvent.startTime); + loggingEvent.level = log4js.levels.toLevel(loggingEvent.level.levelStr); + } catch (e) { + // JSON.parse failed, just log the contents probably a naughty. + loggingEvent = { + startTime: new Date(), + categoryName: 'log4js', + level: log4js.levels.ERROR, + data: [ 'Unable to parse log:', msg ] + }; + } + + loggingEvent.remoteAddress = clientSocket.remoteAddress; + loggingEvent.remotePort = clientSocket.remotePort; + + return loggingEvent; + } + + var actualAppender = config.actualAppender, + server = net.createServer(function serverCreated(clientSocket) { + clientSocket.setEncoding('utf8'); + var logMessage = ''; + + function logTheMessage(msg) { + if (logMessage.length > 0) { + actualAppender(deserializeLoggingEvent(clientSocket, msg)); + } + } + + function chunkReceived(chunk) { + var event; + logMessage += chunk || ''; + if (logMessage.indexOf(END_MSG) > -1) { + event = logMessage.substring(0, logMessage.indexOf(END_MSG)); + logTheMessage(event); + logMessage = logMessage.substring(event.length + END_MSG.length) || ''; + //check for more, maybe it was a big chunk + chunkReceived(); + } + } + + clientSocket.on('data', chunkReceived); + clientSocket.on('end', chunkReceived); + }); + + server.listen(config.loggerPort || 5000, config.loggerHost || 'localhost', function() { + servers.push(server); + //allow the process to exit, if this is the only socket active + server.unref(); + }); + + return actualAppender; +} + +function workerAppender(config) { + var canWrite = false, + buffer = [], + socket; + + createSocket(); + + function createSocket() { + socket = net.createConnection(config.loggerPort || 5000, config.loggerHost || 'localhost'); + socket.on('connect', function() { + emptyBuffer(); + canWrite = true; + }); + socket.on('timeout', socket.end.bind(socket)); + //don't bother listening for 'error', 'close' gets called after that anyway + socket.on('close', createSocket); + } + + function emptyBuffer() { + var evt; + while ((evt = buffer.shift())) { + write(evt); + } + } + + function write(loggingEvent) { + // JSON.stringify(new Error('test')) returns {}, which is not really useful for us. + // The following allows us to serialize errors correctly. + // Validate that we really are in this case + if (loggingEvent && loggingEvent.stack && JSON.stringify(loggingEvent) === '{}') { + loggingEvent = {stack : loggingEvent.stack}; + } + socket.write(JSON.stringify(loggingEvent), 'utf8'); + socket.write(END_MSG, 'utf8'); + } + + return function log(loggingEvent) { + if (canWrite) { + write(loggingEvent); + } else { + buffer.push(loggingEvent); + } + }; +} + +function createAppender(config) { + if (config.mode === 'master') { + return logServer(config); + } else { + return workerAppender(config); + } +} + +function configure(config, options) { + var actualAppender; + if (config.appender && config.mode === 'master') { + log4js.loadAppender(config.appender.type); + actualAppender = log4js.appenderMakers[config.appender.type](config.appender, options); + config.actualAppender = actualAppender; + } + return createAppender(config); +} + +function shutdown(done) { + var toBeClosed = servers.length; + debug("multiprocess shutdown with ", toBeClosed, " servers to close."); + servers.forEach(function(server) { + server.close(function() { + debug("server closed."); + toBeClosed--; + if (toBeClosed < 1) { + debug("all servers closed."); + done(); + } + }); + }); +} + +exports.appender = createAppender; +exports.configure = configure; +exports.shutdown = shutdown; diff --git a/node_modules/log4js/lib/appenders/slack.js b/node_modules/log4js/lib/appenders/slack.js new file mode 100644 index 0000000..da8a2c1 --- /dev/null +++ b/node_modules/log4js/lib/appenders/slack.js @@ -0,0 +1,44 @@ +"use strict"; +var Slack = require('slack-node'); +var layouts = require('../layouts'); +var layout; + +var slack, config; + +function slackAppender(_config, _layout) { + + layout = _layout || layouts.basicLayout; + + return function (loggingEvent) { + + var data = { + channel_id: _config.channel_id, + text: layout(loggingEvent, _config.timezoneOffset), + icon_url: _config.icon_url, + username: _config.username + }; + + slack.api('chat.postMessage', { + channel: data.channel_id, + text: data.text, + icon_url: data.icon_url,username: data.username}, function (err, response) { + if (err) { throw err; } + }); + + }; +} + +function configure(_config) { + + if (_config.layout) { + layout = layouts.layout(_config.layout.type, _config.layout); + } + + slack = new Slack(_config.token); + + return slackAppender(_config, layout); +} + +exports.name = 'slack'; +exports.appender = slackAppender; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/smtp.js b/node_modules/log4js/lib/appenders/smtp.js new file mode 100644 index 0000000..161e72c --- /dev/null +++ b/node_modules/log4js/lib/appenders/smtp.js @@ -0,0 +1,152 @@ +"use strict"; + +var layouts = require("../layouts"); +var mailer = require("nodemailer"); +var os = require('os'); + +var logEventBuffer = []; +var subjectLayout; +var layout; + +var unsentCount = 0; +var shutdownTimeout; + +var sendInterval; +var sendTimer; + +var config; + +function sendBuffer() { + if (logEventBuffer.length > 0) { + + var transportOpts = getTransportOptions(config); + var transport = mailer.createTransport(transportOpts); + var firstEvent = logEventBuffer[0]; + var body = ""; + var count = logEventBuffer.length; + while (logEventBuffer.length > 0) { + body += layout(logEventBuffer.shift(), config.timezoneOffset) + "\n"; + } + + var msg = { + to: config.recipients, + subject: config.subject || subjectLayout(firstEvent), + headers: {"Hostname": os.hostname()} + }; + + if (true === config.attachment.enable) { + msg[config.html ? "html" : "text"] = config.attachment.message; + msg.attachments = [ + { + filename: config.attachment.filename, + contentType: 'text/x-log', + content: body + } + ]; + } else { + msg[config.html ? "html" : "text"] = body; + } + + if (config.sender) { + msg.from = config.sender; + } + transport.sendMail(msg, function (error) { + if (error) { + console.error("log4js.smtpAppender - Error happened", error); + } + transport.close(); + unsentCount -= count; + }); + } +} + +function getTransportOptions() { + var transportOpts = null; + if (config.SMTP) { + transportOpts = config.SMTP; + } else if (config.transport) { + var plugin = config.transport.plugin || 'smtp'; + var transportModule = 'nodemailer-' + plugin + '-transport'; + var transporter = require(transportModule); + transportOpts = transporter(config.transport.options); + } + + return transportOpts; +} + +function scheduleSend() { + if (!sendTimer) { + sendTimer = setTimeout(function () { + sendTimer = null; + sendBuffer(); + }, sendInterval); + } +} + +/** + * SMTP Appender. Sends logging events using SMTP protocol. + * It can either send an email on each event or group several + * logging events gathered during specified interval. + * + * @param _config appender configuration data + * config.sendInterval time between log emails (in seconds), if 0 + * then every event sends an email + * config.shutdownTimeout time to give up remaining emails (in seconds; defaults to 5). + * @param _layout a function that takes a logevent and returns a string (defaults to basicLayout). + */ +function smtpAppender(_config, _layout) { + config = _config; + + if (!config.attachment) { + config.attachment = {}; + } + + config.attachment.enable = !!config.attachment.enable; + config.attachment.message = config.attachment.message || "See logs as attachment"; + config.attachment.filename = config.attachment.filename || "default.log"; + layout = _layout || layouts.basicLayout; + subjectLayout = layouts.messagePassThroughLayout; + sendInterval = config.sendInterval * 1000 || 0; + + shutdownTimeout = ('shutdownTimeout' in config ? config.shutdownTimeout : 5) * 1000; + + return function (loggingEvent) { + unsentCount++; + logEventBuffer.push(loggingEvent); + if (sendInterval > 0) { + scheduleSend(); + } else { + sendBuffer(); + } + }; +} + +function configure(_config) { + config = _config; + if (_config.layout) { + layout = layouts.layout(_config.layout.type, _config.layout); + } + return smtpAppender(_config, layout); +} + +function shutdown(cb) { + if (shutdownTimeout > 0) { + setTimeout(function () { + if (sendTimer) + clearTimeout(sendTimer); + sendBuffer(); + }, shutdownTimeout); + } + (function checkDone() { + if (unsentCount > 0) { + setTimeout(checkDone, 100); + } else { + cb(); + } + })(); +} + +exports.name = "smtp"; +exports.appender = smtpAppender; +exports.configure = configure; +exports.shutdown = shutdown; diff --git a/node_modules/log4js/lib/appenders/stderr.js b/node_modules/log4js/lib/appenders/stderr.js new file mode 100644 index 0000000..c733865 --- /dev/null +++ b/node_modules/log4js/lib/appenders/stderr.js @@ -0,0 +1,21 @@ +"use strict"; + +var layouts = require('../layouts'); + +function stderrAppender(layout, timezoneOffset) { + layout = layout || layouts.colouredLayout; + return function(loggingEvent) { + process.stderr.write(layout(loggingEvent, timezoneOffset) + '\n'); + }; +} + +function configure(config) { + var layout; + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + return stderrAppender(layout, config.timezoneOffset); +} + +exports.appender = stderrAppender; +exports.configure = configure; diff --git a/node_modules/log4js/lib/appenders/stdout.js b/node_modules/log4js/lib/appenders/stdout.js new file mode 100644 index 0000000..888b916 --- /dev/null +++ b/node_modules/log4js/lib/appenders/stdout.js @@ -0,0 +1,21 @@ +"use strict"; + +var layouts = require('../layouts'); + +function stdoutAppender(layout, timezoneOffset) { + layout = layout || layouts.colouredLayout; + return function(loggingEvent) { + process.stdout.write(layout(loggingEvent, timezoneOffset) + '\n'); + }; +} + +function configure(config) { + var layout; + if (config.layout) { + layout = layouts.layout(config.layout.type, config.layout); + } + return stdoutAppender(layout, config.timezoneOffset); +} + +exports.appender = stdoutAppender; +exports.configure = configure; diff --git a/node_modules/log4js/lib/connect-logger.js b/node_modules/log4js/lib/connect-logger.js new file mode 100755 index 0000000..2bded77 --- /dev/null +++ b/node_modules/log4js/lib/connect-logger.js @@ -0,0 +1,262 @@ +"use strict"; +var levels = require("./levels"); +var DEFAULT_FORMAT = ':remote-addr - -' + + ' ":method :url HTTP/:http-version"' + + ' :status :content-length ":referrer"' + + ' ":user-agent"'; +/** + * Log requests with the given `options` or a `format` string. + * + * Options: + * + * - `format` Format string, see below for tokens + * - `level` A log4js levels instance. Supports also 'auto' + * + * Tokens: + * + * - `:req[header]` ex: `:req[Accept]` + * - `:res[header]` ex: `:res[Content-Length]` + * - `:http-version` + * - `:response-time` + * - `:remote-addr` + * - `:date` + * - `:method` + * - `:url` + * - `:referrer` + * - `:user-agent` + * - `:status` + * + * @param {String|Function|Object} format or options + * @return {Function} + * @api public + */ + +function getLogger(logger4js, options) { + if ('object' == typeof options) { + options = options || {}; + } else if (options) { + options = { format: options }; + } else { + options = {}; + } + + var thislogger = logger4js + , level = levels.toLevel(options.level, levels.INFO) + , fmt = options.format || DEFAULT_FORMAT + , nolog = options.nolog ? createNoLogCondition(options.nolog) : null; + + return function (req, res, next) { + // mount safety + if (req._logging) return next(); + + // nologs + if (nolog && nolog.test(req.originalUrl)) return next(); + if (thislogger.isLevelEnabled(level) || options.level === 'auto') { + + var start = new Date() + , statusCode + , writeHead = res.writeHead + , url = req.originalUrl; + + // flag as logging + req._logging = true; + + // proxy for statusCode. + res.writeHead = function(code, headers){ + res.writeHead = writeHead; + res.writeHead(code, headers); + res.__statusCode = statusCode = code; + res.__headers = headers || {}; + + //status code response level handling + if(options.level === 'auto'){ + level = levels.INFO; + if(code >= 300) level = levels.WARN; + if(code >= 400) level = levels.ERROR; + } else { + level = levels.toLevel(options.level, levels.INFO); + } + }; + + //hook on end request to emit the log entry of the HTTP request. + res.on('finish', function() { + res.responseTime = new Date() - start; + //status code response level handling + if(res.statusCode && options.level === 'auto'){ + level = levels.INFO; + if(res.statusCode >= 300) level = levels.WARN; + if(res.statusCode >= 400) level = levels.ERROR; + } + if (thislogger.isLevelEnabled(level)) { + var combined_tokens = assemble_tokens(req, res, options.tokens || []); + if (typeof fmt === 'function') { + var line = fmt(req, res, function(str){ return format(str, combined_tokens); }); + if (line) thislogger.log(level, line); + } else { + thislogger.log(level, format(fmt, combined_tokens)); + } + } + }); + } + + //ensure next gets always called + next(); + }; +} + +/** + * Adds custom {token, replacement} objects to defaults, + * overwriting the defaults if any tokens clash + * + * @param {IncomingMessage} req + * @param {ServerResponse} res + * @param {Array} custom_tokens + * [{ token: string-or-regexp, replacement: string-or-replace-function }] + * @return {Array} + */ +function assemble_tokens(req, res, custom_tokens) { + var array_unique_tokens = function(array) { + var a = array.concat(); + for(var i=0; i -1 ? vYearLong : vYearShort); + var vHour = addZero(date.getUTCHours()); + var vMinute = addZero(date.getUTCMinutes()); + var vSecond = addZero(date.getUTCSeconds()); + var vMillisecond = padWithZeros(date.getUTCMilliseconds(), 3); + var vTimeZone = offset(timezoneOffset); + date.setUTCMinutes(date.getUTCMinutes() + timezoneOffset); + var formatted = format + .replace(/dd/g, vDay) + .replace(/MM/g, vMonth) + .replace(/y{1,4}/g, vYear) + .replace(/hh/g, vHour) + .replace(/mm/g, vMinute) + .replace(/ss/g, vSecond) + .replace(/SSS/g, vMillisecond) + .replace(/O/g, vTimeZone); + return formatted; + +}; +/*jshint +W071 */ diff --git a/node_modules/log4js/lib/layouts.js b/node_modules/log4js/lib/layouts.js new file mode 100644 index 0000000..e44eef6 --- /dev/null +++ b/node_modules/log4js/lib/layouts.js @@ -0,0 +1,372 @@ +"use strict"; +var dateFormat = require('./date_format') +, os = require('os') +, eol = os.EOL || '\n' +, util = require('util') +, semver = require('semver') +, replacementRegExp = /%[sdj]/g +, layoutMakers = { + "messagePassThrough": function() { return messagePassThroughLayout; }, + "basic": function() { return basicLayout; }, + "colored": function() { return colouredLayout; }, + "coloured": function() { return colouredLayout; }, + "pattern": function (config) { + return patternLayout(config && config.pattern, config && config.tokens); + }, + "dummy": function() { return dummyLayout; } +} +, colours = { + ALL: "grey", + TRACE: "blue", + DEBUG: "cyan", + INFO: "green", + WARN: "yellow", + ERROR: "red", + FATAL: "magenta", + OFF: "grey" +}; + +function wrapErrorsWithInspect(items) { + return items.map(function(item) { + if ((item instanceof Error) && item.stack) { + return { inspect: function() { + if (semver.satisfies(process.version, '>=6')) { + return util.format(item); + } else { + return util.format(item) + '\n' + item.stack; + } + } }; + } else { + return item; + } + }); +} + +function formatLogData(logData) { + var data = logData; + if (!Array.isArray(data)) { + var numArgs = arguments.length; + data = new Array(numArgs); + for (var i = 0; i < numArgs; i++) { + data[i] = arguments[i]; + } + } + return util.format.apply(util, wrapErrorsWithInspect(data)); +} + +var styles = { + //styles + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + //grayscale + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [90, 39], + //colors + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +function colorizeStart(style) { + return style ? '\x1B[' + styles[style][0] + 'm' : ''; +} +function colorizeEnd(style) { + return style ? '\x1B[' + styles[style][1] + 'm' : ''; +} +/** + * Taken from masylum's fork (https://github.com/masylum/log4js-node) + */ +function colorize (str, style) { + return colorizeStart(style) + str + colorizeEnd(style); +} + +function timestampLevelAndCategory(loggingEvent, colour, timezoneOffest) { + var output = colorize( + formatLogData( + '[%s] [%s] %s - ' + , dateFormat.asString(loggingEvent.startTime, timezoneOffest) + , loggingEvent.level + , loggingEvent.categoryName + ) + , colour + ); + return output; +} + +/** + * BasicLayout is a simple layout for storing the logs. The logs are stored + * in following format: + *
+ * [startTime] [logLevel] categoryName - message\n
+ * 
+ * + * @author Stephan Strittmatter + */ +function basicLayout (loggingEvent, timezoneOffset) { + return timestampLevelAndCategory( + loggingEvent, + undefined, + timezoneOffset + ) + formatLogData(loggingEvent.data); +} + +/** + * colouredLayout - taken from masylum's fork. + * same as basicLayout, but with colours. + */ +function colouredLayout (loggingEvent, timezoneOffset) { + return timestampLevelAndCategory( + loggingEvent, + colours[loggingEvent.level.toString()], + timezoneOffset + ) + formatLogData(loggingEvent.data); +} + +function messagePassThroughLayout (loggingEvent) { + return formatLogData(loggingEvent.data); +} + +function dummyLayout(loggingEvent) { + return loggingEvent.data[0]; +} + +/** + * PatternLayout + * Format for specifiers is %[padding].[truncation][field]{[format]} + * e.g. %5.10p - left pad the log level by 5 characters, up to a max of 10 + * Fields can be any of: + * - %r time in toLocaleTimeString format + * - %p log level + * - %c log category + * - %h hostname + * - %m log data + * - %d date in various formats + * - %% % + * - %n newline + * - %z pid + * - %x{} add dynamic tokens to your log. Tokens are specified in the tokens parameter + * You can use %[ and %] to define a colored block. + * + * Tokens are specified as simple key:value objects. + * The key represents the token name whereas the value can be a string or function + * which is called to extract the value to put in the log message. If token is not + * found, it doesn't replace the field. + * + * A sample token would be: { "pid" : function() { return process.pid; } } + * + * Takes a pattern string, array of tokens and returns a layout function. + * @param {String} Log format pattern String + * @param {object} map object of different tokens + * @param {number} timezone offset in minutes + * @return {Function} + * @author Stephan Strittmatter + * @author Jan Schmidle + */ +function patternLayout (pattern, tokens, timezoneOffset) { + // jshint maxstatements:22 + var TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n"; + var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([\[\]cdhmnprzxy%])(\{([^\}]+)\})?|([^%]+)/; + + pattern = pattern || TTCC_CONVERSION_PATTERN; + + function categoryName(loggingEvent, specifier) { + var loggerName = loggingEvent.categoryName; + if (specifier) { + var precision = parseInt(specifier, 10); + var loggerNameBits = loggerName.split("."); + if (precision < loggerNameBits.length) { + loggerName = loggerNameBits.slice(loggerNameBits.length - precision).join("."); + } + } + return loggerName; + } + + function formatAsDate(loggingEvent, specifier) { + var format = dateFormat.ISO8601_FORMAT; + if (specifier) { + format = specifier; + // Pick up special cases + if (format == "ISO8601") { + format = dateFormat.ISO8601_FORMAT; + } else if (format == "ISO8601_WITH_TZ_OFFSET") { + format = dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT; + } else if (format == "ABSOLUTE") { + format = dateFormat.ABSOLUTETIME_FORMAT; + } else if (format == "DATE") { + format = dateFormat.DATETIME_FORMAT; + } + } + // Format the date + return dateFormat.asString(format, loggingEvent.startTime, timezoneOffset); + } + + function hostname() { + return os.hostname().toString(); + } + + function formatMessage(loggingEvent) { + return formatLogData(loggingEvent.data); + } + + function endOfLine() { + return eol; + } + + function logLevel(loggingEvent) { + return loggingEvent.level.toString(); + } + + function startTime(loggingEvent) { + return dateFormat.asString('hh:mm:ss', loggingEvent.startTime, timezoneOffset); + } + + function startColour(loggingEvent) { + return colorizeStart(colours[loggingEvent.level.toString()]); + } + + function endColour(loggingEvent) { + return colorizeEnd(colours[loggingEvent.level.toString()]); + } + + function percent() { + return '%'; + } + + function pid(loggingEvent) { + if (loggingEvent && loggingEvent.pid) { + return loggingEvent.pid; + } else { + return process.pid; + } + } + + function clusterInfo(loggingEvent, specifier) { + if (loggingEvent.cluster && specifier) { + return specifier + .replace('%m', loggingEvent.cluster.master) + .replace('%w', loggingEvent.cluster.worker) + .replace('%i', loggingEvent.cluster.workerId); + } else if (loggingEvent.cluster) { + return loggingEvent.cluster.worker+'@'+loggingEvent.cluster.master; + } else { + return pid(); + } + } + + function userDefined(loggingEvent, specifier) { + if (typeof(tokens[specifier]) !== 'undefined') { + if (typeof(tokens[specifier]) === 'function') { + return tokens[specifier](loggingEvent); + } else { + return tokens[specifier]; + } + } + return null; + } + + var replacers = { + 'c': categoryName, + 'd': formatAsDate, + 'h': hostname, + 'm': formatMessage, + 'n': endOfLine, + 'p': logLevel, + 'r': startTime, + '[': startColour, + ']': endColour, + 'y': clusterInfo, + 'z': pid, + '%': percent, + 'x': userDefined + }; + + function replaceToken(conversionCharacter, loggingEvent, specifier) { + return replacers[conversionCharacter](loggingEvent, specifier); + } + + function truncate(truncation, toTruncate) { + var len; + if (truncation) { + len = parseInt(truncation.substr(1), 10); + return toTruncate.substring(0, len); + } + + return toTruncate; + } + + function pad(padding, toPad) { + var len; + if (padding) { + if (padding.charAt(0) == "-") { + len = parseInt(padding.substr(1), 10); + // Right pad with spaces + while (toPad.length < len) { + toPad += " "; + } + } else { + len = parseInt(padding, 10); + // Left pad with spaces + while (toPad.length < len) { + toPad = " " + toPad; + } + } + } + return toPad; + } + + function truncateAndPad(toTruncAndPad, truncation, padding) { + var replacement = toTruncAndPad; + replacement = truncate(truncation, replacement); + replacement = pad(padding, replacement); + return replacement; + } + + return function(loggingEvent) { + var formattedString = ""; + var result; + var searchString = pattern; + + while ((result = regex.exec(searchString))) { + var matchedString = result[0]; + var padding = result[1]; + var truncation = result[2]; + var conversionCharacter = result[3]; + var specifier = result[5]; + var text = result[6]; + + // Check if the pattern matched was just normal text + if (text) { + formattedString += "" + text; + } else { + // Create a raw replacement string based on the conversion + // character and specifier + var replacement = replaceToken(conversionCharacter, loggingEvent, specifier); + formattedString += truncateAndPad(replacement, truncation, padding); + } + searchString = searchString.substr(result.index + result[0].length); + } + return formattedString; + }; + +} + +module.exports = { + basicLayout: basicLayout, + messagePassThroughLayout: messagePassThroughLayout, + patternLayout: patternLayout, + colouredLayout: colouredLayout, + coloredLayout: colouredLayout, + dummyLayout: dummyLayout, + addLayout: function(name, serializerGenerator) { + layoutMakers[name] = serializerGenerator; + }, + layout: function(name, config) { + return layoutMakers[name] && layoutMakers[name](config); + } +}; diff --git a/node_modules/log4js/lib/levels.js b/node_modules/log4js/lib/levels.js new file mode 100644 index 0000000..cb9243a --- /dev/null +++ b/node_modules/log4js/lib/levels.js @@ -0,0 +1,66 @@ +"use strict"; + +function Level(level, levelStr) { + this.level = level; + this.levelStr = levelStr; +} + +/** + * converts given String to corresponding Level + * @param {String} sArg String value of Level OR Log4js.Level + * @param {Log4js.Level} defaultLevel default Level, if no String representation + * @return Level object + * @type Log4js.Level + */ +function toLevel(sArg, defaultLevel) { + if (!sArg) { + return defaultLevel; + } + if (sArg instanceof Level) { + module.exports[sArg.toString()] = sArg; + return sArg; + } + if (typeof sArg === "string") { + return module.exports[sArg.toUpperCase()] || defaultLevel; + } + return toLevel(sArg.toString()); +} + +Level.prototype.toString = function() { + return this.levelStr; +}; + +Level.prototype.isLessThanOrEqualTo = function(otherLevel) { + if (typeof otherLevel === "string") { + otherLevel = toLevel(otherLevel); + } + return this.level <= otherLevel.level; +}; + +Level.prototype.isGreaterThanOrEqualTo = function(otherLevel) { + if (typeof otherLevel === "string") { + otherLevel = toLevel(otherLevel); + } + return this.level >= otherLevel.level; +}; + +Level.prototype.isEqualTo = function(otherLevel) { + if (typeof otherLevel === "string") { + otherLevel = toLevel(otherLevel); + } + return this.level === otherLevel.level; +}; + +module.exports = { + ALL: new Level(Number.MIN_VALUE, "ALL"), + TRACE: new Level(5000, "TRACE"), + DEBUG: new Level(10000, "DEBUG"), + INFO: new Level(20000, "INFO"), + WARN: new Level(30000, "WARN"), + ERROR: new Level(40000, "ERROR"), + FATAL: new Level(50000, "FATAL"), + MARK: new Level(9007199254740992, "MARK"), // 2^53 + OFF: new Level(Number.MAX_VALUE, "OFF"), + toLevel: toLevel, + Level: Level +}; diff --git a/node_modules/log4js/lib/log4js.js b/node_modules/log4js/lib/log4js.js new file mode 100644 index 0000000..25e89a2 --- /dev/null +++ b/node_modules/log4js/lib/log4js.js @@ -0,0 +1,514 @@ +"use strict"; +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview log4js is a library to log in JavaScript in similar manner + * than in log4j for Java. The API should be nearly the same. + * + *

Example:

+ *
+ *  var logging = require('log4js');
+ *  //add an appender that logs all messages to stdout.
+ *  logging.addAppender(logging.consoleAppender());
+ *  //add an appender that logs "some-category" to a file
+ *  logging.addAppender(logging.fileAppender("file.log"), "some-category");
+ *  //get a logger
+ *  var log = logging.getLogger("some-category");
+ *  log.setLevel(logging.levels.TRACE); //set the Level
+ *
+ *  ...
+ *
+ *  //call the log
+ *  log.trace("trace me" );
+ * 
+ * + * NOTE: the authors below are the original browser-based log4js authors + * don't try to contact them about bugs in this version :) + * @version 1.0 + * @author Stephan Strittmatter - http://jroller.com/page/stritti + * @author Seth Chisamore - http://www.chisamore.com + * @since 2005-05-20 + * @static + * Website: http://log4js.berlios.de + */ +var events = require('events') +, fs = require('fs') +, path = require('path') +, util = require('util') +, layouts = require('./layouts') +, levels = require('./levels') +, loggerModule = require('./logger') +, LoggingEvent = loggerModule.LoggingEvent +, Logger = loggerModule.Logger +, ALL_CATEGORIES = '[all]' +, appenders = {} +, loggers = {} +, appenderMakers = {} +, appenderShutdowns = {} +, defaultConfig = { + appenders: [ + { type: "stdout" } + ], + replaceConsole: false +}; + +function hasLogger(logger) { + return loggers.hasOwnProperty(logger); +} + +levels.forName = function(levelStr, levelVal) { + var level; + if (typeof levelStr === "string" && typeof levelVal === "number") { + var levelUpper = levelStr.toUpperCase(); + level = new levels.Level(levelVal, levelUpper); + loggerModule.addLevelMethods(level); + } + return level; +}; + +levels.getLevel = function(levelStr) { + var level; + if (typeof levelStr === "string") { + var levelUpper = levelStr.toUpperCase(); + level = levels.toLevel(levelStr); + } + return level; +}; + +function getBufferedLogger(categoryName) { + var base_logger = getLogger(categoryName); + var logger = {}; + logger.temp = []; + logger.target = base_logger; + logger.flush = function () { + for (var i = 0; i < logger.temp.length; i++) { + var log = logger.temp[i]; + logger.target[log.level](log.message); + delete logger.temp[i]; + } + }; + logger.trace = function (message) { logger.temp.push({level: 'trace', message: message}); }; + logger.debug = function (message) { logger.temp.push({level: 'debug', message: message}); }; + logger.info = function (message) { logger.temp.push({level: 'info', message: message}); }; + logger.warn = function (message) { logger.temp.push({level: 'warn', message: message}); }; + logger.error = function (message) { logger.temp.push({level: 'error', message: message}); }; + logger.fatal = function (message) { logger.temp.push({level: 'fatal', message: message}); }; + + return logger; +} + +function normalizeCategory (category) { + return category + '.'; +} + +function doesLevelEntryContainsLogger (levelCategory, loggerCategory) { + var normalizedLevelCategory = normalizeCategory(levelCategory); + var normalizedLoggerCategory = normalizeCategory(loggerCategory); + return normalizedLoggerCategory.substring(0, normalizedLevelCategory.length) == normalizedLevelCategory; //jshint ignore:line +} + +function doesAppenderContainsLogger (appenderCategory, loggerCategory) { + var normalizedAppenderCategory = normalizeCategory(appenderCategory); + var normalizedLoggerCategory = normalizeCategory(loggerCategory); + return normalizedLoggerCategory.substring(0, normalizedAppenderCategory.length) == normalizedAppenderCategory; //jshint ignore:line +} + + +/** + * Get a logger instance. Instance is cached on categoryName level. + * @param {String} categoryName name of category to log to. + * @return {Logger} instance of logger for the category + * @static + */ +function getLogger (loggerCategoryName) { + + // Use default logger if categoryName is not specified or invalid + if (typeof loggerCategoryName !== "string") { + loggerCategoryName = Logger.DEFAULT_CATEGORY; + } + + if (!hasLogger(loggerCategoryName)) { + + var level; + + /* jshint -W073 */ + // If there's a "levels" entry in the configuration + if (levels.config) { + // Goes through the categories in the levels configuration entry, + // starting with the "higher" ones. + var keys = Object.keys(levels.config).sort(); + for (var idx = 0; idx < keys.length; idx++) { + var levelCategory = keys[idx]; + if (doesLevelEntryContainsLogger(levelCategory, loggerCategoryName)) { + // level for the logger + level = levels.config[levelCategory]; + } + } + } + /* jshint +W073 */ + + // Create the logger for this name if it doesn't already exist + loggers[loggerCategoryName] = new Logger(loggerCategoryName, level); + + /* jshint -W083 */ + var appenderList; + for(var appenderCategory in appenders) { + if (doesAppenderContainsLogger(appenderCategory, loggerCategoryName)) { + appenderList = appenders[appenderCategory]; + appenderList.forEach(function(appender) { + loggers[loggerCategoryName].addListener("log", appender); + }); + } + } + /* jshint +W083 */ + + if (appenders[ALL_CATEGORIES]) { + appenderList = appenders[ALL_CATEGORIES]; + appenderList.forEach(function(appender) { + loggers[loggerCategoryName].addListener("log", appender); + }); + } + } + + return loggers[loggerCategoryName]; +} + +/** + * args are appender, optional shutdown function, then zero or more categories + */ +function addAppender () { + var args = Array.prototype.slice.call(arguments); + var appender = args.shift(); + //check for a shutdown fn + if (args.length > 0 && typeof args[0] === 'function') { + appenderShutdowns[appender] = args.shift(); + } + + if (args.length === 0 || args[0] === undefined) { + args = [ ALL_CATEGORIES ]; + } + //argument may already be an array + if (Array.isArray(args[0])) { + args = args[0]; + } + + args.forEach(function(appenderCategory) { + addAppenderToCategory(appender, appenderCategory); + + if (appenderCategory === ALL_CATEGORIES) { + addAppenderToAllLoggers(appender); + } else { + + for(var loggerCategory in loggers) { + if (doesAppenderContainsLogger(appenderCategory,loggerCategory)) { + loggers[loggerCategory].addListener("log", appender); + } + } + + } + }); +} + +function addAppenderToAllLoggers(appender) { + for (var logger in loggers) { + if (hasLogger(logger)) { + loggers[logger].addListener("log", appender); + } + } +} + +function addAppenderToCategory(appender, category) { + if (!appenders[category]) { + appenders[category] = []; + } + appenders[category].push(appender); +} + +function clearAppenders () { + //if we're calling clearAppenders, we're probably getting ready to write + //so turn log writes back on, just in case this is after a shutdown + loggerModule.enableAllLogWrites(); + appenders = {}; + for (var logger in loggers) { + if (hasLogger(logger)) { + loggers[logger].removeAllListeners("log"); + } + } +} + +function configureAppenders(appenderList, options) { + clearAppenders(); + if (appenderList) { + appenderList.forEach(function(appenderConfig) { + loadAppender(appenderConfig.type); + var appender; + appenderConfig.makers = appenderMakers; + try { + appender = appenderMakers[appenderConfig.type](appenderConfig, options); + addAppender(appender, appenderConfig.category); + } catch(e) { + throw new Error("log4js configuration problem for " + util.inspect(appenderConfig), e); + } + }); + } +} + +function configureLevels(_levels) { + levels.config = _levels; // Keep it so we can create loggers later using this cfg + if (_levels) { + var keys = Object.keys(levels.config).sort(); + for (var idx in keys) { + var category = keys[idx]; + if(category === ALL_CATEGORIES) { + setGlobalLogLevel(_levels[category]); + } + /* jshint -W073 */ + for(var loggerCategory in loggers) { + if (doesLevelEntryContainsLogger(category, loggerCategory)) { + loggers[loggerCategory].setLevel(_levels[category]); + } + } + /* jshint +W073 */ + } + } +} + +function setGlobalLogLevel(level) { + Logger.prototype.level = levels.toLevel(level, levels.TRACE); +} + +/** + * Get the default logger instance. + * @return {Logger} instance of default logger + * @static + */ +function getDefaultLogger () { + return getLogger(Logger.DEFAULT_CATEGORY); +} + +var configState = {}; + +function loadConfigurationFile(filename) { + if (filename) { + return JSON.parse(fs.readFileSync(filename, "utf8")); + } + return undefined; +} + +function configureOnceOff(config, options) { + if (config) { + try { + restoreConsole(); + configureLevels(config.levels); + configureAppenders(config.appenders, options); + + if (config.replaceConsole) { + replaceConsole(); + } + } catch (e) { + throw new Error( + "Problem reading log4js config " + util.inspect(config) + + ". Error was \"" + e.message + "\" (" + e.stack + ")" + ); + } + } +} + +function reloadConfiguration(options) { + var mtime = getMTime(configState.filename); + if (!mtime) return; + + if (configState.lastMTime && (mtime.getTime() > configState.lastMTime.getTime())) { + configureOnceOff(loadConfigurationFile(configState.filename), options); + } + configState.lastMTime = mtime; +} + +function getMTime(filename) { + var mtime; + try { + mtime = fs.statSync(configState.filename).mtime; + } catch (e) { + getLogger('log4js').warn('Failed to load configuration file ' + filename); + } + return mtime; +} + +function initReloadConfiguration(filename, options) { + if (configState.timerId) { + clearInterval(configState.timerId); + delete configState.timerId; + } + configState.filename = filename; + configState.lastMTime = getMTime(filename); + configState.timerId = setInterval(reloadConfiguration, options.reloadSecs*1000, options); +} + +function configure(configurationFileOrObject, options) { + var config = configurationFileOrObject; + config = config || process.env.LOG4JS_CONFIG; + options = options || {}; + + if (config === undefined || config === null || typeof(config) === 'string') { + if (options.reloadSecs) { + initReloadConfiguration(config, options); + } + config = loadConfigurationFile(config) || defaultConfig; + } else { + if (options.reloadSecs) { + getLogger('log4js').warn( + 'Ignoring configuration reload parameter for "object" configuration.' + ); + } + } + configureOnceOff(config, options); +} + +var originalConsoleFunctions = { + log: console.log, + debug: console.debug, + info: console.info, + warn: console.warn, + error: console.error +}; + +function replaceConsole(logger) { + function replaceWith(fn) { + return function() { + fn.apply(logger, arguments); + }; + } + logger = logger || getLogger("console"); + ['log','debug','info','warn','error'].forEach(function (item) { + console[item] = replaceWith(item === 'log' ? logger.info : logger[item]); + }); +} + +function restoreConsole() { + ['log', 'debug', 'info', 'warn', 'error'].forEach(function (item) { + console[item] = originalConsoleFunctions[item]; + }); +} + +/** + * Load an appenderModule based on the provided appender filepath. Will first + * check if the appender path is a subpath of the log4js "lib/appenders" directory. + * If not, it will attempt to load the the appender as complete path. + * + * @param {string} appender The filepath for the appender. + * @returns {Object|null} The required appender or null if appender could not be loaded. + * @private + */ +function requireAppender(appender) { + var appenderModule; + try { + appenderModule = require('./appenders/' + appender); + } catch (e) { + appenderModule = require(appender); + } + return appenderModule; +} + +/** + * Load an appender. Provided the appender path to be loaded. If appenderModule is defined, + * it will be used in place of requiring the appender module. + * + * @param {string} appender The path to the appender module. + * @param {Object|void} [appenderModule] The pre-required appender module. When provided, + * instead of requiring the appender by its path, this object will be used. + * @returns {void} + * @private + */ +function loadAppender(appender, appenderModule) { + appenderModule = appenderModule || requireAppender(appender); + + if (!appenderModule) { + throw new Error("Invalid log4js appender: " + util.inspect(appender)); + } + + module.exports.appenders[appender] = appenderModule.appender.bind(appenderModule); + if (appenderModule.shutdown) { + appenderShutdowns[appender] = appenderModule.shutdown.bind(appenderModule); + } + appenderMakers[appender] = appenderModule.configure.bind(appenderModule); +} + +/** + * Shutdown all log appenders. This will first disable all writing to appenders + * and then call the shutdown function each appender. + * + * @params {Function} cb - The callback to be invoked once all appenders have + * shutdown. If an error occurs, the callback will be given the error object + * as the first argument. + * @returns {void} + */ +function shutdown(cb) { + // First, disable all writing to appenders. This prevents appenders from + // not being able to be drained because of run-away log writes. + loggerModule.disableAllLogWrites(); + + //turn off config reloading + if (configState.timerId) { + clearInterval(configState.timerId); + } + + // Call each of the shutdown functions in parallel + var completed = 0; + var error; + var shutdownFcts = []; + var complete = function(err) { + error = error || err; + completed++; + if (completed >= shutdownFcts.length) { + cb(error); + } + }; + for (var category in appenderShutdowns) { + if (appenderShutdowns.hasOwnProperty(category)) { + shutdownFcts.push(appenderShutdowns[category]); + } + } + if (!shutdownFcts.length) { + return cb(); + } + shutdownFcts.forEach(function(shutdownFct) { shutdownFct(complete); }); +} + +module.exports = { + getBufferedLogger: getBufferedLogger, + getLogger: getLogger, + getDefaultLogger: getDefaultLogger, + hasLogger: hasLogger, + + addAppender: addAppender, + loadAppender: loadAppender, + clearAppenders: clearAppenders, + configure: configure, + shutdown: shutdown, + + replaceConsole: replaceConsole, + restoreConsole: restoreConsole, + + levels: levels, + setGlobalLogLevel: setGlobalLogLevel, + + layouts: layouts, + appenders: {}, + appenderMakers: appenderMakers, + connectLogger: require('./connect-logger').connectLogger +}; + +//set ourselves up +configure(); diff --git a/node_modules/log4js/lib/logger.js b/node_modules/log4js/lib/logger.js new file mode 100644 index 0000000..c596ba0 --- /dev/null +++ b/node_modules/log4js/lib/logger.js @@ -0,0 +1,119 @@ +"use strict"; +var levels = require('./levels') +, util = require('util') +, events = require('events') +, DEFAULT_CATEGORY = '[default]'; + +var logWritesEnabled = true; + +/** + * Models a logging event. + * @constructor + * @param {String} categoryName name of category + * @param {Log4js.Level} level level of message + * @param {Array} data objects to log + * @param {Log4js.Logger} logger the associated logger + * @author Seth Chisamore + */ +function LoggingEvent (categoryName, level, data, logger) { + this.startTime = new Date(); + this.categoryName = categoryName; + this.data = data; + this.level = level; + this.logger = logger; +} + +/** + * Logger to log messages. + * use {@see Log4js#getLogger(String)} to get an instance. + * @constructor + * @param name name of category to log to + * @author Stephan Strittmatter + */ +function Logger (name, level) { + this.category = name || DEFAULT_CATEGORY; + + if (level) { + this.setLevel(level); + } +} +util.inherits(Logger, events.EventEmitter); +Logger.DEFAULT_CATEGORY = DEFAULT_CATEGORY; +Logger.prototype.level = levels.TRACE; + +Logger.prototype.setLevel = function(level) { + this.level = levels.toLevel(level, this.level || levels.TRACE); +}; + +Logger.prototype.removeLevel = function() { + delete this.level; +}; + +Logger.prototype.log = function() { + var logLevel = levels.toLevel(arguments[0], levels.INFO); + if (!this.isLevelEnabled(logLevel)) { + return; + } + var numArgs = arguments.length - 1; + var args = new Array(numArgs); + for (var i = 0; i < numArgs; i++) { + args[i] = arguments[i + 1]; + } + this._log(logLevel, args); +}; + +Logger.prototype.isLevelEnabled = function(otherLevel) { + return this.level.isLessThanOrEqualTo(otherLevel); +}; + +['Trace','Debug','Info','Warn','Error','Fatal', 'Mark'].forEach(addLevelMethods); + +function addLevelMethods(level) { + level = levels.toLevel(level); + + var levelStrLower = level.toString().toLowerCase(); + var levelMethod = levelStrLower.replace(/_([a-z])/g, function(g) { return g[1].toUpperCase(); } ); + var isLevelMethod = levelMethod[0].toUpperCase() + levelMethod.slice(1); + + Logger.prototype['is'+isLevelMethod+'Enabled'] = function() { + return this.isLevelEnabled(level); + }; + + Logger.prototype[levelMethod] = function () { + if (logWritesEnabled && this.isLevelEnabled(level)) { + var numArgs = arguments.length; + var args = new Array(numArgs); + for (var i = 0; i < numArgs; i++) { + args[i] = arguments[i]; + } + this._log(level, args); + } + }; +} + +Logger.prototype._log = function(level, data) { + var loggingEvent = new LoggingEvent(this.category, level, data, this); + this.emit('log', loggingEvent); +}; + +/** + * Disable all log writes. + * @returns {void} + */ +function disableAllLogWrites() { + logWritesEnabled = false; +} + +/** + * Enable log writes. + * @returns {void} + */ +function enableAllLogWrites() { + logWritesEnabled = true; +} + +exports.LoggingEvent = LoggingEvent; +exports.Logger = Logger; +exports.disableAllLogWrites = disableAllLogWrites; +exports.enableAllLogWrites = enableAllLogWrites; +exports.addLevelMethods = addLevelMethods; diff --git a/node_modules/log4js/node_modules/debug/.coveralls.yml b/node_modules/log4js/node_modules/debug/.coveralls.yml new file mode 100644 index 0000000..20a7068 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/.coveralls.yml @@ -0,0 +1 @@ +repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve diff --git a/node_modules/log4js/node_modules/debug/.eslintrc b/node_modules/log4js/node_modules/debug/.eslintrc new file mode 100644 index 0000000..8a37ae2 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/.eslintrc @@ -0,0 +1,11 @@ +{ + "env": { + "browser": true, + "node": true + }, + "rules": { + "no-console": 0, + "no-empty": [1, { "allowEmptyCatch": true }] + }, + "extends": "eslint:recommended" +} diff --git a/node_modules/log4js/node_modules/debug/.npmignore b/node_modules/log4js/node_modules/debug/.npmignore new file mode 100644 index 0000000..db2fbb9 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/.npmignore @@ -0,0 +1,8 @@ +support +test +examples +example +*.sock +dist +yarn.lock +coverage diff --git a/node_modules/log4js/node_modules/debug/.travis.yml b/node_modules/log4js/node_modules/debug/.travis.yml new file mode 100644 index 0000000..6c6090c --- /dev/null +++ b/node_modules/log4js/node_modules/debug/.travis.yml @@ -0,0 +1,14 @@ + +language: node_js +node_js: + - "6" + - "5" + - "4" + +install: + - make node_modules + +script: + - make lint + - make test + - make coveralls diff --git a/node_modules/log4js/node_modules/debug/CHANGELOG.md b/node_modules/log4js/node_modules/debug/CHANGELOG.md new file mode 100644 index 0000000..07ba539 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/CHANGELOG.md @@ -0,0 +1,330 @@ + +2.6.3 / 2017-03-13 +================== + + * Fix: Fix for electron reference to `process.env.DEBUG` (#431, @paulcbetts) + * Docs: Changelog fix (@thebigredgeeK) + +2.6.2 / 2017-03-10 +================== + + * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) + * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) + * Docs: Add Slackin invite badge (@tootallnate) + +2.6.1 / 2017-02-10 +================== + + * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error + * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) + * Fix: IE8 "Expected identifier" error (#414, @vgoma) + * Fix: Namespaces would not disable once enabled (#409, @musikov) + +2.6.0 / 2016-12-28 +================== + + * Fix: added better null pointer checks for browser useColors (@thebigredgeek) + * Improvement: removed explicit `window.debug` export (#404, @tootallnate) + * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) + +2.5.2 / 2016-12-25 +================== + + * Fix: reference error on window within webworkers (#393, @KlausTrainer) + * Docs: fixed README typo (#391, @lurch) + * Docs: added notice about v3 api discussion (@thebigredgeek) + +2.5.1 / 2016-12-20 +================== + + * Fix: babel-core compatibility + +2.5.0 / 2016-12-20 +================== + + * Fix: wrong reference in bower file (@thebigredgeek) + * Fix: webworker compatibility (@thebigredgeek) + * Fix: output formatting issue (#388, @kribblo) + * Fix: babel-loader compatibility (#383, @escwald) + * Misc: removed built asset from repo and publications (@thebigredgeek) + * Misc: moved source files to /src (#378, @yamikuronue) + * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) + * Test: coveralls integration (#378, @yamikuronue) + * Docs: simplified language in the opening paragraph (#373, @yamikuronue) + +2.4.5 / 2016-12-17 +================== + + * Fix: `navigator` undefined in Rhino (#376, @jochenberger) + * Fix: custom log function (#379, @hsiliev) + * Improvement: bit of cleanup + linting fixes (@thebigredgeek) + * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) + * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) + +2.4.4 / 2016-12-14 +================== + + * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) + +2.4.3 / 2016-12-14 +================== + + * Fix: navigation.userAgent error for react native (#364, @escwald) + +2.4.2 / 2016-12-14 +================== + + * Fix: browser colors (#367, @tootallnate) + * Misc: travis ci integration (@thebigredgeek) + * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) + +2.4.1 / 2016-12-13 +================== + + * Fix: typo that broke the package (#356) + +2.4.0 / 2016-12-13 +================== + + * Fix: bower.json references unbuilt src entry point (#342, @justmatt) + * Fix: revert "handle regex special characters" (@tootallnate) + * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) + * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) + * Improvement: allow colors in workers (#335, @botverse) + * Improvement: use same color for same namespace. (#338, @lchenay) + +2.3.3 / 2016-11-09 +================== + + * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) + * Fix: Returning `localStorage` saved values (#331, Levi Thomason) + * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) + +2.3.2 / 2016-11-09 +================== + + * Fix: be super-safe in index.js as well (@TooTallNate) + * Fix: should check whether process exists (Tom Newby) + +2.3.1 / 2016-11-09 +================== + + * Fix: Added electron compatibility (#324, @paulcbetts) + * Improvement: Added performance optimizations (@tootallnate) + * Readme: Corrected PowerShell environment variable example (#252, @gimre) + * Misc: Removed yarn lock file from source control (#321, @fengmk2) + +2.3.0 / 2016-11-07 +================== + + * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) + * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) + * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) + * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) + * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) + * Package: Update "ms" to 0.7.2 (#315, @DevSide) + * Package: removed superfluous version property from bower.json (#207 @kkirsche) + * Readme: fix USE_COLORS to DEBUG_COLORS + * Readme: Doc fixes for format string sugar (#269, @mlucool) + * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) + * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) + * Readme: better docs for browser support (#224, @matthewmueller) + * Tooling: Added yarn integration for development (#317, @thebigredgeek) + * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) + * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) + * Misc: Updated contributors (@thebigredgeek) + +2.2.0 / 2015-05-09 +================== + + * package: update "ms" to v0.7.1 (#202, @dougwilson) + * README: add logging to file example (#193, @DanielOchoa) + * README: fixed a typo (#191, @amir-s) + * browser: expose `storage` (#190, @stephenmathieson) + * Makefile: add a `distclean` target (#189, @stephenmathieson) + +2.1.3 / 2015-03-13 +================== + + * Updated stdout/stderr example (#186) + * Updated example/stdout.js to match debug current behaviour + * Renamed example/stderr.js to stdout.js + * Update Readme.md (#184) + * replace high intensity foreground color for bold (#182, #183) + +2.1.2 / 2015-03-01 +================== + + * dist: recompile + * update "ms" to v0.7.0 + * package: update "browserify" to v9.0.3 + * component: fix "ms.js" repo location + * changed bower package name + * updated documentation about using debug in a browser + * fix: security error on safari (#167, #168, @yields) + +2.1.1 / 2014-12-29 +================== + + * browser: use `typeof` to check for `console` existence + * browser: check for `console.log` truthiness (fix IE 8/9) + * browser: add support for Chrome apps + * Readme: added Windows usage remarks + * Add `bower.json` to properly support bower install + +2.1.0 / 2014-10-15 +================== + + * node: implement `DEBUG_FD` env variable support + * package: update "browserify" to v6.1.0 + * package: add "license" field to package.json (#135, @panuhorsmalahti) + +2.0.0 / 2014-09-01 +================== + + * package: update "browserify" to v5.11.0 + * node: use stderr rather than stdout for logging (#29, @stephenmathieson) + +1.0.4 / 2014-07-15 +================== + + * dist: recompile + * example: remove `console.info()` log usage + * example: add "Content-Type" UTF-8 header to browser example + * browser: place %c marker after the space character + * browser: reset the "content" color via `color: inherit` + * browser: add colors support for Firefox >= v31 + * debug: prefer an instance `log()` function over the global one (#119) + * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) + +1.0.3 / 2014-07-09 +================== + + * Add support for multiple wildcards in namespaces (#122, @seegno) + * browser: fix lint + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/log4js/node_modules/debug/LICENSE b/node_modules/log4js/node_modules/debug/LICENSE new file mode 100644 index 0000000..658c933 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/LICENSE @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/log4js/node_modules/debug/Makefile b/node_modules/log4js/node_modules/debug/Makefile new file mode 100644 index 0000000..584da8b --- /dev/null +++ b/node_modules/log4js/node_modules/debug/Makefile @@ -0,0 +1,50 @@ +# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 +THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) + +# BIN directory +BIN := $(THIS_DIR)/node_modules/.bin + +# Path +PATH := node_modules/.bin:$(PATH) +SHELL := /bin/bash + +# applications +NODE ?= $(shell which node) +YARN ?= $(shell which yarn) +PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) +BROWSERIFY ?= $(NODE) $(BIN)/browserify + +.FORCE: + +install: node_modules + +node_modules: package.json + @NODE_ENV= $(PKG) install + @touch node_modules + +lint: .FORCE + eslint browser.js debug.js index.js node.js + +test-node: .FORCE + istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + +test-browser: .FORCE + mkdir -p dist + + @$(BROWSERIFY) \ + --standalone debug \ + . > dist/debug.js + + karma start --single-run + rimraf dist + +test: .FORCE + concurrently \ + "make test-node" \ + "make test-browser" + +coveralls: + cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js + +.PHONY: all install clean distclean diff --git a/node_modules/log4js/node_modules/debug/README.md b/node_modules/log4js/node_modules/debug/README.md new file mode 100644 index 0000000..4aeab13 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/README.md @@ -0,0 +1,312 @@ +# debug +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny node.js debugging utility modelled after node core's debugging technique. + +**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)** + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example _app.js_: + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %s', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example _worker.js_: + +```js +var debug = require('debug')('worker'); + +setInterval(function(){ + debug('doing some work'); +}, 1000); +``` + + The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: + + ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) + + ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) + +#### Windows note + + On Windows the environment variable is set using the `set` command. + + ```cmd + set DEBUG=*,-not_this + ``` + + Note that PowerShell uses different syntax to set environment variables. + + ```cmd + $env:DEBUG = "*,-not_this" + ``` + +Then, run the program to be debugged as usual. + +## Millisecond diff + + When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) + + When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: + + ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) + +## Conventions + + If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". + +## Wildcards + + The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + + You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:". + +## Environment Variables + + When running through Node.js, you can set a few environment variables that will + change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disabled specific debugging namespaces. | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + + __Note:__ The environment variables beginning with `DEBUG_` end up being + converted into an Options object that gets used with `%o`/`%O` formatters. + See the Node.js documentation for + [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) + for the complete list. + +## Formatters + + + Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + +### Custom formatters + + You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + +## Browser support + You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), + or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), + if you don't want to build it yourself. + + Debug's enable state is currently persisted by `localStorage`. + Consider the situation shown below where you have `worker:a` and `worker:b`, + and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + +#### Web Inspector Colors + + Colors are also enabled on "Web Inspectors" that understand the `%c` formatting + option. These are WebKit web inspectors, Firefox ([since version + 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) + and the Firebug plugin for Firefox (any version). + + Colored output looks something like: + + ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example _stdout.js_: + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/log4js/node_modules/debug/bower.json b/node_modules/log4js/node_modules/debug/bower.json new file mode 100644 index 0000000..027804c --- /dev/null +++ b/node_modules/log4js/node_modules/debug/bower.json @@ -0,0 +1,29 @@ +{ + "name": "visionmedia-debug", + "main": "./src/browser.js", + "homepage": "https://github.com/visionmedia/debug", + "authors": [ + "TJ Holowaychuk ", + "Nathan Rajlich (http://n8.io)", + "Andrew Rhyne " + ], + "description": "visionmedia-debug", + "moduleType": [ + "amd", + "es6", + "globals", + "node" + ], + "keywords": [ + "visionmedia", + "debug" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} diff --git a/node_modules/log4js/node_modules/debug/component.json b/node_modules/log4js/node_modules/debug/component.json new file mode 100644 index 0000000..e150dc4 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/component.json @@ -0,0 +1,19 @@ +{ + "name": "debug", + "repo": "visionmedia/debug", + "description": "small debugging utility", + "version": "2.6.3", + "keywords": [ + "debug", + "log", + "debugger" + ], + "main": "src/browser.js", + "scripts": [ + "src/browser.js", + "src/debug.js" + ], + "dependencies": { + "rauchg/ms.js": "0.7.1" + } +} diff --git a/node_modules/log4js/node_modules/debug/karma.conf.js b/node_modules/log4js/node_modules/debug/karma.conf.js new file mode 100644 index 0000000..103a82d --- /dev/null +++ b/node_modules/log4js/node_modules/debug/karma.conf.js @@ -0,0 +1,70 @@ +// Karma configuration +// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC) + +module.exports = function(config) { + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['mocha', 'chai', 'sinon'], + + + // list of files / patterns to load in the browser + files: [ + 'dist/debug.js', + 'test/*spec.js' + ], + + + // list of files to exclude + exclude: [ + 'src/node.js' + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['PhantomJS'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }) +} diff --git a/node_modules/log4js/node_modules/debug/node.js b/node_modules/log4js/node_modules/debug/node.js new file mode 100644 index 0000000..7fc36fe --- /dev/null +++ b/node_modules/log4js/node_modules/debug/node.js @@ -0,0 +1 @@ +module.exports = require('./src/node'); diff --git a/node_modules/log4js/node_modules/debug/package.json b/node_modules/log4js/node_modules/debug/package.json new file mode 100644 index 0000000..d193926 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/package.json @@ -0,0 +1,124 @@ +{ + "_args": [ + [ + { + "raw": "debug@^2.2.0", + "scope": null, + "escapedName": "debug", + "name": "debug", + "rawSpec": "^2.2.0", + "spec": ">=2.2.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/log4js" + ] + ], + "_from": "debug@>=2.2.0 <3.0.0", + "_id": "debug@2.6.3", + "_inCache": true, + "_location": "/log4js/debug", + "_nodeVersion": "6.9.2", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/debug-2.6.3.tgz_1489463433800_0.9440390267409384" + }, + "_npmUser": { + "name": "thebigredgeek", + "email": "rhyneandrew@gmail.com" + }, + "_npmVersion": "3.10.9", + "_phantomChildren": {}, + "_requested": { + "raw": "debug@^2.2.0", + "scope": null, + "escapedName": "debug", + "name": "debug", + "rawSpec": "^2.2.0", + "spec": ">=2.2.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/log4js" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", + "_shasum": "0f7eb8c30965ec08c72accfa0130c8b79984141d", + "_shrinkwrap": null, + "_spec": "debug@^2.2.0", + "_where": "/home/burchettm/statsbot/node_modules/log4js", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "component": { + "scripts": { + "debug/index.js": "browser.js", + "debug/debug.js": "debug.js" + } + }, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "0.7.2" + }, + "description": "small debugging utility", + "devDependencies": { + "browserify": "9.0.3", + "chai": "^3.5.0", + "concurrently": "^3.1.0", + "coveralls": "^2.11.15", + "eslint": "^3.12.1", + "istanbul": "^0.4.5", + "karma": "^1.3.0", + "karma-chai": "^0.1.0", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "karma-sinon": "^1.0.5", + "mocha": "^3.2.0", + "mocha-lcov-reporter": "^1.2.0", + "rimraf": "^2.5.4", + "sinon": "^1.17.6", + "sinon-chai": "^2.8.0" + }, + "directories": {}, + "dist": { + "shasum": "0f7eb8c30965ec08c72accfa0130c8b79984141d", + "tarball": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz" + }, + "gitHead": "9dc30f8378cc12192635cc6a31f0d96bb39be8bb", + "homepage": "https://github.com/visionmedia/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "maintainers": [ + { + "name": "thebigredgeek", + "email": "rhyneandrew@gmail.com" + } + ], + "name": "debug", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "scripts": {}, + "version": "2.6.3" +} diff --git a/node_modules/log4js/node_modules/debug/src/browser.js b/node_modules/log4js/node_modules/debug/src/browser.js new file mode 100644 index 0000000..e21c1e0 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/src/browser.js @@ -0,0 +1,185 @@ +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window && typeof window.process !== 'undefined' && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document && 'WebkitAppearance' in document.documentElement.style) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window && window.console && (console.firebug || (console.exception && console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} diff --git a/node_modules/log4js/node_modules/debug/src/debug.js b/node_modules/log4js/node_modules/debug/src/debug.js new file mode 100644 index 0000000..d5d6d16 --- /dev/null +++ b/node_modules/log4js/node_modules/debug/src/debug.js @@ -0,0 +1,202 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require('ms'); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (namespaces || '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} diff --git a/node_modules/log4js/node_modules/debug/src/index.js b/node_modules/log4js/node_modules/debug/src/index.js new file mode 100644 index 0000000..e12cf4d --- /dev/null +++ b/node_modules/log4js/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process !== 'undefined' && process.type === 'renderer') { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/node_modules/log4js/node_modules/debug/src/node.js b/node_modules/log4js/node_modules/debug/src/node.js new file mode 100644 index 0000000..3c7407b --- /dev/null +++ b/node_modules/log4js/node_modules/debug/src/node.js @@ -0,0 +1,241 @@ +/** + * Module dependencies. + */ + +var tty = require('tty'); +var util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * The file descriptor to write the `debug()` calls to. + * Set the `DEBUG_FD` env variable to override with another value. i.e.: + * + * $ DEBUG_FD=3 node script.js 3>debug.log + */ + +var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + +if (1 !== fd && 2 !== fd) { + util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() +} + +var stream = 1 === fd ? process.stdout : + 2 === fd ? process.stderr : + createWritableStdioStream(fd); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .replace(/\s*\n\s*/g, ' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = new Date().toUTCString() + + ' ' + name + ' ' + args[0]; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to `stream`. + */ + +function log() { + return stream.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Copied from `node/src/node.js`. + * + * XXX: It's lame that node doesn't expose this API out-of-the-box. It also + * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. + */ + +function createWritableStdioStream (fd) { + var stream; + var tty_wrap = process.binding('tty_wrap'); + + // Note stream._type is used for test-module-load-list.js + + switch (tty_wrap.guessHandleType(fd)) { + case 'TTY': + stream = new tty.WriteStream(fd); + stream._type = 'tty'; + + // Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + case 'FILE': + var fs = require('fs'); + stream = new fs.SyncWriteStream(fd, { autoClose: false }); + stream._type = 'fs'; + break; + + case 'PIPE': + case 'TCP': + var net = require('net'); + stream = new net.Socket({ + fd: fd, + readable: false, + writable: true + }); + + // FIXME Should probably have an option in net.Socket to create a + // stream from an existing fd which is writable only. But for now + // we'll just add this hack and set the `readable` member to false. + // Test: ./node test/fixtures/echo.js < /etc/passwd + stream.readable = false; + stream.read = null; + stream._type = 'pipe'; + + // FIXME Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + default: + // Probably an error on in uv_guess_handle() + throw new Error('Implement me. Unknown stream file type!'); + } + + // For supporting legacy API we put the FD here. + stream.fd = fd; + + stream._isStdio = true; + + return stream; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = util._extend({}, exports.inspectOpts); +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); diff --git a/node_modules/log4js/package.json b/node_modules/log4js/package.json new file mode 100644 index 0000000..eae01c1 --- /dev/null +++ b/node_modules/log4js/package.json @@ -0,0 +1,111 @@ +{ + "_args": [ + [ + { + "raw": "log4js", + "scope": null, + "escapedName": "log4js", + "name": "log4js", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "/home/burchettm/statsbot" + ] + ], + "_from": "log4js@latest", + "_id": "log4js@1.1.1", + "_inCache": true, + "_location": "/log4js", + "_nodeVersion": "6.9.4", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/log4js-1.1.1.tgz_1488423516669_0.827328409999609" + }, + "_npmUser": { + "name": "csausdev", + "email": "gareth.nomiddlename@gmail.com" + }, + "_npmVersion": "3.10.10", + "_phantomChildren": { + "ms": "0.7.2" + }, + "_requested": { + "raw": "log4js", + "scope": null, + "escapedName": "log4js", + "name": "log4js", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "#USER" + ], + "_resolved": "https://registry.npmjs.org/log4js/-/log4js-1.1.1.tgz", + "_shasum": "c21d29c7604089e4f255833e7f94b3461de1ff43", + "_shrinkwrap": null, + "_spec": "log4js", + "_where": "/home/burchettm/statsbot", + "author": { + "name": "Gareth Jones", + "email": "gareth.nomiddlename@gmail.com" + }, + "browser": { + "os": false + }, + "bugs": { + "url": "http://github.com/nomiddlename/log4js-node/issues" + }, + "dependencies": { + "debug": "^2.2.0", + "semver": "^5.3.0", + "streamroller": "^0.4.0" + }, + "description": "Port of Log4js to work with node.", + "devDependencies": { + "jshint": "^2.9.2", + "sandboxed-module": "0.1.3", + "tape": "^4.6.2", + "vows": "0.7.0" + }, + "directories": { + "test": "test", + "lib": "lib" + }, + "dist": { + "shasum": "c21d29c7604089e4f255833e7f94b3461de1ff43", + "tarball": "https://registry.npmjs.org/log4js/-/log4js-1.1.1.tgz" + }, + "engines": { + "node": ">=0.12" + }, + "gitHead": "1fb4f2f8723e6837dc3269970841184684238f74", + "homepage": "https://github.com/nomiddlename/log4js-node#readme", + "keywords": [ + "logging", + "log", + "log4j", + "node" + ], + "license": "Apache-2.0", + "main": "./lib/log4js", + "maintainers": [ + { + "name": "csausdev", + "email": "gareth.jones@sensis.com.au" + } + ], + "name": "log4js", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/nomiddlename/log4js-node.git" + }, + "scripts": { + "pretest": "jshint lib/ test/", + "test": "tape 'test/tape/**/*.js' && vows test/vows/*.js" + }, + "version": "1.1.1" +} diff --git a/node_modules/log4js/test/tape/default-settings-test.js b/node_modules/log4js/test/tape/default-settings-test.js new file mode 100644 index 0000000..81f61f7 --- /dev/null +++ b/node_modules/log4js/test/tape/default-settings-test.js @@ -0,0 +1,33 @@ +"use strict"; +var test = require('tape') +, sandbox = require('sandboxed-module'); + +test('default settings', function(t) { + var output = [] + , log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + './appenders/stdout': { + 'name': 'stdout', + 'appender': function () { + return function(evt) { + output.push(evt); + }; + }, + 'configure': function (config) { + return this.appender(); + } + } + } + } + ) + , logger = log4js.getLogger("default-settings"); + + logger.info("This should go to stdout."); + + t.plan(2); + t.equal(output.length, 1, "It should log to stdout."); + t.equal(output[0].data[0], "This should go to stdout.", "It should log the message."); + t.end(); +}); diff --git a/node_modules/log4js/test/tape/file-sighup-test.js b/node_modules/log4js/test/tape/file-sighup-test.js new file mode 100644 index 0000000..b6e107c --- /dev/null +++ b/node_modules/log4js/test/tape/file-sighup-test.js @@ -0,0 +1,37 @@ +"use strict"; +var test = require('tape') +, sandbox = require('sandboxed-module'); + +test('file appender SIGHUP', function(t) { + var closeCalled = 0 + , openCalled = 0 + , appender = sandbox.require( + '../../lib/appenders/file', + { + 'requires': { + 'streamroller': { + 'RollingFileStream': function() { + this.openTheStream = function() { + openCalled++; + }; + + this.closeTheStream = function(cb) { + closeCalled++; + cb(); + }; + + this.on = function() {}; + } + } + } + } + ).appender('sighup-test-file'); + + process.kill(process.pid, 'SIGHUP'); + t.plan(2); + setTimeout(function() { + t.equal(openCalled, 1, 'open should be called once'); + t.equal(closeCalled, 1, 'close should be called once'); + t.end(); + }, 10); +}); diff --git a/node_modules/log4js/test/tape/multiprocess-shutdown-test.js b/node_modules/log4js/test/tape/multiprocess-shutdown-test.js new file mode 100644 index 0000000..9e831e0 --- /dev/null +++ b/node_modules/log4js/test/tape/multiprocess-shutdown-test.js @@ -0,0 +1,30 @@ +"use strict"; +var test = require('tape') +, log4js = require('../../lib/log4js') +, net = require('net'); + +test('multiprocess appender shutdown (master)', function(t) { + log4js.configure({ + appenders: [ + { + type: "multiprocess", + mode: "master", + loggerPort: 12345, + appender: { type: "stdout" } + } + ] + }); + + t.timeoutAfter(1000, "shutdown did not happen within 1000ms"); + setTimeout(function() { + log4js.shutdown(function() { + var connection = net.connect({ port: 12345 }, function() { + t.fail("connection should not still work"); + t.end(); + }).on('error', function(err) { + t.ok(err, 'we got a connection error'); + t.end(); + }); + }); + }, 500); +}); diff --git a/node_modules/log4js/test/tape/reload-shutdown-test.js b/node_modules/log4js/test/tape/reload-shutdown-test.js new file mode 100644 index 0000000..7b26fca --- /dev/null +++ b/node_modules/log4js/test/tape/reload-shutdown-test.js @@ -0,0 +1,33 @@ +"use strict"; +var test = require('tape') +, path = require('path') +, sandbox = require('sandboxed-module'); + +test('Reload configuration shutdown hook', function(t) { + var timerId + , log4js = sandbox.require( + '../../lib/log4js', + { + globals: { + clearInterval: function(id) { + timerId = id; + }, + setInterval: function(fn, time) { + return "1234"; + } + } + } + ); + + log4js.configure( + path.join(__dirname, 'test-config.json'), + { reloadSecs: 30 } + ); + + t.plan(1); + log4js.shutdown(function() { + t.equal(timerId, "1234", "Shutdown should clear the reload timer"); + t.end(); + }); + +}); diff --git a/node_modules/log4js/test/tape/stderrAppender-test.js b/node_modules/log4js/test/tape/stderrAppender-test.js new file mode 100644 index 0000000..1c949e3 --- /dev/null +++ b/node_modules/log4js/test/tape/stderrAppender-test.js @@ -0,0 +1,22 @@ +"use strict"; +var test = require('tape') +, layouts = require('../../lib/layouts') +, sandbox = require('sandboxed-module'); + +test('stderr appender', function(t) { + var output = [] + , appender = sandbox.require( + '../../lib/appenders/stderr', + { + globals: { + process: { stderr: { write : function(data) { output.push(data); } } } + } + } + ).appender(layouts.messagePassThroughLayout); + + appender({ data: ["biscuits"] }); + t.plan(2); + t.equal(output.length, 1, 'There should be one message.'); + t.equal(output[0], 'biscuits\n', 'The message should be biscuits.'); + t.end(); +}); diff --git a/node_modules/log4js/test/tape/stdoutAppender-test.js b/node_modules/log4js/test/tape/stdoutAppender-test.js new file mode 100644 index 0000000..32c9b83 --- /dev/null +++ b/node_modules/log4js/test/tape/stdoutAppender-test.js @@ -0,0 +1,22 @@ +"use strict"; +var test = require('tape') +, layouts = require('../../lib/layouts') +, sandbox = require('sandboxed-module'); + +test('stdout appender', function(t) { + var output = [] + , appender = sandbox.require( + '../../lib/appenders/stdout', + { + globals: { + process: { stdout: { write : function(data) { output.push(data); } } } + } + } + ).appender(layouts.messagePassThroughLayout); + + appender({ data: ["cheese"] }); + t.plan(2); + t.equal(output.length, 1, 'There should be one message.'); + t.equal(output[0], 'cheese\n', 'The message should be cheese.'); + t.end(); +}); diff --git a/node_modules/log4js/test/tape/test-config.json b/node_modules/log4js/test/tape/test-config.json new file mode 100644 index 0000000..2a69651 --- /dev/null +++ b/node_modules/log4js/test/tape/test-config.json @@ -0,0 +1,5 @@ +{ + "appenders": [ + { "type": "stdout" } + ] +} diff --git a/node_modules/log4js/test/vows/categoryFilter-test.js b/node_modules/log4js/test/vows/categoryFilter-test.js new file mode 100644 index 0000000..4a4c4ff --- /dev/null +++ b/node_modules/log4js/test/vows/categoryFilter-test.js @@ -0,0 +1,84 @@ +'use strict'; + +var vows = require('vows') +, fs = require('fs') +, assert = require('assert') +, EOL = require('os').EOL || '\n'; + +function remove(filename) { + try { + fs.unlinkSync(filename); + } catch (e) { + //doesn't really matter if it failed + } +} + +vows.describe('log4js categoryFilter').addBatch({ + 'appender': { + topic: function() { + + var log4js = require('../../lib/log4js'), logEvents = [], webLogger, appLogger; + log4js.clearAppenders(); + var appender = require('../../lib/appenders/categoryFilter') + .appender( + ['app'], + function(evt) { logEvents.push(evt); } + ); + log4js.addAppender(appender, ["app","web"]); + + webLogger = log4js.getLogger("web"); + appLogger = log4js.getLogger("app"); + + webLogger.debug('This should get logged'); + appLogger.debug('This should not'); + webLogger.debug('Hello again'); + log4js.getLogger('db').debug('This shouldn\'t be included by the appender anyway'); + + return logEvents; + }, + 'should only pass matching category' : function(logEvents) { + assert.equal(logEvents.length, 2); + assert.equal(logEvents[0].data[0], 'This should get logged'); + assert.equal(logEvents[1].data[0], 'Hello again'); + } + }, + + 'configure': { + topic: function() { + var log4js = require('../../lib/log4js') + , logger, weblogger; + + remove(__dirname + '/categoryFilter-web.log'); + remove(__dirname + '/categoryFilter-noweb.log'); + + log4js.configure('test/vows/with-categoryFilter.json'); + logger = log4js.getLogger("app"); + weblogger = log4js.getLogger("web"); + + logger.info('Loading app'); + logger.debug('Initialising indexes'); + weblogger.info('00:00:00 GET / 200'); + weblogger.warn('00:00:00 GET / 500'); + //wait for the file system to catch up + setTimeout(this.callback, 500); + }, + 'tmp-tests.log': { + topic: function() { + fs.readFile(__dirname + '/categoryFilter-noweb.log', 'utf8', this.callback); + }, + 'should contain all log messages': function(contents) { + var messages = contents.trim().split(EOL); + assert.deepEqual(messages, ['Loading app','Initialising indexes']); + } + }, + 'tmp-tests-web.log': { + topic: function() { + fs.readFile(__dirname + '/categoryFilter-web.log','utf8',this.callback); + }, + 'should contain only error and warning log messages': function(contents) { + var messages = contents.trim().split(EOL); + assert.deepEqual(messages, ['00:00:00 GET / 200','00:00:00 GET / 500']); + } + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/clusteredAppender-test.js b/node_modules/log4js/test/vows/clusteredAppender-test.js new file mode 100644 index 0000000..5de0e4a --- /dev/null +++ b/node_modules/log4js/test/vows/clusteredAppender-test.js @@ -0,0 +1,166 @@ +"use strict"; +var assert = require('assert'); +var vows = require('vows'); +var layouts = require('../../lib/layouts'); +var sandbox = require('sandboxed-module'); +var LoggingEvent = require('../../lib/logger').LoggingEvent; +var cluster = require('cluster'); + +vows.describe('log4js cluster appender').addBatch({ + 'when in master mode': { + topic: function() { + + var registeredClusterEvents = []; + var loggingEvents = []; + var onChildProcessForked; + var onMasterReceiveChildMessage; + + // Fake cluster module, so no real cluster listeners be really added + var fakeCluster = { + + on: function(event, callback) { + registeredClusterEvents.push(event); + onChildProcessForked = callback; + }, + + isMaster: true, + isWorker: false, + + }; + var fakeWorker = { + on: function(event, callback) { + onMasterReceiveChildMessage = callback; + }, + process: { + pid: 123 + }, + id: 'workerid' + }; + + var fakeActualAppender = function(loggingEvent) { + loggingEvents.push(loggingEvent); + }; + + // Load appender and fake modules in it + var appenderModule = sandbox.require('../../lib/appenders/clustered', { + requires: { + 'cluster': fakeCluster, + } + }); + + var masterAppender = appenderModule.appender({ + actualAppenders: [fakeActualAppender, fakeActualAppender, fakeActualAppender], + appenders: [{}, {category: "test"}, {category: "wovs"}] + }); + + // Actual test - log message using masterAppender + masterAppender(new LoggingEvent('wovs', 'Info', ['masterAppender test'])); + + // Simulate a 'fork' event to register the master's message handler on our fake worker. + onChildProcessForked(fakeWorker); + // Simulate a cluster message received by the masterAppender. + var simulatedLoggingEvent = new LoggingEvent( + 'wovs', + 'Error', + [ + 'message deserialization test', + {stack: 'my wrapped stack'} + ] + ); + onMasterReceiveChildMessage({ + type : '::log-message', + event : JSON.stringify(simulatedLoggingEvent) + }); + + var returnValue = { + registeredClusterEvents: registeredClusterEvents, + loggingEvents: loggingEvents, + }; + + return returnValue; + }, + + "should register 'fork' event listener on 'cluster'": function(topic) { + assert.equal(topic.registeredClusterEvents[0], 'fork'); + }, + + "should log using actual appender": function(topic) { + assert.equal(topic.loggingEvents.length, 4); + assert.equal(topic.loggingEvents[0].data[0], 'masterAppender test'); + assert.equal(topic.loggingEvents[1].data[0], 'masterAppender test'); + assert.equal(topic.loggingEvents[2].data[0], 'message deserialization test'); + assert.equal(topic.loggingEvents[2].data[1], 'my wrapped stack'); + assert.equal(topic.loggingEvents[3].data[0], 'message deserialization test'); + assert.equal(topic.loggingEvents[3].data[1], 'my wrapped stack'); + }, + + }, + + 'when in worker mode': { + + topic: function() { + + var registeredProcessEvents = []; + + // Fake cluster module, to fake we're inside a worker process + var fakeCluster = { + + isMaster: false, + isWorker: true, + + }; + + var fakeProcess = { + + send: function(data) { + registeredProcessEvents.push(data); + }, + + }; + + // Load appender and fake modules in it + var appenderModule = sandbox.require('../../lib/appenders/clustered', { + requires: { + 'cluster': fakeCluster, + }, + globals: { + 'process': fakeProcess, + } + }); + + var workerAppender = appenderModule.appender(); + + // Actual test - log message using masterAppender + workerAppender(new LoggingEvent('wovs', 'Info', ['workerAppender test'])); + workerAppender(new LoggingEvent('wovs', 'Info', [new Error('Error test')])); + + var returnValue = { + registeredProcessEvents: registeredProcessEvents, + }; + + return returnValue; + + }, + + "worker appender should call process.send" : function(topic) { + assert.equal(topic.registeredProcessEvents[0].type, '::log-message'); + assert.equal( + JSON.parse(topic.registeredProcessEvents[0].event).data[0], + "workerAppender test" + ); + }, + + "worker should serialize an Error correctly" : function(topic) { + assert.equal(topic.registeredProcessEvents[1].type, '::log-message'); + assert(JSON.parse(topic.registeredProcessEvents[1].event).data[0].stack); + var actual = JSON.parse(topic.registeredProcessEvents[1].event).data[0].stack; + var expectedRegex = /^Error: Error test/; + assert( + actual.match(expectedRegex), + "Expected: \n\n " + actual + "\n\n to match " + expectedRegex + ); + } + + } + +}).exportTo(module); diff --git a/node_modules/log4js/test/vows/configuration-test.js b/node_modules/log4js/test/vows/configuration-test.js new file mode 100644 index 0000000..aa22f26 --- /dev/null +++ b/node_modules/log4js/test/vows/configuration-test.js @@ -0,0 +1,149 @@ +"use strict"; +var assert = require('assert') +, vows = require('vows') +, sandbox = require('sandboxed-module'); + +function makeTestAppender() { + return { + configure: function(config, options) { + this.configureCalled = true; + this.config = config; + this.options = options; + return this.appender(); + }, + appender: function() { + var self = this; + return function(logEvt) { self.logEvt = logEvt; }; + } + }; +} + +vows.describe('log4js configure').addBatch({ + 'appenders': { + 'when specified by type': { + topic: function() { + var testAppender = makeTestAppender(), + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + './appenders/cheese': testAppender + } + } + ); + log4js.configure( + { + appenders: [ + { type: "cheese", flavour: "gouda" } + ] + }, + { pants: "yes" } + ); + return testAppender; + }, + 'should load appender': function(testAppender) { + assert.ok(testAppender.configureCalled); + }, + 'should pass config to appender': function(testAppender) { + assert.equal(testAppender.config.flavour, 'gouda'); + }, + 'should pass log4js options to appender': function(testAppender) { + assert.equal(testAppender.options.pants, 'yes'); + } + }, + 'when core appender loaded via loadAppender': { + topic: function() { + var testAppender = makeTestAppender(), + log4js = sandbox.require( + '../../lib/log4js', + { requires: { './appenders/cheese': testAppender } } + ); + + log4js.loadAppender('cheese'); + return log4js; + }, + 'should load appender from ../../lib/appenders': function(log4js) { + assert.ok(log4js.appenders.cheese); + }, + 'should add appender configure function to appenderMakers' : function(log4js) { + assert.isFunction(log4js.appenderMakers.cheese); + } + }, + 'when appender in node_modules loaded via loadAppender': { + topic: function() { + var testAppender = makeTestAppender(), + log4js = sandbox.require( + '../../lib/log4js', + { requires: { 'some/other/external': testAppender } } + ); + log4js.loadAppender('some/other/external'); + return log4js; + }, + 'should load appender via require': function(log4js) { + assert.ok(log4js.appenders['some/other/external']); + }, + 'should add appender configure function to appenderMakers': function(log4js) { + assert.isFunction(log4js.appenderMakers['some/other/external']); + } + }, + 'when appender object loaded via loadAppender': { + topic: function() { + var testAppender = makeTestAppender(), + log4js = sandbox.require('../../lib/log4js'); + + log4js.loadAppender('some/other/external', testAppender); + return log4js; + }, + 'should load appender with provided object': function(log4js) { + assert.ok(log4js.appenders['some/other/external']); + }, + 'should add appender configure function to appenderMakers': function(log4js) { + assert.isFunction(log4js.appenderMakers['some/other/external']); + } + }, + 'when configuration file loaded via LOG4JS_CONFIG environment variable': { + topic: function() { + process.env.LOG4JS_CONFIG = 'some/path/to/mylog4js.json'; + var fileRead = 0, + modulePath = 'some/path/to/mylog4js.json', + pathsChecked = [], + mtime = new Date(), + fakeFS = { + config: { appenders: [ { type: 'console', layout: { type: 'messagePassThrough' } } ], + levels: { 'a-test' : 'INFO' } }, + readdirSync: function(dir) { + return require('fs').readdirSync(dir); + }, + readFileSync: function (file, encoding) { + fileRead += 1; + assert.isString(file); + assert.equal(file, modulePath); + assert.equal(encoding, 'utf8'); + return JSON.stringify(fakeFS.config); + }, + statSync: function (path) { + pathsChecked.push(path); + if (path === modulePath) { + return { mtime: mtime }; + } else { + throw new Error("no such file"); + } + } + }, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + 'fs': fakeFS, + } + } + ); + delete process.env.LOG4JS_CONFIG; + return fileRead; + }, + 'should load the specified local configuration file' : function(fileRead) { + assert.equal(fileRead, 1); + } + } + } +}).exportTo(module); diff --git a/node_modules/log4js/test/vows/configureNoLevels-test.js b/node_modules/log4js/test/vows/configureNoLevels-test.js new file mode 100644 index 0000000..2c63e2f --- /dev/null +++ b/node_modules/log4js/test/vows/configureNoLevels-test.js @@ -0,0 +1,173 @@ +"use strict"; +// This test shows unexpected behaviour for log4js.configure() in log4js-node@0.4.3 and earlier: +// 1) log4js.configure(), log4js.configure(null), +// log4js.configure({}), log4js.configure() +// all set all loggers levels to trace, even if they were previously set to something else. +// 2) log4js.configure({levels:{}}), log4js.configure({levels: {foo: +// bar}}) leaves previously set logger levels intact. +// + +// Basic set up +var vows = require('vows'); +var assert = require('assert'); +var toLevel = require('../../lib/levels').toLevel; + +// uncomment one or other of the following to see progress (or not) while running the tests +// var showProgress = console.log; +var showProgress = function() {}; + + +// Define the array of levels as string to iterate over. +var strLevels= ['Trace','Debug','Info','Warn','Error','Fatal']; + +// setup the configurations we want to test +var configs = { + 'nop': 'nop', // special case where the iterating vows generator will not call log4js.configure + 'is undefined': undefined, + 'is null': null, + 'is empty': {}, + 'has no levels': {foo: 'bar'}, + 'has null levels': {levels: null}, + 'has empty levels': {levels: {}}, + 'has random levels': {levels: {foo: 'bar'}}, + 'has some valid levels': {levels: {A: 'INFO'}} +}; + +// Set up the basic vows batches for this test +var batches = []; + + +function getLoggerName(level) { + return level+'-logger'; +} + +// the common vows top-level context, whether log4js.configure is called or not +// just making sure that the code is common, +// so that there are no spurious errors in the tests themselves. +function getTopLevelContext(nop, configToTest, name) { + return { + topic: function() { + var log4js = require('../../lib/log4js'); + // create loggers for each level, + // keeping the level in the logger's name for traceability + strLevels.forEach(function(l) { + log4js.getLogger(getLoggerName(l)).setLevel(l); + }); + + if (!nop) { + showProgress('** Configuring log4js with', configToTest); + log4js.configure(configToTest); + } + else { + showProgress('** Not configuring log4js'); + } + return log4js; + } + }; +} + +showProgress('Populating batch object...'); + +function checkForMismatch(topic) { + var er = topic.log4js.levels.toLevel(topic.baseLevel) + .isLessThanOrEqualTo(topic.log4js.levels.toLevel(topic.comparisonLevel)); + + assert.equal( + er, + topic.expectedResult, + 'Mismatch: for setLevel(' + topic.baseLevel + + ') was expecting a comparison with ' + topic.comparisonLevel + + ' to be ' + topic.expectedResult + ); +} + +function checkExpectedResult(topic) { + var result = topic.log4js + .getLogger(getLoggerName(topic.baseLevel)) + .isLevelEnabled(topic.log4js.levels.toLevel(topic.comparisonLevel)); + + assert.equal( + result, + topic.expectedResult, + 'Failed: ' + getLoggerName(topic.baseLevel) + + '.isLevelEnabled( ' + topic.comparisonLevel + ' ) returned ' + result + ); +} + +function setupBaseLevelAndCompareToOtherLevels(baseLevel) { + var baseLevelSubContext = 'and checking the logger whose level was set to '+baseLevel ; + var subContext = { topic: baseLevel }; + batch[context][baseLevelSubContext] = subContext; + + // each logging level has strLevels sub-contexts, + // to exhaustively test all the combinations of + // setLevel(baseLevel) and isLevelEnabled(comparisonLevel) per config + strLevels.forEach(compareToOtherLevels(subContext)); +} + +function compareToOtherLevels(subContext) { + var baseLevel = subContext.topic; + + return function (comparisonLevel) { + var comparisonLevelSubContext = 'with isLevelEnabled('+comparisonLevel+')'; + + // calculate this independently of log4js, but we'll add a vow + // later on to check that we're not mismatched with log4js + var expectedResult = strLevels.indexOf(baseLevel) <= strLevels.indexOf(comparisonLevel); + + // the topic simply gathers all the parameters for the vow + // into an object, to simplify the vow's work. + subContext[comparisonLevelSubContext] = { + topic: function(baseLevel, log4js) { + return { + comparisonLevel: comparisonLevel, + baseLevel: baseLevel, + log4js: log4js, + expectedResult: expectedResult + }; + } + }; + + var vow = 'should return '+expectedResult; + subContext[comparisonLevelSubContext][vow] = checkExpectedResult; + + // the extra vow to check the comparison between baseLevel and + // comparisonLevel we performed earlier matches log4js' + // comparison too + var subSubContext = subContext[comparisonLevelSubContext]; + subSubContext['finally checking for comparison mismatch with log4js'] = checkForMismatch; + }; +} + +// Populating the batches programmatically, as there are +// (configs.length x strLevels.length x strLevels.length) = 324 +// possible test combinations +for (var cfg in configs) { + var configToTest = configs[cfg]; + var nop = configToTest === 'nop'; + var context; + if (nop) { + context = 'Setting up loggers with initial levels, then NOT setting a configuration,'; + } + else { + context = 'Setting up loggers with initial levels, then setting a configuration which '+cfg+','; + } + + showProgress('Setting up the vows batch and context for '+context); + // each config to be tested has its own vows batch with a single top-level context + var batch={}; + batch[context]= getTopLevelContext(nop, configToTest, context); + batches.push(batch); + + // each top-level context has strLevels sub-contexts, one per logger + // which has set to a specific level in the top-level context's topic + strLevels.forEach(setupBaseLevelAndCompareToOtherLevels); +} + +showProgress('Running tests'); +var v = vows.describe('log4js.configure(), with or without a "levels" property'); + +batches.forEach(function(batch) {v=v.addBatch(batch);}); + +v.export(module); + diff --git a/node_modules/log4js/test/vows/connect-logger-test.js b/node_modules/log4js/test/vows/connect-logger-test.js new file mode 100644 index 0000000..c81d550 --- /dev/null +++ b/node_modules/log4js/test/vows/connect-logger-test.js @@ -0,0 +1,303 @@ +/* jshint maxparams:7 */ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, util = require('util') +, EE = require('events').EventEmitter +, levels = require('../../lib/levels'); + +function MockLogger() { + + var that = this; + this.messages = []; + + this.log = function(level, message, exception) { + that.messages.push({ level: level, message: message }); + }; + + this.isLevelEnabled = function(level) { + return level.isGreaterThanOrEqualTo(that.level); + }; + + this.level = levels.TRACE; + +} + +function MockRequest(remoteAddr, method, originalUrl, headers) { + + this.socket = { remoteAddress: remoteAddr }; + this.originalUrl = originalUrl; + this.method = method; + this.httpVersionMajor = '5'; + this.httpVersionMinor = '0'; + this.headers = headers || {}; + + var self = this; + Object.keys(this.headers).forEach(function(key) { + self.headers[key.toLowerCase()] = self.headers[key]; + }); +} + +function MockResponse() { + var r = this; + this.end = function(chunk, encoding) { + r.emit('finish'); + }; + + this.writeHead = function(code, headers) { + this.statusCode = code; + this._headers = headers; + }; +} + +util.inherits(MockResponse, EE); + +function request(cl, method, url, code, reqHeaders, resHeaders) { + var req = new MockRequest('my.remote.addr', method, url, reqHeaders); + var res = new MockResponse(); + cl(req, res, function() {}); + res.writeHead(code, resHeaders); + res.end('chunk','encoding'); +} + +vows.describe('log4js connect logger').addBatch({ + 'getConnectLoggerModule': { + topic: function() { + var clm = require('../../lib/connect-logger'); + return clm; + }, + + 'should return a "connect logger" factory' : function(clm) { + assert.isObject(clm); + }, + + 'take a log4js logger and return a "connect logger"' : { + topic: function(clm) { + var ml = new MockLogger(); + var cl = clm.connectLogger(ml); + return cl; + }, + + 'should return a "connect logger"': function(cl) { + assert.isFunction(cl); + } + }, + + 'log events' : { + topic: function(clm) { + var ml = new MockLogger(); + var cl = clm.connectLogger(ml); + var cb = this.callback; + request(cl, 'GET', 'http://url', 200); + setTimeout(function() { + cb(null, ml.messages); + },10); + }, + + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.include(messages[0].message, 'GET'); + assert.include(messages[0].message, 'http://url'); + assert.include(messages[0].message, 'my.remote.addr'); + assert.include(messages[0].message, '200'); + } + }, + + 'log events with level below logging level' : { + topic: function(clm) { + var ml = new MockLogger(); + ml.level = levels.FATAL; + var cl = clm.connectLogger(ml); + request(cl, 'GET', 'http://url', 200); + return ml.messages; + }, + + 'check message': function(messages) { + assert.isArray(messages); + assert.isEmpty(messages); + } + }, + + 'log events with non-default level and custom format' : { + topic: function(clm) { + var ml = new MockLogger(); + var cb = this.callback; + ml.level = levels.INFO; + var cl = clm.connectLogger(ml, { level: levels.INFO, format: ':method :url' } ); + request(cl, 'GET', 'http://url', 200); + setTimeout(function() { + cb(null, ml.messages); + },10); }, + + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.equal(messages[0].message, 'GET http://url'); + } + }, + + 'logger with options as string': { + topic: function(clm) { + var ml = new MockLogger(); + var cb = this.callback; + ml.level = levels.INFO; + var cl = clm.connectLogger(ml, ':method :url'); + request(cl, 'POST', 'http://meh', 200); + setTimeout(function() { + cb(null, ml.messages); + },10); + }, + 'should use the passed in format': function(messages) { + assert.equal(messages[0].message, 'POST http://meh'); + } + }, + + 'auto log levels': { + topic: function(clm) { + var ml = new MockLogger(); + var cb = this.callback; + ml.level = levels.INFO; + var cl = clm.connectLogger(ml, { level: 'auto', format: ':method :url' }); + request(cl, 'GET', 'http://meh', 200); + request(cl, 'GET', 'http://meh', 201); + request(cl, 'GET', 'http://meh', 302); + request(cl, 'GET', 'http://meh', 404); + request(cl, 'GET', 'http://meh', 500); + setTimeout(function() { + cb(null, ml.messages); + },10); + }, + + 'should use INFO for 2xx': function(messages) { + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.ok(levels.INFO.isEqualTo(messages[1].level)); + }, + + 'should use WARN for 3xx': function(messages) { + assert.ok(levels.WARN.isEqualTo(messages[2].level)); + }, + + 'should use ERROR for 4xx': function(messages) { + assert.ok(levels.ERROR.isEqualTo(messages[3].level)); + }, + + 'should use ERROR for 5xx': function(messages) { + assert.ok(levels.ERROR.isEqualTo(messages[4].level)); + } + }, + + 'format using a function': { + topic: function(clm) { + var ml = new MockLogger(); + var cb = this.callback; + ml.level = levels.INFO; + var cl = clm.connectLogger(ml, function(req, res, formatFn) { return "I was called"; }); + request(cl, 'GET', 'http://blah', 200); + setTimeout(function() { + cb(null, ml.messages); + },10); + }, + + 'should call the format function': function(messages) { + assert.equal(messages[0].message, 'I was called'); + } + }, + + 'format that includes request headers': { + topic: function(clm) { + var ml = new MockLogger(); + var cb = this.callback; + ml.level = levels.INFO; + var cl = clm.connectLogger(ml, ':req[Content-Type]'); + request( + cl, + 'GET', 'http://blah', 200, + { 'Content-Type': 'application/json' } + ); + setTimeout(function() { + cb(null, ml.messages); + },10); + }, + 'should output the request header': function(messages) { + assert.equal(messages[0].message, 'application/json'); + } + }, + + 'format that includes response headers': { + topic: function(clm) { + var ml = new MockLogger(); + var cb = this.callback; + ml.level = levels.INFO; + var cl = clm.connectLogger(ml, ':res[Content-Type]'); + request( + cl, + 'GET', 'http://blah', 200, + null, + { 'Content-Type': 'application/cheese' } + ); + setTimeout(function() { + cb(null, ml.messages); + },10); + }, + + 'should output the response header': function(messages) { + assert.equal(messages[0].message, 'application/cheese'); + } + }, + + 'log events with custom token' : { + topic: function(clm) { + var ml = new MockLogger(); + var cb = this.callback; + ml.level = levels.INFO; + var cl = clm.connectLogger(ml, { + level: levels.INFO, + format: ':method :url :custom_string', + tokens: [{ + token: ':custom_string', replacement: 'fooBAR' + }] + }); + request(cl, 'GET', 'http://url', 200); + setTimeout(function() { + cb(null, ml.messages); + },10); + }, + + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.equal(messages[0].message, 'GET http://url fooBAR'); + } + }, + + 'log events with custom override token' : { + topic: function(clm) { + var ml = new MockLogger(); + var cb = this.callback; + ml.level = levels.INFO; + var cl = clm.connectLogger(ml, { + level: levels.INFO, + format: ':method :url :date', + tokens: [{ + token: ':date', replacement: "20150310" + }] + }); + request(cl, 'GET', 'http://url', 200); + setTimeout(function() { + cb(null, ml.messages); + },10); + }, + + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.equal(messages[0].message, 'GET http://url 20150310'); + } + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/consoleAppender-test.js b/node_modules/log4js/test/vows/consoleAppender-test.js new file mode 100644 index 0000000..9ac24c4 --- /dev/null +++ b/node_modules/log4js/test/vows/consoleAppender-test.js @@ -0,0 +1,33 @@ +"use strict"; +var assert = require('assert') +, vows = require('vows') +, layouts = require('../../lib/layouts') +, sandbox = require('sandboxed-module'); + +vows.describe('../../lib/appenders/console').addBatch({ + 'appender': { + topic: function() { + var messages = [] + , fakeConsole = { + log: function(msg) { messages.push(msg); } + } + , appenderModule = sandbox.require( + '../../lib/appenders/console', + { + globals: { + 'console': fakeConsole + } + } + ) + , appender = appenderModule.appender(layouts.messagePassThroughLayout); + + appender({ data: ["blah"] }); + return messages; + }, + + 'should output to console': function(messages) { + assert.equal(messages[0], 'blah'); + } + } + +}).exportTo(module); diff --git a/node_modules/log4js/test/vows/dateFileAppender-test.js b/node_modules/log4js/test/vows/dateFileAppender-test.js new file mode 100644 index 0000000..5bea92e --- /dev/null +++ b/node_modules/log4js/test/vows/dateFileAppender-test.js @@ -0,0 +1,223 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, path = require('path') +, fs = require('fs') +, sandbox = require('sandboxed-module') +, log4js = require('../../lib/log4js') +, EOL = require('os').EOL || '\n'; + +function removeFile(filename) { + return function() { + fs.unlink(path.join(__dirname, filename), function(err) { + if (err) { + console.log("Could not delete ", filename, err); + } + }); + }; +} + +vows.describe('../../lib/appenders/dateFile').addBatch({ + 'appender': { + 'adding multiple dateFileAppenders': { + topic: function () { + var listenersCount = process.listeners('exit').length, + dateFileAppender = require('../../lib/appenders/dateFile'), + count = 5, + logfile; + + while (count--) { + logfile = path.join(__dirname, 'datefa-default-test' + count + '.log'); + log4js.addAppender(dateFileAppender.appender(logfile)); + } + + return listenersCount; + }, + teardown: function() { + removeFile('datefa-default-test0.log')(); + removeFile('datefa-default-test1.log')(); + removeFile('datefa-default-test2.log')(); + removeFile('datefa-default-test3.log')(); + removeFile('datefa-default-test4.log')(); + }, + + 'should only add one `exit` listener': function (initialCount) { + assert.equal(process.listeners('exit').length, initialCount + 1); + }, + + }, + + 'exit listener': { + topic: function() { + var exitListener + , openedFiles = [] + , dateFileAppender = sandbox.require( + '../../lib/appenders/dateFile', + { + globals: { + process: { + on: function(evt, listener) { + exitListener = listener; + } + } + }, + requires: { + 'streamroller': { + DateRollingFileStream: function(filename) { + openedFiles.push(filename); + + this.end = function() { + openedFiles.shift(); + }; + } + } + } + } + ); + for (var i=0; i < 5; i += 1) { + dateFileAppender.appender('test' + i); + } + assert.isNotEmpty(openedFiles); + exitListener(); + return openedFiles; + }, + 'should close all open files': function(openedFiles) { + assert.isEmpty(openedFiles); + } + }, + + 'with default settings': { + topic: function() { + var that = this, + testFile = path.join(__dirname, 'date-appender-default.log'), + appender = require('../../lib/appenders/dateFile').appender(testFile), + logger = log4js.getLogger('default-settings'); + log4js.clearAppenders(); + log4js.addAppender(appender, 'default-settings'); + + logger.info("This should be in the file."); + + setTimeout(function() { + fs.readFile(testFile, "utf8", that.callback); + }, 100); + + }, + teardown: removeFile('date-appender-default.log'), + + 'should write to the file': function(contents) { + assert.include(contents, 'This should be in the file'); + }, + + 'should use the basic layout': function(contents) { + assert.match( + contents, + /\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}\] \[INFO\] default-settings - / + ); + } + } + + } +}).addBatch({ + 'configure': { + 'with dateFileAppender': { + topic: function() { + var log4js = require('../../lib/log4js') + , logger; + //this config file defines one file appender (to ./date-file-test.log) + //and sets the log level for "tests" to WARN + log4js.configure('test/vows/with-dateFile.json'); + logger = log4js.getLogger('tests'); + logger.info('this should not be written to the file'); + logger.warn('this should be written to the file'); + + fs.readFile(path.join(__dirname, 'date-file-test.log'), 'utf8', this.callback); + }, + teardown: removeFile('date-file-test.log'), + + 'should load appender configuration from a json file': function(err, contents) { + if (err) { + throw err; + } + assert.include(contents, 'this should be written to the file' + EOL); + assert.equal(contents.indexOf('this should not be written to the file'), -1); + } + }, + 'with options.alwaysIncludePattern': { + topic: function() { + var self = this + , log4js = require('../../lib/log4js') + , format = require('../../lib/date_format') + , logger + , options = { + "appenders": [ + { + "category": "tests", + "type": "dateFile", + "filename": "test/vows/date-file-test", + "pattern": "-from-MM-dd.log", + "alwaysIncludePattern": true, + "layout": { + "type": "messagePassThrough" + } + } + ] + } + , thisTime = format.asString(options.appenders[0].pattern, new Date()); + fs.writeFileSync( + path.join(__dirname, 'date-file-test' + thisTime), + "this is existing data" + EOL, + 'utf8' + ); + log4js.clearAppenders(); + log4js.configure(options); + logger = log4js.getLogger('tests'); + logger.warn('this should be written to the file with the appended date'); + this.teardown = removeFile('date-file-test' + thisTime); + //wait for filesystem to catch up + setTimeout(function() { + fs.readFile(path.join(__dirname, 'date-file-test' + thisTime), 'utf8', self.callback); + }, 100); + }, + 'should create file with the correct pattern': function(contents) { + assert.include(contents, 'this should be written to the file with the appended date'); + }, + 'should not overwrite the file on open (bug found in issue #132)': function(contents) { + assert.include(contents, 'this is existing data'); + } + }, + 'with cwd option': { + topic: function () { + var fileOpened, + appender = sandbox.require( + '../../lib/appenders/dateFile', + { requires: + { 'streamroller': + { DateRollingFileStream: + function(file) { + fileOpened = file; + return { + on: function() {}, + end: function() {} + }; + } + } + } + } + ); + appender.configure( + { + filename: "whatever.log", + maxLogSize: 10 + }, + { cwd: '/absolute/path/to' } + ); + return fileOpened; + }, + 'should prepend options.cwd to config.filename': function (fileOpened) { + var expected = path.sep + path.join("absolute", "path", "to", "whatever.log"); + assert.equal(fileOpened, expected); + } + } + + } +}).exportTo(module); diff --git a/node_modules/log4js/test/vows/date_format-test.js b/node_modules/log4js/test/vows/date_format-test.js new file mode 100644 index 0000000..a6fe52e --- /dev/null +++ b/node_modules/log4js/test/vows/date_format-test.js @@ -0,0 +1,58 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, dateFormat = require('../../lib/date_format'); + +function createFixedDate() { + return new Date(2010, 0, 11, 14, 31, 30, 5); +} + +vows.describe('date_format').addBatch({ + 'Date extensions': { + topic: createFixedDate, + 'should format a date as string using a pattern': function(date) { + assert.equal( + dateFormat.asString(dateFormat.DATETIME_FORMAT, date), + "11 01 2010 14:31:30.005" + ); + }, + 'should default to the ISO8601 format': function(date) { + assert.equal( + dateFormat.asString(date), + '2010-01-11 14:31:30.005' + ); + }, + 'should provide a ISO8601 with timezone offset format': function() { + var date = createFixedDate(); + date.setMinutes(date.getMinutes() - date.getTimezoneOffset() - 660); + date.getTimezoneOffset = function() { return -660; }; + assert.equal( + dateFormat.asString(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, date), + "2010-01-11T14:31:30.005+1100" + ); + date = createFixedDate(); + date.setMinutes(date.getMinutes() - date.getTimezoneOffset() + 120); + date.getTimezoneOffset = function() { return 120; }; + assert.equal( + dateFormat.asString(dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT, date), + "2010-01-11T14:31:30.005-0200" + ); + + }, + 'should provide a just-the-time format': function(date) { + assert.equal( + dateFormat.asString(dateFormat.ABSOLUTETIME_FORMAT, date), + '14:31:30.005' + ); + }, + 'should provide a custom format': function() { + var date = createFixedDate(); + date.setMinutes(date.getMinutes() - date.getTimezoneOffset() + 120); + date.getTimezoneOffset = function() { return 120; }; + assert.equal( + dateFormat.asString("O.SSS.ss.mm.hh.dd.MM.yy", date), + '-0200.005.30.31.14.11.01.10' + ); + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/fileAppender-test.js b/node_modules/log4js/test/vows/fileAppender-test.js new file mode 100644 index 0000000..8f45c7e --- /dev/null +++ b/node_modules/log4js/test/vows/fileAppender-test.js @@ -0,0 +1,450 @@ +"use strict"; +var vows = require('vows') +, fs = require('fs') +, path = require('path') +, sandbox = require('sandboxed-module') +, log4js = require('../../lib/log4js') +, assert = require('assert') +, zlib = require('zlib') +, EOL = require('os').EOL || '\n'; + +log4js.clearAppenders(); + +function remove(filename) { + try { + fs.unlinkSync(filename); + } catch (e) { + //doesn't really matter if it failed + } +} + +vows.describe('log4js fileAppender').addBatch({ + 'adding multiple fileAppenders': { + topic: function () { + var listenersCount = process.listeners('exit').length + , logger = log4js.getLogger('default-settings') + , count = 5, logfile; + + while (count--) { + logfile = path.join(__dirname, 'fa-default-test' + count + '.log'); + log4js.addAppender( + require('../../lib/appenders/file').appender(logfile), + 'default-settings' + ); + } + + return listenersCount; + }, + + 'does not add more than one `exit` listener': function (initialCount) { + assert.equal(initialCount + 1, process.listeners('exit').length); + } + }, + + 'exit listener': { + topic: function() { + var exitListener + , openedFiles = [] + , fileAppender = sandbox.require( + '../../lib/appenders/file', + { + globals: { + process: { + on: function(evt, listener) { + if (evt == 'exit') { + exitListener = listener; + } + } + } + }, + requires: { + 'streamroller': { + RollingFileStream: function(filename) { + openedFiles.push(filename); + + this.end = function() { + openedFiles.shift(); + }; + + this.on = function() {}; + } + } + } + } + ); + for (var i=0; i < 5; i += 1) { + fileAppender.appender('test' + i, null, 100); + } + assert.isNotEmpty(openedFiles); + exitListener(); + return openedFiles; + }, + 'should close all open files': function(openedFiles) { + assert.isEmpty(openedFiles); + } + }, + + 'with default fileAppender settings': { + topic: function() { + var that = this + , testFile = path.join(__dirname, 'fa-default-test.log') + , logger = log4js.getLogger('default-settings'); + remove(testFile); + + log4js.clearAppenders(); + log4js.addAppender( + require('../../lib/appenders/file').appender(testFile), + 'default-settings' + ); + + logger.info("This should be in the file."); + + setTimeout(function() { + fs.readFile(testFile, "utf8", that.callback); + }, 100); + }, + 'should write log messages to the file': function (err, fileContents) { + assert.include(fileContents, "This should be in the file." + EOL); + }, + 'log messages should be in the basic layout format': function(err, fileContents) { + assert.match( + fileContents, + /\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}\] \[INFO\] default-settings - / + ); + } + }, + 'fileAppender subcategories': { + topic: function() { + var that = this; + + log4js.clearAppenders(); + + function addAppender(cat) { + var testFile = path.join( + __dirname, + 'fa-subcategories-test-'+cat.join('-').replace(/\./g, "_")+'.log' + ); + remove(testFile); + log4js.addAppender(require('../../lib/appenders/file').appender(testFile), cat); + return testFile; + } + + var file_sub1 = addAppender([ 'sub1']); + + var file_sub1_sub12$sub1_sub13 = addAppender([ 'sub1.sub12', 'sub1.sub13' ]); + + var file_sub1_sub12 = addAppender([ 'sub1.sub12' ]); + + + var logger_sub1_sub12_sub123 = log4js.getLogger('sub1.sub12.sub123'); + + var logger_sub1_sub13_sub133 = log4js.getLogger('sub1.sub13.sub133'); + + var logger_sub1_sub14 = log4js.getLogger('sub1.sub14'); + + var logger_sub2 = log4js.getLogger('sub2'); + + + logger_sub1_sub12_sub123.info('sub1_sub12_sub123'); + + logger_sub1_sub13_sub133.info('sub1_sub13_sub133'); + + logger_sub1_sub14.info('sub1_sub14'); + + logger_sub2.info('sub2'); + + + setTimeout(function() { + that.callback(null, { + file_sub1: fs.readFileSync(file_sub1).toString(), + file_sub1_sub12$sub1_sub13: fs.readFileSync(file_sub1_sub12$sub1_sub13).toString(), + file_sub1_sub12: fs.readFileSync(file_sub1_sub12).toString() + }); + }, 3000); + }, + 'check file contents': function (err, fileContents) { + + // everything but category 'sub2' + assert.match( + fileContents.file_sub1, + /^(\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}\] \[INFO\] (sub1.sub12.sub123 - sub1_sub12_sub123|sub1.sub13.sub133 - sub1_sub13_sub133|sub1.sub14 - sub1_sub14)[\s\S]){3}$/ // jshint ignore:line + ); + assert.ok( + fileContents.file_sub1.match(/sub123/) && + fileContents.file_sub1.match(/sub133/) && + fileContents.file_sub1.match(/sub14/) + ); + assert.ok(!fileContents.file_sub1.match(/sub2/)); + + // only catgories starting with 'sub1.sub12' and 'sub1.sub13' + assert.match( + fileContents.file_sub1_sub12$sub1_sub13, + /^(\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}\] \[INFO\] (sub1.sub12.sub123 - sub1_sub12_sub123|sub1.sub13.sub133 - sub1_sub13_sub133)[\s\S]){2}$/ //jshint ignore:line + ); + assert.ok( + fileContents.file_sub1_sub12$sub1_sub13.match(/sub123/) && + fileContents.file_sub1_sub12$sub1_sub13.match(/sub133/) + ); + assert.ok(!fileContents.file_sub1_sub12$sub1_sub13.match(/sub14|sub2/)); + + // only catgories starting with 'sub1.sub12' + assert.match( + fileContents.file_sub1_sub12, + /^(\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}\] \[INFO\] (sub1.sub12.sub123 - sub1_sub12_sub123)[\s\S]){1}$/ //jshint ignore:line + ); + assert.ok(!fileContents.file_sub1_sub12.match(/sub14|sub2|sub13/)); + + } + }, + 'with a max file size and no backups': { + topic: function() { + var testFile = path.join(__dirname, 'fa-maxFileSize-test.log') + , logger = log4js.getLogger('max-file-size') + , that = this; + remove(testFile); + remove(testFile + '.1'); + //log file of 100 bytes maximum, no backups + log4js.clearAppenders(); + log4js.addAppender( + require('../../lib/appenders/file').appender(testFile, log4js.layouts.basicLayout, 100, 0), + 'max-file-size' + ); + logger.info("This is the first log message."); + logger.info("This is an intermediate log message."); + logger.info("This is the second log message."); + //wait for the file system to catch up + setTimeout(function() { + fs.readFile(testFile, "utf8", that.callback); + }, 100); + }, + 'log file should only contain the second message': function(err, fileContents) { + assert.include(fileContents, "This is the second log message."); + assert.equal(fileContents.indexOf("This is the first log message."), -1); + }, + 'the number of files': { + topic: function() { + fs.readdir(__dirname, this.callback); + }, + 'starting with the test file name should be two': function(err, files) { + //there will always be one backup if you've specified a max log size + var logFiles = files.filter( + function(file) { return file.indexOf('fa-maxFileSize-test.log') > -1; } + ); + assert.equal(logFiles.length, 2); + } + } + }, + 'with a max file size and 2 backups': { + topic: function() { + var testFile = path.join(__dirname, 'fa-maxFileSize-with-backups-test.log') + , logger = log4js.getLogger('max-file-size-backups'); + remove(testFile); + remove(testFile+'.1'); + remove(testFile+'.2'); + + //log file of 50 bytes maximum, 2 backups + log4js.clearAppenders(); + log4js.addAppender( + require('../../lib/appenders/file').appender(testFile, log4js.layouts.basicLayout, 50, 2), + 'max-file-size-backups' + ); + logger.info("This is the first log message."); + logger.info("This is the second log message."); + logger.info("This is the third log message."); + logger.info("This is the fourth log message."); + var that = this; + //give the system a chance to open the stream + setTimeout(function() { + fs.readdir(__dirname, function(err, files) { + if (files) { + that.callback(null, files.sort()); + } else { + that.callback(err, files); + } + }); + }, 200); + }, + 'the log files': { + topic: function(files) { + var logFiles = files.filter( + function(file) { return file.indexOf('fa-maxFileSize-with-backups-test.log') > -1; } + ); + return logFiles; + }, + 'should be 3': function (files) { + assert.equal(files.length, 3); + }, + 'should be named in sequence': function (files) { + assert.deepEqual(files, [ + 'fa-maxFileSize-with-backups-test.log', + 'fa-maxFileSize-with-backups-test.log.1', + 'fa-maxFileSize-with-backups-test.log.2' + ]); + }, + 'and the contents of the first file': { + topic: function(logFiles) { + fs.readFile(path.join(__dirname, logFiles[0]), "utf8", this.callback); + }, + 'should be the last log message': function(contents) { + assert.include(contents, 'This is the fourth log message.'); + } + }, + 'and the contents of the second file': { + topic: function(logFiles) { + fs.readFile(path.join(__dirname, logFiles[1]), "utf8", this.callback); + }, + 'should be the third log message': function(contents) { + assert.include(contents, 'This is the third log message.'); + } + }, + 'and the contents of the third file': { + topic: function(logFiles) { + fs.readFile(path.join(__dirname, logFiles[2]), "utf8", this.callback); + }, + 'should be the second log message': function(contents) { + assert.include(contents, 'This is the second log message.'); + } + } + } + }, + 'with a max file size and 2 compressed backups': { + topic: function() { + var testFile = path.join(__dirname, 'fa-maxFileSize-with-backups-compressed-test.log') + , logger = log4js.getLogger('max-file-size-backups'); + remove(testFile); + remove(testFile+'.1.gz'); + remove(testFile+'.2.gz'); + + //log file of 50 bytes maximum, 2 backups + log4js.clearAppenders(); + log4js.addAppender( + require('../../lib/appenders/file').appender( + testFile, log4js.layouts.basicLayout, 50, 2, { compress: true } + ), + 'max-file-size-backups' + ); + logger.info("This is the first log message."); + logger.info("This is the second log message."); + logger.info("This is the third log message."); + logger.info("This is the fourth log message."); + var that = this; + //give the system a chance to open the stream + setTimeout(function() { + fs.readdir(__dirname, function(err, files) { + if (files) { + that.callback(null, files.sort()); + } else { + that.callback(err, files); + } + }); + }, 1000); + }, + 'the log files': { + topic: function(files) { + var logFiles = files.filter( + function(file) { + return file.indexOf('fa-maxFileSize-with-backups-compressed-test.log') > -1; + } + ); + return logFiles; + }, + 'should be 3': function (files) { + assert.equal(files.length, 3); + }, + 'should be named in sequence': function (files) { + assert.deepEqual(files, [ + 'fa-maxFileSize-with-backups-compressed-test.log', + 'fa-maxFileSize-with-backups-compressed-test.log.1.gz', + 'fa-maxFileSize-with-backups-compressed-test.log.2.gz' + ]); + }, + 'and the contents of the first file': { + topic: function(logFiles) { + fs.readFile(path.join(__dirname, logFiles[0]), "utf8", this.callback); + }, + 'should be the last log message': function(contents) { + assert.include(contents, 'This is the fourth log message.'); + } + }, + 'and the contents of the second file': { + topic: function(logFiles) { + zlib.gunzip(fs.readFileSync(path.join(__dirname, logFiles[1])), this.callback); + }, + 'should be the third log message': function(contents) { + assert.include(contents.toString('utf8'), 'This is the third log message.'); + } + }, + 'and the contents of the third file': { + topic: function(logFiles) { + zlib.gunzip(fs.readFileSync(path.join(__dirname, logFiles[2])), this.callback); + }, + 'should be the second log message': function(contents) { + assert.include(contents.toString('utf8'), 'This is the second log message.'); + } + } + } + } +}).addBatch({ + 'configure' : { + 'with fileAppender': { + topic: function() { + var log4js = require('../../lib/log4js') + , logger; + //this config file defines one file appender (to ./tmp-tests.log) + //and sets the log level for "tests" to WARN + log4js.configure('./test/vows/log4js.json'); + logger = log4js.getLogger('tests'); + logger.info('this should not be written to the file'); + logger.warn('this should be written to the file'); + + fs.readFile('tmp-tests.log', 'utf8', this.callback); + }, + 'should load appender configuration from a json file': function (err, contents) { + assert.include(contents, 'this should be written to the file' + EOL); + assert.equal(contents.indexOf('this should not be written to the file'), -1); + } + } + } +}).addBatch({ + 'when underlying stream errors': { + topic: function() { + var consoleArgs + , errorHandler + , fileAppender = sandbox.require( + '../../lib/appenders/file', + { + globals: { + console: { + error: function() { + consoleArgs = Array.prototype.slice.call(arguments); + } + } + }, + requires: { + 'streamroller': { + RollingFileStream: function(filename) { + + this.end = function() {}; + this.on = function(evt, cb) { + if (evt === 'error') { + errorHandler = cb; + } + }; + } + } + } + } + ); + fileAppender.appender('test1.log', null, 100); + errorHandler({ error: 'aargh' }); + return consoleArgs; + }, + 'should log the error to console.error': function(consoleArgs) { + assert.isNotEmpty(consoleArgs); + assert.equal(consoleArgs[0], 'log4js.fileAppender - Writing to file %s, error happened '); + assert.equal(consoleArgs[1], 'test1.log'); + assert.equal(consoleArgs[2].error, 'aargh'); + } + } + +}).export(module); diff --git a/node_modules/log4js/test/vows/fileSyncAppender-test.js b/node_modules/log4js/test/vows/fileSyncAppender-test.js new file mode 100644 index 0000000..1a32240 --- /dev/null +++ b/node_modules/log4js/test/vows/fileSyncAppender-test.js @@ -0,0 +1,197 @@ +"use strict"; +var vows = require('vows') +, fs = require('fs') +, path = require('path') +, sandbox = require('sandboxed-module') +, log4js = require('../../lib/log4js') +, assert = require('assert') +, EOL = require('os').EOL || '\n'; + +log4js.clearAppenders(); + +function remove(filename) { + try { + fs.unlinkSync(filename); + } catch (e) { + //doesn't really matter if it failed + } +} + +vows.describe('log4js fileSyncAppender').addBatch({ + 'with default fileSyncAppender settings': { + topic: function() { + var that = this + , testFile = path.join(__dirname, '/fa-default-sync-test.log') + , logger = log4js.getLogger('default-settings'); + remove(testFile); + + log4js.clearAppenders(); + log4js.addAppender( + require('../../lib/appenders/fileSync').appender(testFile), + 'default-settings' + ); + + logger.info("This should be in the file."); + + fs.readFile(testFile, "utf8", that.callback); + }, + 'should write log messages to the file': function (err, fileContents) { + assert.include(fileContents, "This should be in the file." + EOL); + }, + 'log messages should be in the basic layout format': function(err, fileContents) { + assert.match( + fileContents, + /\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}\] \[INFO\] default-settings - / + ); + } + }, + 'with a max file size and no backups': { + topic: function() { + var testFile = path.join(__dirname, '/fa-maxFileSize-sync-test.log') + , logger = log4js.getLogger('max-file-size') + , that = this; + remove(testFile); + remove(testFile + '.1'); + //log file of 100 bytes maximum, no backups + log4js.clearAppenders(); + log4js.addAppender( + require( + '../../lib/appenders/fileSync' + ).appender( + testFile, + log4js.layouts.basicLayout, + 100, + 0 + ), + 'max-file-size' + ); + logger.info("This is the first log message."); + logger.info("This is an intermediate log message."); + logger.info("This is the second log message."); + + fs.readFile(testFile, "utf8", that.callback); + }, + 'log file should only contain the second message': function (err, fileContents) { + assert.include(fileContents, "This is the second log message." + EOL); + assert.equal(fileContents.indexOf("This is the first log message."), -1); + }, + 'the number of files': { + topic: function() { + fs.readdir(__dirname, this.callback); + }, + 'starting with the test file name should be two': function(err, files) { + //there will always be one backup if you've specified a max log size + var logFiles = files.filter( + function(file) { return file.indexOf('fa-maxFileSize-sync-test.log') > -1; } + ); + assert.equal(logFiles.length, 2); + } + } + }, + 'with a max file size and 2 backups': { + topic: function() { + var testFile = path.join(__dirname, '/fa-maxFileSize-with-backups-sync-test.log') + , logger = log4js.getLogger('max-file-size-backups'); + remove(testFile); + remove(testFile+'.1'); + remove(testFile+'.2'); + + //log file of 50 bytes maximum, 2 backups + log4js.clearAppenders(); + log4js.addAppender( + require('../../lib/appenders/fileSync').appender( + testFile, + log4js.layouts.basicLayout, + 50, + 2 + ), + 'max-file-size-backups' + ); + logger.info("This is the first log message."); + logger.info("This is the second log message."); + logger.info("This is the third log message."); + logger.info("This is the fourth log message."); + var that = this; + + fs.readdir(__dirname, function(err, files) { + if (files) { + that.callback(null, files.sort()); + } else { + that.callback(err, files); + } + }); + }, + 'the log files': { + topic: function(files) { + var logFiles = files.filter( + function(file) { return file.indexOf('fa-maxFileSize-with-backups-sync-test.log') > -1; } + ); + return logFiles; + }, + 'should be 3': function (files) { + assert.equal(files.length, 3); + }, + 'should be named in sequence': function (files) { + assert.deepEqual(files, [ + 'fa-maxFileSize-with-backups-sync-test.log', + 'fa-maxFileSize-with-backups-sync-test.log.1', + 'fa-maxFileSize-with-backups-sync-test.log.2' + ]); + }, + 'and the contents of the first file': { + topic: function(logFiles) { + fs.readFile(path.join(__dirname, logFiles[0]), "utf8", this.callback); + }, + 'should be the last log message': function(contents) { + assert.include(contents, 'This is the fourth log message.'); + } + }, + 'and the contents of the second file': { + topic: function(logFiles) { + fs.readFile(path.join(__dirname, logFiles[1]), "utf8", this.callback); + }, + 'should be the third log message': function(contents) { + assert.include(contents, 'This is the third log message.'); + } + }, + 'and the contents of the third file': { + topic: function(logFiles) { + fs.readFile(path.join(__dirname, logFiles[2]), "utf8", this.callback); + }, + 'should be the second log message': function(contents) { + assert.include(contents, 'This is the second log message.'); + } + } + } + } +}).addBatch({ + 'configure' : { + 'with fileSyncAppender': { + topic: function() { + var log4js = require('../../lib/log4js') + , logger; + //this config defines one file appender (to ./tmp-sync-tests.log) + //and sets the log level for "tests" to WARN + log4js.configure({ + appenders: [{ + category: "tests", + type: "file", + filename: "tmp-sync-tests.log", + layout: { type: "messagePassThrough" } + }], + + levels: { tests: "WARN" } + }); + logger = log4js.getLogger('tests'); + logger.info('this should not be written to the file'); + logger.warn('this should be written to the file'); + + fs.readFile('tmp-sync-tests.log', 'utf8', this.callback); + }, + 'should load appender configuration from a json file': function(err, contents) { + assert.include(contents, 'this should be written to the file' + EOL); + assert.equal(contents.indexOf('this should not be written to the file'), -1); + } + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/gelfAppender-test.js b/node_modules/log4js/test/vows/gelfAppender-test.js new file mode 100644 index 0000000..0ee79bb --- /dev/null +++ b/node_modules/log4js/test/vows/gelfAppender-test.js @@ -0,0 +1,257 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, sandbox = require('sandboxed-module') +, log4js = require('../../lib/log4js') +, realLayouts = require('../../lib/layouts') +, setupLogging = function(options, category, compressedLength) { + var fakeDgram = { + sent: false, + socket: { + packetLength: 0, + closed: false, + close: function() { + this.closed = true; + }, + send: function(pkt, offset, pktLength, port, host) { + fakeDgram.sent = true; + this.packet = pkt; + this.offset = offset; + this.packetLength = pktLength; + this.port = port; + this.host = host; + } + }, + createSocket: function(type) { + this.type = type; + return this.socket; + } + } + , fakeZlib = { + gzip: function(objectToCompress, callback) { + fakeZlib.uncompressed = objectToCompress; + if (this.shouldError) { + callback({ stack: "oh noes" }); + return; + } + + if (compressedLength) { + callback(null, { length: compressedLength }); + } else { + callback(null, "I've been compressed"); + } + } + } + , exitHandler + , fakeConsole = { + error: function(message) { + this.message = message; + } + } + , fakeLayouts = { + layout: function(type, options) { + this.type = type; + this.options = options; + return realLayouts.messagePassThroughLayout; + }, + messagePassThroughLayout: realLayouts.messagePassThroughLayout + } + , appender = sandbox.require('../../lib/appenders/gelf', { + requires: { + dgram: fakeDgram, + zlib: fakeZlib, + '../layouts': fakeLayouts + }, + globals: { + process: { + on: function(evt, handler) { + if (evt === 'exit') { + exitHandler = handler; + } + } + }, + console: fakeConsole + } + }); + + log4js.clearAppenders(); + log4js.addAppender(appender.configure(options || {}), category || "gelf-test"); + return { + dgram: fakeDgram, + compress: fakeZlib, + exitHandler: exitHandler, + console: fakeConsole, + layouts: fakeLayouts, + logger: log4js.getLogger(category || "gelf-test") + }; +}; + +vows.describe('log4js gelfAppender').addBatch({ + + 'with default gelfAppender settings': { + topic: function() { + var setup = setupLogging(); + setup.logger.info("This is a test"); + return setup; + }, + 'the dgram packet': { + topic: function(setup) { + return setup.dgram; + }, + 'should be sent via udp to the localhost gelf server': function(dgram) { + assert.equal(dgram.type, "udp4"); + assert.equal(dgram.socket.host, "localhost"); + assert.equal(dgram.socket.port, 12201); + assert.equal(dgram.socket.offset, 0); + assert.ok(dgram.socket.packetLength > 0, "Received blank message"); + }, + 'should be compressed': function(dgram) { + assert.equal(dgram.socket.packet, "I've been compressed"); + } + }, + 'the uncompressed log message': { + topic: function(setup) { + var message = JSON.parse(setup.compress.uncompressed); + return message; + }, + 'should be in the gelf format': function(message) { + assert.equal(message.version, '1.1'); + assert.equal(message.host, require('os').hostname()); + assert.equal(message.level, 6); //INFO + assert.equal(message.short_message, 'This is a test'); + } + } + }, + 'with a message longer than 8k': { + topic: function() { + var setup = setupLogging(undefined, undefined, 10240); + setup.logger.info("Blah."); + return setup; + }, + 'the dgram packet': { + topic: function(setup) { + return setup.dgram; + }, + 'should not be sent': function(dgram) { + assert.equal(dgram.sent, false); + } + } + }, + 'with non-default options': { + topic: function() { + var setup = setupLogging({ + host: 'somewhere', + port: 12345, + hostname: 'cheese', + facility: 'nonsense' + }); + setup.logger.debug("Just testing."); + return setup; + }, + 'the dgram packet': { + topic: function(setup) { + return setup.dgram; + }, + 'should pick up the options': function(dgram) { + assert.equal(dgram.socket.host, 'somewhere'); + assert.equal(dgram.socket.port, 12345); + } + }, + 'the uncompressed packet': { + topic: function(setup) { + var message = JSON.parse(setup.compress.uncompressed); + return message; + }, + 'should pick up the options': function(message) { + assert.equal(message.host, 'cheese'); + assert.equal(message._facility, 'nonsense'); + } + } + }, + + 'on process.exit': { + topic: function() { + var setup = setupLogging(); + setup.exitHandler(); + return setup; + }, + 'should close open sockets': function(setup) { + assert.isTrue(setup.dgram.socket.closed); + } + }, + + 'on zlib error': { + topic: function() { + var setup = setupLogging(); + setup.compress.shouldError = true; + setup.logger.info('whatever'); + return setup; + }, + 'should output to console.error': function(setup) { + assert.equal(setup.console.message, 'oh noes'); + } + }, + + 'with layout in configuration': { + topic: function() { + var setup = setupLogging({ + layout: { + type: 'madeuplayout', + earlgrey: 'yes, please' + } + }); + return setup; + }, + 'should pass options to layout': function(setup) { + assert.equal(setup.layouts.type, 'madeuplayout'); + assert.equal(setup.layouts.options.earlgrey, 'yes, please'); + } + }, + + 'with custom fields options': { + topic: function() { + var setup = setupLogging({ + host: 'somewhere', + port: 12345, + hostname: 'cheese', + facility: 'nonsense', + customFields: { + _every1: 'Hello every one', + _every2: 'Hello every two' + } + }); + var myFields = { + GELF: true, + _every2: 'Overwritten!', + _myField: 'This is my field!' + }; + setup.logger.debug(myFields, "Just testing."); + return setup; + }, + 'the dgram packet': { + topic: function(setup) { + return setup.dgram; + }, + 'should pick up the options': function(dgram) { + assert.equal(dgram.socket.host, 'somewhere'); + assert.equal(dgram.socket.port, 12345); + } + }, + 'the uncompressed packet': { + topic: function(setup) { + var message = JSON.parse(setup.compress.uncompressed); + return message; + }, + 'should pick up the options': function(message) { + assert.equal(message.host, 'cheese'); + assert.isUndefined(message.GELF); // make sure flag was removed + assert.equal(message._facility, 'nonsense'); + assert.equal(message._every1, 'Hello every one'); // the default value + assert.equal(message._every2, 'Overwritten!'); // the overwritten value + assert.equal(message._myField, 'This is my field!'); // the value for this message only + assert.equal(message.short_message, 'Just testing.'); // skip the field object + } + } + } + +}).export(module); diff --git a/node_modules/log4js/test/vows/global-log-level-test.js b/node_modules/log4js/test/vows/global-log-level-test.js new file mode 100644 index 0000000..b432ca1 --- /dev/null +++ b/node_modules/log4js/test/vows/global-log-level-test.js @@ -0,0 +1,121 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert'); + +vows.describe('log4js global loglevel').addBatch({ + 'global loglevel' : { + topic: function() { + var log4js = require('../../lib/log4js'); + return log4js; + }, + + 'set global loglevel on creation': function(log4js) { + var log1 = log4js.getLogger('log1'); + var level = 'OFF'; + if (log1.level.toString() == level) { + level = 'TRACE'; + } + assert.notEqual(log1.level.toString(), level); + + log4js.setGlobalLogLevel(level); + assert.equal(log1.level.toString(), level); + + var log2 = log4js.getLogger('log2'); + assert.equal(log2.level.toString(), level); + }, + + 'global change loglevel': function(log4js) { + var log1 = log4js.getLogger('log1'); + var log2 = log4js.getLogger('log2'); + var level = 'OFF'; + if (log1.level.toString() == level) { + level = 'TRACE'; + } + assert.notEqual(log1.level.toString(), level); + + log4js.setGlobalLogLevel(level); + assert.equal(log1.level.toString(), level); + assert.equal(log2.level.toString(), level); + }, + + 'override loglevel': function(log4js) { + var log1 = log4js.getLogger('log1'); + var log2 = log4js.getLogger('log2'); + var level = 'OFF'; + if (log1.level.toString() == level) { + level = 'TRACE'; + } + assert.notEqual(log1.level.toString(), level); + + var oldLevel = log1.level.toString(); + assert.equal(log2.level.toString(), oldLevel); + + log2.setLevel(level); + assert.equal(log1.level.toString(), oldLevel); + assert.equal(log2.level.toString(), level); + assert.notEqual(oldLevel, level); + + log2.removeLevel(); + assert.equal(log1.level.toString(), oldLevel); + assert.equal(log2.level.toString(), oldLevel); + }, + + 'preload loglevel': function(log4js) { + var log1 = log4js.getLogger('log1'); + var level = 'OFF'; + if (log1.level.toString() == level) { + level = 'TRACE'; + } + assert.notEqual(log1.level.toString(), level); + + var oldLevel = log1.level.toString(); + log4js.getLogger('log2').setLevel(level); + + assert.equal(log1.level.toString(), oldLevel); + + // get again same logger but as different variable + var log2 = log4js.getLogger('log2'); + assert.equal(log2.level.toString(), level); + assert.notEqual(oldLevel, level); + + log2.removeLevel(); + assert.equal(log1.level.toString(), oldLevel); + assert.equal(log2.level.toString(), oldLevel); + }, + + 'set level on all categories': function(log4js) { + // Get 2 loggers + var log1 = log4js.getLogger('log1'); + var log2 = log4js.getLogger('log2'); + + // First a test with 2 categories with different levels + var config = { + 'levels': { + 'log1': 'ERROR', + 'log2': 'WARN' + } + }; + log4js.configure(config); + + // Check if the levels are set correctly + assert.equal('ERROR', log1.level.toString()); + assert.equal('WARN', log2.level.toString()); + + log1.removeLevel(); + log2.removeLevel(); + + // Almost identical test, but now we set + // level on all categories + var config2 = { + 'levels': { + '[all]': 'DEBUG' + } + }; + log4js.configure(config2); + + // Check if the loggers got the DEBUG level + assert.equal('DEBUG', log1.level.toString()); + assert.equal('DEBUG', log2.level.toString()); + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/hipchatAppender-test.js b/node_modules/log4js/test/vows/hipchatAppender-test.js new file mode 100644 index 0000000..a514caa --- /dev/null +++ b/node_modules/log4js/test/vows/hipchatAppender-test.js @@ -0,0 +1,112 @@ +"use strict"; +var vows = require('vows'), + assert = require('assert'), + log4js = require('../../lib/log4js'), + sandbox = require('sandboxed-module'); + +function setupLogging(category, options) { + var lastRequest = {}; + + var fakeRequest = function(args, level){ + lastRequest.notifier = this; + lastRequest.body = args[0]; + lastRequest.callback = args[1]; + lastRequest.level = level; + }; + + var fakeHipchatNotifier = { + 'make': function(room, token, from, host, notify){ + return { + 'room': room, + 'token': token, + 'from': from || '', + 'host': host || 'api.hipchat.com', + 'notify': notify || false, + 'setRoom': function(val){ this.room = val; }, + 'setFrom': function(val){ this.from = val; }, + 'setHost': function(val){ this.host = val; }, + 'setNotify': function(val){ this.notify = val; }, + 'info': function(){ fakeRequest.call(this, arguments, 'info'); }, + 'warning': function(){ fakeRequest.call(this, arguments, 'warning'); }, + 'failure': function(){ fakeRequest.call(this, arguments, 'failure'); }, + 'success': function(){ fakeRequest.call(this, arguments, 'success'); } + }; + } + }; + + var hipchatModule = sandbox.require('../../lib/appenders/hipchat', { + requires: { + 'hipchat-notifier': fakeHipchatNotifier + } + }); + log4js.clearAppenders(); + log4js.addAppender(hipchatModule.configure(options), category); + + return { + logger: log4js.getLogger(category), + lastRequest: lastRequest + }; +} + +vows.describe('HipChat appender').addBatch({ + 'when logging to HipChat v2 API': { + topic: function() { + var customCallback = function(err, res, body){ return 'works'; }; + + var setup = setupLogging('myCategory', { + "type": "hipchat", + "hipchat_token": "User_Token_With_Notification_Privs", + "hipchat_room": "Room_ID_Or_Name", + "hipchat_from": "Log4js_Test", + "hipchat_notify": true, + "hipchat_host": "hipchat.your-company.tld", + "hipchat_response_callback": customCallback + }); + setup.logger.warn('Log event #1'); + return setup; + }, + 'a request to hipchat_host should be sent': function (topic) { + assert.equal(topic.lastRequest.notifier.host, "hipchat.your-company.tld"); + assert.equal(topic.lastRequest.notifier.notify, true); + assert.equal(topic.lastRequest.body, 'Log event #1'); + assert.equal(topic.lastRequest.level, 'warning'); + }, + 'a custom callback to the HipChat response is supported': function(topic) { + assert.equal(topic.lastRequest.callback(), 'works'); + } + }, + 'when missing options': { + topic: function() { + var setup = setupLogging('myLogger', { + "type": "hipchat", + }); + setup.logger.error('Log event #2'); + return setup; + }, + 'it sets some defaults': function (topic) { + assert.equal(topic.lastRequest.notifier.host, "api.hipchat.com"); + assert.equal(topic.lastRequest.notifier.notify, false); + assert.equal(topic.lastRequest.body, 'Log event #2'); + assert.equal(topic.lastRequest.level, 'failure'); + } + }, + 'when basicLayout is provided': { + topic: function() { + var setup = setupLogging('myLogger', { + "type": "hipchat", + "layout": log4js.layouts.basicLayout + }); + setup.logger.debug('Log event #3'); + return setup; + }, + 'it should include the timestamp': function (topic) { + + // basicLayout adds [TIMESTAMP] [LEVEL] category - message + // e.g. [2016-06-10 11:50:53.819] [DEBUG] myLogger - Log event #23 + + assert.match(topic.lastRequest.body, /^\[[^\]]+\] \[[^\]]+\].*Log event \#3$/); + assert.equal(topic.lastRequest.level, 'info'); + } + } + +}).export(module); diff --git a/node_modules/log4js/test/vows/layouts-test.js b/node_modules/log4js/test/vows/layouts-test.js new file mode 100644 index 0000000..84971a5 --- /dev/null +++ b/node_modules/log4js/test/vows/layouts-test.js @@ -0,0 +1,338 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, os = require('os') +, semver = require('semver') +, EOL = os.EOL || '\n'; + +//used for patternLayout tests. +function test(args, pattern, value) { + var layout = args[0] + , event = args[1] + , tokens = args[2]; + + assert.equal(layout(pattern, tokens)(event), value); +} + +vows.describe('log4js layouts').addBatch({ + 'colouredLayout': { + topic: function() { + return require('../../lib/layouts').colouredLayout; + }, + + 'should apply level colour codes to output': function(layout) { + var output = layout({ + data: ["nonsense"], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "cheese", + level: { + toString: function() { return "ERROR"; } + } + }); + assert.equal(output, '\x1B[31m[2010-12-05 14:18:30.045] [ERROR] cheese - \x1B[39mnonsense'); + }, + 'should support the console.log format for the message': function(layout) { + var output = layout({ + data: ["thing %d", 2], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "cheese", + level: { + toString: function() { return "ERROR"; } + } + }); + assert.equal(output, '\x1B[31m[2010-12-05 14:18:30.045] [ERROR] cheese - \x1B[39mthing 2'); + } + }, + + 'messagePassThroughLayout': { + topic: function() { + return require('../../lib/layouts').messagePassThroughLayout; + }, + 'should take a logevent and output only the message' : function(layout) { + assert.equal(layout({ + data: ["nonsense"], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "cheese", + level: { + colour: "green", + toString: function() { return "ERROR"; } + } + }), "nonsense"); + }, + 'should support the console.log format for the message' : function(layout) { + assert.equal(layout({ + data: ["thing %d", 1, "cheese"], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "cheese", + level : { + colour: "green", + toString: function() { return "ERROR"; } + } + }), "thing 1 cheese"); + }, + 'should output the first item even if it is not a string': function(layout) { + assert.equal(layout({ + data: [ { thing: 1} ], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "cheese", + level: { + colour: "green", + toString: function() { return "ERROR"; } + } + }), "{ thing: 1 }"); + }, + 'should print the stacks of a passed error objects': function(layout) { + assert.isArray( + layout({ + data: [ new Error() ], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "cheese", + level: { + colour: "green", + toString: function() { return "ERROR"; } + } + }).match( + new RegExp('' + + /Error\s+at Object\..*\s+/.source + + /\((.*)test[\\\/]vows[\\\/]layouts-test\.js/.source + + /\:\d+\:\d+\)\s+at runTest/.source + ) + ), + 'regexp did not return a match' + ); + }, + 'with passed augmented errors': { + topic: function(layout){ + var e = new Error("My Unique Error Message"); + e.augmented = "My Unique attribute value"; + e.augObj = { at1: "at2" }; + return layout({ + data: [ e ], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "cheese", + level: { + colour: "green", + toString: function() { return "ERROR"; } + } + }); + }, + 'should print error the contained error message': function(layoutOutput) { + var m = layoutOutput.match(/Error: My Unique Error Message/); + assert.isArray(m); + }, + 'should print error augmented string attributes': function(layoutOutput) { + var m = layoutOutput.match(/augmented:\s'My Unique attribute value'/); + assert.isArray(m); + }, + 'should print error augmented object attributes': function(layoutOutput) { + var m = layoutOutput.match(/augObj:\s\{ at1: 'at2' \}/); + assert.isArray(m); + } + } + + + }, + + 'basicLayout': { + topic: function() { + var layout = require('../../lib/layouts').basicLayout, + event = { + data: ['this is a test'], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "tests", + level: { + toString: function() { return "DEBUG"; } + } + }; + return [layout, event]; + }, + 'should take a logevent and output a formatted string': function(args) { + var layout = args[0], event = args[1]; + assert.equal(layout(event), "[2010-12-05 14:18:30.045] [DEBUG] tests - this is a test"); + }, + 'should output a stacktrace, message if the event has an error attached': function(args) { + var i, layout = args[0], event = args[1], output, lines, + error = new Error("Some made-up error"), + stack = error.stack.split(/\n/); + + event.data = ['this is a test', error]; + output = layout(event); + lines = output.split(/\n/); + + if (semver.satisfies(process.version, '>=6')) { + assert.equal(lines.length, stack.length); + assert.equal( + lines[0], + "[2010-12-05 14:18:30.045] [DEBUG] tests - this is a test Error: Some made-up error" + ); + for (i = 1; i < stack.length; i++) { + assert.equal(lines[i], stack[i]); + } + } else { + assert.equal(lines.length - 1, stack.length); + assert.equal( + lines[0], + "[2010-12-05 14:18:30.045] [DEBUG] tests - this is a test [Error: Some made-up error]" + ); + for (i = 1; i < stack.length; i++) { + assert.equal(lines[i+2], stack[i+1]); + } + } + + }, + 'should output any extra data in the log event as util.inspect strings': function(args) { + var layout = args[0], event = args[1], output, lines; + event.data = ['this is a test', { + name: 'Cheese', + message: 'Gorgonzola smells.' + }]; + output = layout(event); + assert.equal( + output, + "[2010-12-05 14:18:30.045] [DEBUG] tests - this is a test " + + "{ name: 'Cheese', message: 'Gorgonzola smells.' }" + ); + } + }, + + 'patternLayout': { + topic: function() { + var event = { + data: ['this is a test'], + startTime: new Date('2010-12-05T14:18:30.045Z'), //new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: "multiple.levels.of.tests", + level: { + toString: function() { return "DEBUG"; } + } + }, layout = require('../../lib/layouts').patternLayout + , tokens = { + testString: 'testStringToken', + testFunction: function() { return 'testFunctionToken'; }, + fnThatUsesLogEvent: function(logEvent) { return logEvent.level.toString(); } + }; + + //override getTimezoneOffset + event.startTime.getTimezoneOffset = function() { return 0; }; + return [layout, event, tokens]; + }, + + 'should default to "time logLevel loggerName - message"': function(args) { + test(args, null, "14:18:30 DEBUG multiple.levels.of.tests - this is a test" + EOL); + }, + '%r should output time only': function(args) { + test(args, '%r', '14:18:30'); + }, + '%p should output the log level': function(args) { + test(args, '%p', 'DEBUG'); + }, + '%c should output the log category': function(args) { + test(args, '%c', 'multiple.levels.of.tests'); + }, + '%m should output the log data': function(args) { + test(args, '%m', 'this is a test'); + }, + '%n should output a new line': function(args) { + test(args, '%n', EOL); + }, + '%h should output hostname' : function(args) { + test(args, '%h', os.hostname().toString()); + }, + '%z should output pid' : function(args) { + test(args, '%z', process.pid); + }, + '%c should handle category names like java-style package names': function(args) { + test(args, '%c{1}', 'tests'); + test(args, '%c{2}', 'of.tests'); + test(args, '%c{3}', 'levels.of.tests'); + test(args, '%c{4}', 'multiple.levels.of.tests'); + test(args, '%c{5}', 'multiple.levels.of.tests'); + test(args, '%c{99}', 'multiple.levels.of.tests'); + }, + '%d should output the date in ISO8601 format': function(args) { + test(args, '%d', '2010-12-05 14:18:30.045'); + }, + '%d should allow for format specification': function(args) { + test(args, '%d{ISO8601_WITH_TZ_OFFSET}', '2010-12-05T14:18:30.045-0000'); + test(args, '%d{ISO8601}', '2010-12-05 14:18:30.045'); + test(args, '%d{ABSOLUTE}', '14:18:30.045'); + test(args, '%d{DATE}', '05 12 2010 14:18:30.045'); + test(args, '%d{yy MM dd hh mm ss}', '10 12 05 14 18 30'); + test(args, '%d{yyyy MM dd}', '2010 12 05'); + test(args, '%d{yyyy MM dd hh mm ss SSS}', '2010 12 05 14 18 30 045'); + }, + '%% should output %': function(args) { + test(args, '%%', '%'); + }, + 'should output anything not preceded by % as literal': function(args) { + test(args, 'blah blah blah', 'blah blah blah'); + }, + 'should output the original string if no replacer matches the token': function(args) { + test(args, '%a{3}', 'a{3}'); + }, + 'should handle complicated patterns': function(args) { + test(args, + '%m%n %c{2} at %d{ABSOLUTE} cheese %p%n', + 'this is a test'+ EOL +' of.tests at 14:18:30.045 cheese DEBUG' + EOL + ); + }, + 'should truncate fields if specified': function(args) { + test(args, '%.4m', 'this'); + test(args, '%.7m', 'this is'); + test(args, '%.9m', 'this is a'); + test(args, '%.14m', 'this is a test'); + test(args, '%.2919102m', 'this is a test'); + }, + 'should pad fields if specified': function(args) { + test(args, '%10p', ' DEBUG'); + test(args, '%8p', ' DEBUG'); + test(args, '%6p', ' DEBUG'); + test(args, '%4p', 'DEBUG'); + test(args, '%-4p', 'DEBUG'); + test(args, '%-6p', 'DEBUG '); + test(args, '%-8p', 'DEBUG '); + test(args, '%-10p', 'DEBUG '); + }, + '%[%r%] should output colored time': function(args) { + test(args, '%[%r%]', '\x1B[36m14:18:30\x1B[39m'); + }, + '%x{testString} should output the string stored in tokens': function(args) { + test(args, '%x{testString}', 'testStringToken'); + }, + '%x{testFunction} should output the result of the function stored in tokens': function(args) { + test(args, '%x{testFunction}', 'testFunctionToken'); + }, + '%x{doesNotExist} should output the string stored in tokens': function(args) { + test(args, '%x{doesNotExist}', 'null'); + }, + '%x{fnThatUsesLogEvent} should be able to use the logEvent': function(args) { + test(args, '%x{fnThatUsesLogEvent}', 'DEBUG'); + }, + '%x should output the string stored in tokens': function(args) { + test(args, '%x', 'null'); + } + }, + 'layout makers': { + topic: require('../../lib/layouts'), + 'should have a maker for each layout': function(layouts) { + assert.ok(layouts.layout("messagePassThrough")); + assert.ok(layouts.layout("basic")); + assert.ok(layouts.layout("colored")); + assert.ok(layouts.layout("coloured")); + assert.ok(layouts.layout("pattern")); + } + }, + 'add layout': { + topic: require('../../lib/layouts'), + 'should be able to add a layout': function(layouts) { + layouts.addLayout('test_layout', function(config){ + assert.equal(config, 'test_config'); + return function(logEvent) { + return "TEST LAYOUT >"+logEvent.data; + }; + }); + var serializer = layouts.layout('test_layout', 'test_config'); + assert.ok(serializer); + assert.equal(serializer({data: "INPUT"}), "TEST LAYOUT >INPUT"); + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/levels-test.js b/node_modules/log4js/test/vows/levels-test.js new file mode 100644 index 0000000..0933076 --- /dev/null +++ b/node_modules/log4js/test/vows/levels-test.js @@ -0,0 +1,464 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, levels = require('../../lib/levels'); + +function assertThat(level) { + function assertForEach(assertion, test, otherLevels) { + otherLevels.forEach(function(other) { + assertion.call(assert, test.call(level, other)); + }); + } + + return { + isLessThanOrEqualTo: function(levels) { + assertForEach(assert.isTrue, level.isLessThanOrEqualTo, levels); + }, + isNotLessThanOrEqualTo: function(levels) { + assertForEach(assert.isFalse, level.isLessThanOrEqualTo, levels); + }, + isGreaterThanOrEqualTo: function(levels) { + assertForEach(assert.isTrue, level.isGreaterThanOrEqualTo, levels); + }, + isNotGreaterThanOrEqualTo: function(levels) { + assertForEach(assert.isFalse, level.isGreaterThanOrEqualTo, levels); + }, + isEqualTo: function(levels) { + assertForEach(assert.isTrue, level.isEqualTo, levels); + }, + isNotEqualTo: function(levels) { + assertForEach(assert.isFalse, level.isEqualTo, levels); + } + }; +} + +vows.describe('levels').addBatch({ + 'values': { + topic: levels, + 'should define some levels': function(levels) { + assert.isNotNull(levels.ALL); + assert.isNotNull(levels.TRACE); + assert.isNotNull(levels.DEBUG); + assert.isNotNull(levels.INFO); + assert.isNotNull(levels.WARN); + assert.isNotNull(levels.ERROR); + assert.isNotNull(levels.FATAL); + assert.isNotNull(levels.MARK); + assert.isNotNull(levels.OFF); + }, + 'ALL': { + topic: levels.ALL, + 'should be less than the other levels': function(all) { + assertThat(all).isLessThanOrEqualTo( + [ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + }, + 'should be greater than no levels': function(all) { + assertThat(all).isNotGreaterThanOrEqualTo( + [ + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + }, + 'should only be equal to ALL': function(all) { + assertThat(all).isEqualTo([levels.toLevel("ALL")]); + assertThat(all).isNotEqualTo( + [ + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + } + }, + 'TRACE': { + topic: levels.TRACE, + 'should be less than DEBUG': function(trace) { + assertThat(trace).isLessThanOrEqualTo( + [ + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + assertThat(trace).isNotLessThanOrEqualTo([levels.ALL]); + }, + 'should be greater than ALL': function(trace) { + assertThat(trace).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE]); + assertThat(trace).isNotGreaterThanOrEqualTo( + [ + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + }, + 'should only be equal to TRACE': function(trace) { + assertThat(trace).isEqualTo([levels.toLevel("TRACE")]); + assertThat(trace).isNotEqualTo( + [ + levels.ALL, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + } + }, + 'DEBUG': { + topic: levels.DEBUG, + 'should be less than INFO': function(debug) { + assertThat(debug).isLessThanOrEqualTo( + [ + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + assertThat(debug).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE]); + }, + 'should be greater than TRACE': function(debug) { + assertThat(debug).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE]); + assertThat(debug).isNotGreaterThanOrEqualTo( + [ + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + }, + 'should only be equal to DEBUG': function(trace) { + assertThat(trace).isEqualTo([levels.toLevel("DEBUG")]); + assertThat(trace).isNotEqualTo( + [ + levels.ALL, + levels.TRACE, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ] + ); + } + }, + 'INFO': { + topic: levels.INFO, + 'should be less than WARN': function(info) { + assertThat(info).isLessThanOrEqualTo([ + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ]); + assertThat(info).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG]); + }, + 'should be greater than DEBUG': function(info) { + assertThat(info).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG]); + assertThat(info).isNotGreaterThanOrEqualTo([ + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ]); + }, + 'should only be equal to INFO': function(trace) { + assertThat(trace).isEqualTo([levels.toLevel("INFO")]); + assertThat(trace).isNotEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK, + levels.OFF + ]); + } + }, + 'WARN': { + topic: levels.WARN, + 'should be less than ERROR': function(warn) { + assertThat(warn).isLessThanOrEqualTo([levels.ERROR, levels.FATAL, levels.MARK, levels.OFF]); + assertThat(warn).isNotLessThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO + ]); + }, + 'should be greater than INFO': function(warn) { + assertThat(warn).isGreaterThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO + ]); + assertThat(warn).isNotGreaterThanOrEqualTo([ + levels.ERROR, levels.FATAL, levels.MARK, levels.OFF + ]); + }, + 'should only be equal to WARN': function(trace) { + assertThat(trace).isEqualTo([levels.toLevel("WARN")]); + assertThat(trace).isNotEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.ERROR, + levels.FATAL, + levels.OFF + ]); + } + }, + 'ERROR': { + topic: levels.ERROR, + 'should be less than FATAL': function(error) { + assertThat(error).isLessThanOrEqualTo([levels.FATAL, levels.MARK, levels.OFF]); + assertThat(error).isNotLessThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN + ]); + }, + 'should be greater than WARN': function(error) { + assertThat(error).isGreaterThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN + ]); + assertThat(error).isNotGreaterThanOrEqualTo([levels.FATAL, levels.MARK, levels.OFF]); + }, + 'should only be equal to ERROR': function(trace) { + assertThat(trace).isEqualTo([levels.toLevel("ERROR")]); + assertThat(trace).isNotEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.FATAL, + levels.MARK, + levels.OFF + ]); + } + }, + 'FATAL': { + topic: levels.FATAL, + 'should be less than OFF': function(fatal) { + assertThat(fatal).isLessThanOrEqualTo([levels.MARK, levels.OFF]); + assertThat(fatal).isNotLessThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR + ]); + }, + 'should be greater than ERROR': function(fatal) { + assertThat(fatal).isGreaterThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR + ]); + assertThat(fatal).isNotGreaterThanOrEqualTo([levels.MARK, levels.OFF]); + }, + 'should only be equal to FATAL': function(fatal) { + assertThat(fatal).isEqualTo([levels.toLevel("FATAL")]); + assertThat(fatal).isNotEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.MARK, + levels.OFF + ]); + } + }, + 'MARK': { + topic: levels.MARK, + 'should be less than OFF': function(mark) { + assertThat(mark).isLessThanOrEqualTo([levels.OFF]); + assertThat(mark).isNotLessThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.FATAL, + levels.ERROR + ]); + }, + 'should be greater than FATAL': function(mark) { + assertThat(mark).isGreaterThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL + ]); + assertThat(mark).isNotGreaterThanOrEqualTo([levels.OFF]); + }, + 'should only be equal to MARK': function(mark) { + assertThat(mark).isEqualTo([levels.toLevel("MARK")]); + assertThat(mark).isNotEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.OFF + ]); + } + }, + 'OFF': { + topic: levels.OFF, + 'should not be less than anything': function(off) { + assertThat(off).isNotLessThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK + ]); + }, + 'should be greater than everything': function(off) { + assertThat(off).isGreaterThanOrEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK + ]); + }, + 'should only be equal to OFF': function(off) { + assertThat(off).isEqualTo([levels.toLevel("OFF")]); + assertThat(off).isNotEqualTo([ + levels.ALL, + levels.TRACE, + levels.DEBUG, + levels.INFO, + levels.WARN, + levels.ERROR, + levels.FATAL, + levels.MARK + ]); + } + } + }, + 'isGreaterThanOrEqualTo': { + topic: levels.INFO, + 'should handle string arguments': function(info) { + assertThat(info).isGreaterThanOrEqualTo(["all", "trace", "debug"]); + assertThat(info).isNotGreaterThanOrEqualTo(['warn', 'ERROR', 'Fatal', 'MARK', 'off']); + } + }, + 'isLessThanOrEqualTo': { + topic: levels.INFO, + 'should handle string arguments': function(info) { + assertThat(info).isNotLessThanOrEqualTo(["all", "trace", "debug"]); + assertThat(info).isLessThanOrEqualTo(['warn', 'ERROR', 'Fatal', 'MARK', 'off']); + } + }, + 'isEqualTo': { + topic: levels.INFO, + 'should handle string arguments': function(info) { + assertThat(info).isEqualTo(["info", "INFO", "iNfO"]); + } + }, + 'toLevel': { + 'with lowercase argument': { + topic: levels.toLevel("debug"), + 'should take the string and return the corresponding level': function(level) { + assert.equal(level, levels.DEBUG); + } + }, + 'with uppercase argument': { + topic: levels.toLevel("DEBUG"), + 'should take the string and return the corresponding level': function(level) { + assert.equal(level, levels.DEBUG); + } + }, + 'with varying case': { + topic: levels.toLevel("DeBuG"), + 'should take the string and return the corresponding level': function(level) { + assert.equal(level, levels.DEBUG); + } + }, + 'with unrecognised argument': { + topic: levels.toLevel("cheese"), + 'should return undefined': function(level) { + assert.isUndefined(level); + } + }, + 'with unrecognised argument and default value': { + topic: levels.toLevel("cheese", levels.DEBUG), + 'should return default value': function(level) { + assert.equal(level, levels.DEBUG); + } + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/log-abspath-test.js b/node_modules/log4js/test/vows/log-abspath-test.js new file mode 100644 index 0000000..db45a0a --- /dev/null +++ b/node_modules/log4js/test/vows/log-abspath-test.js @@ -0,0 +1,77 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, path = require('path') +, sandbox = require('sandboxed-module'); + +vows.describe('log4js-abspath').addBatch({ + 'options': { + topic: function() { + var appenderOptions, + log4js = sandbox.require( + '../../lib/log4js', + { requires: + { './appenders/fake': + { name: "fake", + appender: function() {}, + configure: function(configuration, options) { + appenderOptions = options; + return function() {}; + } + } + } + } + ), + config = { + "appenders": [ + { + "type" : "fake", + "filename" : "cheesy-wotsits.log" + } + ] + }; + + log4js.configure(config, { + cwd: '/absolute/path/to' + }); + return appenderOptions; + }, + 'should be passed to appenders during configuration': function(options) { + assert.equal(options.cwd, '/absolute/path/to'); + } + }, + + 'file appender': { + topic: function() { + var fileOpened, + fileAppender = sandbox.require( + '../../lib/appenders/file', + { requires: + { 'streamroller': + { RollingFileStream: + function(file) { + fileOpened = file; + return { + on: function() {}, + end: function() {} + }; + } + } + } + } + ); + fileAppender.configure( + { + filename: "whatever.log", + maxLogSize: 10 + }, + { cwd: '/absolute/path/to' } + ); + return fileOpened; + }, + 'should prepend options.cwd to config.filename': function(fileOpened) { + var expected = path.sep + path.join("absolute", "path", "to", "whatever.log"); + assert.equal(fileOpened, expected); + } + }, +}).export(module); diff --git a/node_modules/log4js/test/vows/log4js.json b/node_modules/log4js/test/vows/log4js.json new file mode 100644 index 0000000..3a4e54a --- /dev/null +++ b/node_modules/log4js/test/vows/log4js.json @@ -0,0 +1,16 @@ +{ + "appenders": [ + { + "category": "tests", + "type": "file", + "filename": "tmp-tests.log", + "layout": { + "type": "messagePassThrough" + } + } + ], + + "levels": { + "tests": "WARN" + } +} diff --git a/node_modules/log4js/test/vows/logFacesAppender-test.js b/node_modules/log4js/test/vows/logFacesAppender-test.js new file mode 100644 index 0000000..2ef1877 --- /dev/null +++ b/node_modules/log4js/test/vows/logFacesAppender-test.js @@ -0,0 +1,92 @@ +"use strict"; +var vows = require('vows'), +assert = require('assert'), +log4js = require('../../lib/log4js'), +sandbox = require('sandboxed-module'); + +var log = log4js.getLogger('lfstest'); + +function setupLogging(category, options) { + var sent = {}; + + function fake(event){ + Object.keys(event).forEach(function(key) { + sent[key] = event[key]; + }); + } + + var lfsModule = require('../../lib/appenders/logFacesAppender'); + options.send = fake; + log4js.clearAppenders(); + log4js.addAppender(lfsModule.configure(options), category); + lfsModule.setContext("foo", "bar"); + lfsModule.setContext("bar", "foo"); + + return { + logger: log4js.getLogger(category), + results: sent + }; +} + +vows.describe('logFaces appender').addBatch({ + 'when using HTTP receivers': { + topic: function() { + var setup = setupLogging('myCategory', { + "type": "logFacesAppender", + "application": "LFS-HTTP", + "url": "http://localhost/receivers/rx1" + }); + + setup.logger.warn('Log event #1'); + return setup; + }, + 'an event should be sent': function (topic) { + var event = topic.results; + assert.equal(event.a, 'LFS-HTTP'); + assert.equal(event.m, 'Log event #1'); + assert.equal(event.g, 'myCategory'); + assert.equal(event.p, 'WARN'); + assert.equal(event.p_foo, 'bar'); + assert.equal(event.p_bar, 'foo'); + + // Assert timestamp, up to hours resolution. + var date = new Date(event.t); + assert.equal( + date.toISOString().substring(0, 14), + new Date().toISOString().substring(0, 14) + ); + } + }, + + 'when using UDP receivers': { + topic: function() { + var setup = setupLogging('udpCategory', { + "type": "logFacesAppender", + "application": "LFS-UDP", + "remoteHost": "127.0.0.1", + "port": 55201 + }); + + setup.logger.error('Log event #2'); + return setup; + }, + 'an event should be sent': function (topic) { + var event = topic.results; + assert.equal(event.a, 'LFS-UDP'); + assert.equal(event.m, 'Log event #2'); + assert.equal(event.g, 'udpCategory'); + assert.equal(event.p, 'ERROR'); + assert.equal(event.p_foo, 'bar'); + assert.equal(event.p_bar, 'foo'); + + // Assert timestamp, up to hours resolution. + var date = new Date(event.t); + assert.equal( + date.toISOString().substring(0, 14), + new Date().toISOString().substring(0, 14) + ); + } + } + + +}).export(module); diff --git a/node_modules/log4js/test/vows/logLevelFilter-test.js b/node_modules/log4js/test/vows/logLevelFilter-test.js new file mode 100644 index 0000000..18a9f0f --- /dev/null +++ b/node_modules/log4js/test/vows/logLevelFilter-test.js @@ -0,0 +1,93 @@ +"use strict"; +var vows = require('vows') +, fs = require('fs') +, assert = require('assert') +, os = require('os') +, EOL = require('os').EOL || '\n'; + +function remove(filename) { + try { + fs.unlinkSync(filename); + } catch (e) { + //doesn't really matter if it failed + } +} + +vows.describe('log4js logLevelFilter').addBatch({ + 'appender': { + topic: function() { + var log4js = require('../../lib/log4js'), logEvents = [], logger; + log4js.clearAppenders(); + log4js.addAppender( + require('../../lib/appenders/logLevelFilter') + .appender( + 'ERROR', + undefined, + function(evt) { logEvents.push(evt); } + ), + "logLevelTest" + ); + + logger = log4js.getLogger("logLevelTest"); + logger.debug('this should not trigger an event'); + logger.warn('neither should this'); + logger.error('this should, though'); + logger.fatal('so should this'); + return logEvents; + }, + 'should only pass log events greater than or equal to its own level' : function(logEvents) { + assert.equal(logEvents.length, 2); + assert.equal(logEvents[0].data[0], 'this should, though'); + assert.equal(logEvents[1].data[0], 'so should this'); + } + }, + + 'configure': { + topic: function() { + var log4js = require('../../lib/log4js') + , logger; + + remove(__dirname + '/logLevelFilter.log'); + remove(__dirname + '/logLevelFilter-warnings.log'); + remove(__dirname + '/logLevelFilter-debugs.log'); + + log4js.configure('test/vows/with-logLevelFilter.json'); + logger = log4js.getLogger("tests"); + logger.debug('debug'); + logger.info('info'); + logger.error('error'); + logger.warn('warn'); + logger.debug('debug'); + logger.trace('trace'); + //wait for the file system to catch up + setTimeout(this.callback, 500); + }, + 'tmp-tests.log': { + topic: function() { + fs.readFile(__dirname + '/logLevelFilter.log', 'utf8', this.callback); + }, + 'should contain all log messages': function (contents) { + var messages = contents.trim().split(EOL); + assert.deepEqual(messages, ['debug','info','error','warn','debug','trace']); + } + }, + 'tmp-tests-warnings.log': { + topic: function() { + fs.readFile(__dirname + '/logLevelFilter-warnings.log','utf8',this.callback); + }, + 'should contain only error and warning log messages': function(contents) { + var messages = contents.trim().split(EOL); + assert.deepEqual(messages, ['error','warn']); + } + }, + 'tmp-tests-debugs.log': { + topic: function() { + fs.readFile(__dirname + '/logLevelFilter-debugs.log','utf8',this.callback); + }, + 'should contain only trace and debug log messages': function(contents) { + var messages = contents.trim().split(EOL); + assert.deepEqual(messages, ['debug','debug','trace']); + } + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/logger-test.js b/node_modules/log4js/test/vows/logger-test.js new file mode 100644 index 0000000..976cb47 --- /dev/null +++ b/node_modules/log4js/test/vows/logger-test.js @@ -0,0 +1,81 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, levels = require('../../lib/levels') +, loggerModule = require('../../lib/logger') +, Logger = loggerModule.Logger; + +vows.describe('../../lib/logger').addBatch({ + 'constructor with no parameters': { + topic: new Logger(), + 'should use default category': function(logger) { + assert.equal(logger.category, Logger.DEFAULT_CATEGORY); + }, + 'should use TRACE log level': function(logger) { + assert.equal(logger.level, levels.TRACE); + } + }, + + 'constructor with category': { + topic: new Logger('cheese'), + 'should use category': function(logger) { + assert.equal(logger.category, 'cheese'); + }, + 'should use TRACE log level': function(logger) { + assert.equal(logger.level, levels.TRACE); + } + }, + + 'constructor with category and level': { + topic: new Logger('cheese', 'debug'), + 'should use category': function(logger) { + assert.equal(logger.category, 'cheese'); + }, + 'should use level': function(logger) { + assert.equal(logger.level, levels.DEBUG); + } + }, + + 'isLevelEnabled': { + topic: new Logger('cheese', 'info'), + 'should provide a level enabled function for all levels': function(logger) { + assert.isFunction(logger.isTraceEnabled); + assert.isFunction(logger.isDebugEnabled); + assert.isFunction(logger.isInfoEnabled); + assert.isFunction(logger.isWarnEnabled); + assert.isFunction(logger.isErrorEnabled); + assert.isFunction(logger.isFatalEnabled); + }, + 'should return the right values': function(logger) { + assert.isFalse(logger.isTraceEnabled()); + assert.isFalse(logger.isDebugEnabled()); + assert.isTrue(logger.isInfoEnabled()); + assert.isTrue(logger.isWarnEnabled()); + assert.isTrue(logger.isErrorEnabled()); + assert.isTrue(logger.isFatalEnabled()); + } + }, + + 'should emit log events': { + topic: function() { + var events = [], + logger = new Logger(); + logger.addListener('log', function (logEvent) { events.push(logEvent); }); + logger.debug('Event 1'); + loggerModule.disableAllLogWrites(); + logger.debug('Event 2'); + loggerModule.enableAllLogWrites(); + logger.debug('Event 3'); + return events; + }, + + 'when log writes are enabled': function(events) { + assert.equal(events[0].data[0], 'Event 1'); + }, + + 'but not when log writes are disabled': function(events) { + assert.equal(events.length, 2); + assert.equal(events[1].data[0], 'Event 3'); + } + } +}).exportTo(module); diff --git a/node_modules/log4js/test/vows/logging-test.js b/node_modules/log4js/test/vows/logging-test.js new file mode 100644 index 0000000..b3f9309 --- /dev/null +++ b/node_modules/log4js/test/vows/logging-test.js @@ -0,0 +1,636 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, sandbox = require('sandboxed-module'); + +function setupConsoleTest() { + var fakeConsole = {} + , logEvents = [] + , log4js; + + ['trace','debug','log','info','warn','error'].forEach(function(fn) { + fakeConsole[fn] = function() { + throw new Error("this should not be called."); + }; + }); + + log4js = sandbox.require( + '../../lib/log4js', + { + globals: { + console: fakeConsole + } + } + ); + + log4js.clearAppenders(); + log4js.addAppender(function(evt) { + logEvents.push(evt); + }); + + return { log4js: log4js, logEvents: logEvents, fakeConsole: fakeConsole }; +} + +vows.describe('log4js').addBatch({ + + 'getBufferedLogger': { + topic: function () { + var log4js = require('../../lib/log4js'); + log4js.clearAppenders(); + var logger = log4js.getBufferedLogger('tests'); + return logger; + }, + + 'should take a category and return a logger': function (logger) { + assert.equal(logger.target.category, 'tests'); + assert.isFunction(logger.flush); + assert.isFunction(logger.trace); + assert.isFunction(logger.debug); + assert.isFunction(logger.info); + assert.isFunction(logger.warn); + assert.isFunction(logger.error); + assert.isFunction(logger.fatal); + }, + + 'cache events': { + topic: function () { + var log4js = require('../../lib/log4js'); + log4js.clearAppenders(); + var logger = log4js.getBufferedLogger('tests1'); + var events = []; + logger.target.addListener("log", function (logEvent) { events.push(logEvent); }); + logger.debug("Debug event"); + logger.trace("Trace event 1"); + logger.trace("Trace event 2"); + logger.warn("Warning event"); + logger.error("Aargh!", new Error("Pants are on fire!")); + logger.error( + "Simulated CouchDB problem", + { err: 127, cause: "incendiary underwear" } + ); + return events; + }, + + 'should not emit log events if .flush() is not called.': function (events) { + assert.equal(events.length, 0); + } + }, + + 'log events after flush() is called': { + topic: function () { + var log4js = require('../../lib/log4js'); + log4js.clearAppenders(); + var logger = log4js.getBufferedLogger('tests2'); + logger.target.setLevel("TRACE"); + var events = []; + logger.target.addListener("log", function (logEvent) { events.push(logEvent); }); + logger.debug("Debug event"); + logger.trace("Trace event 1"); + logger.trace("Trace event 2"); + logger.warn("Warning event"); + logger.error("Aargh!", new Error("Pants are on fire!")); + logger.error( + "Simulated CouchDB problem", + { err: 127, cause: "incendiary underwear" } + ); + logger.flush(); + return events; + }, + + 'should emit log events when .flush() is called.': function (events) { + assert.equal(events.length, 6); + } + } + }, + + + 'getLogger': { + topic: function() { + var log4js = require('../../lib/log4js'); + log4js.clearAppenders(); + var logger = log4js.getLogger('tests'); + logger.setLevel("DEBUG"); + return logger; + }, + + 'should take a category and return a logger': function(logger) { + assert.equal(logger.category, 'tests'); + assert.equal(logger.level.toString(), "DEBUG"); + assert.isFunction(logger.debug); + assert.isFunction(logger.info); + assert.isFunction(logger.warn); + assert.isFunction(logger.error); + assert.isFunction(logger.fatal); + }, + + 'log events' : { + topic: function(logger) { + var events = []; + logger.addListener("log", function (logEvent) { events.push(logEvent); }); + logger.debug("Debug event"); + logger.trace("Trace event 1"); + logger.trace("Trace event 2"); + logger.warn("Warning event"); + logger.error("Aargh!", new Error("Pants are on fire!")); + logger.error("Simulated CouchDB problem", { err: 127, cause: "incendiary underwear" }); + return events; + }, + + 'should emit log events': function(events) { + assert.equal(events[0].level.toString(), 'DEBUG'); + assert.equal(events[0].data[0], 'Debug event'); + assert.instanceOf(events[0].startTime, Date); + }, + + 'should not emit events of a lower level': function(events) { + assert.equal(events.length, 4); + assert.equal(events[1].level.toString(), 'WARN'); + }, + + 'should include the error if passed in': function(events) { + assert.instanceOf(events[2].data[1], Error); + assert.equal(events[2].data[1].message, 'Pants are on fire!'); + } + } + }, + + 'when shutdown is called': { + topic: function() { + var callback = this.callback; + var events = { + appenderShutdownCalled: false, + shutdownCallbackCalled: false + }, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + './appenders/file': + { + name: "file", + appender: function() {}, + configure: function(configuration) { + return function() {}; + }, + shutdown: function(cb) { + events.appenderShutdownCalled = true; + cb(); + } + } + } + } + ), + config = { appenders: + [ { "type" : "file", + "filename" : "cheesy-wotsits.log", + "maxLogSize" : 1024, + "backups" : 3 + } + ] + }; + + log4js.configure(config); + log4js.shutdown(function shutdownCallback() { + events.shutdownCallbackCalled = true; + // Re-enable log writing so other tests that use logger are not + // affected. + require('../../lib/logger').enableAllLogWrites(); + callback(null, events); + }); + }, + + 'should invoke appender shutdowns': function(events) { + assert.ok(events.appenderShutdownCalled); + }, + + 'should call callback': function(events) { + assert.ok(events.shutdownCallbackCalled); + } + }, + + 'invalid configuration': { + 'should throw an exception': function() { + assert.throws(function() { + require('log4js').configure({ "type": "invalid" }); + }); + } + }, + + 'configuration when passed as object': { + topic: function() { + var appenderConfig, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + './appenders/file': + { + name: "file", + appender: function() {}, + configure: function(configuration) { + appenderConfig = configuration; + return function() {}; + } + } + } + } + ), + config = { appenders: + [ { "type" : "file", + "filename" : "cheesy-wotsits.log", + "maxLogSize" : 1024, + "backups" : 3 + } + ] + }; + log4js.configure(config); + return appenderConfig; + }, + 'should be passed to appender config': function(configuration) { + assert.equal(configuration.filename, 'cheesy-wotsits.log'); + } + }, + + 'configuration that causes an error': { + topic: function() { + var log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + './appenders/file': + { + name: "file", + appender: function() {}, + configure: function(configuration) { + throw new Error("oh noes"); + } + } + } + } + ), + config = { appenders: + [ { "type" : "file", + "filename" : "cheesy-wotsits.log", + "maxLogSize" : 1024, + "backups" : 3 + } + ] + }; + try { + log4js.configure(config); + } catch (e) { + return e; + } + }, + 'should wrap error in a meaningful message': function(e) { + assert.ok(e.message.indexOf('log4js configuration problem for') > -1); + } + }, + + 'configuration when passed as filename': { + topic: function() { + var appenderConfig, + configFilename, + log4js = sandbox.require( + '../../lib/log4js', + { requires: + { 'fs': + { statSync: + function() { + return { mtime: Date.now() }; + }, + readFileSync: + function(filename) { + configFilename = filename; + return JSON.stringify({ + appenders: [ + { type: "file" + , filename: "whatever.log" + } + ] + }); + }, + readdirSync: + function() { + return ['file']; + } + }, + './appenders/file': + { name: "file", + appender: function() {}, + configure: function(configuration) { + appenderConfig = configuration; + return function() {}; + } + } + } + } + ); + log4js.configure("/path/to/cheese.json"); + return [ configFilename, appenderConfig ]; + }, + 'should read the config from a file': function(args) { + assert.equal(args[0], '/path/to/cheese.json'); + }, + 'should pass config to appender': function(args) { + assert.equal(args[1].filename, "whatever.log"); + } + }, + + 'with no appenders defined' : { + topic: function() { + var logger, + that = this, + fakeConsoleAppender = { + name: "console", + appender: function() { + return function(evt) { + that.callback(null, evt); + }; + }, + configure: function() { + return fakeConsoleAppender.appender(); + } + }, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + './appenders/stdout': fakeConsoleAppender + } + } + ); + logger = log4js.getLogger("some-logger"); + logger.debug("This is a test"); + }, + 'should default to the stdout appender': function(evt) { + assert.equal(evt.data[0], "This is a test"); + } + }, + + 'addAppender' : { + topic: function() { + var log4js = require('../../lib/log4js'); + log4js.clearAppenders(); + return log4js; + }, + 'without a category': { + 'should register the function as a listener for all loggers': function (log4js) { + var appenderEvent, + appender = function(evt) { appenderEvent = evt; }, + logger = log4js.getLogger("tests"); + + log4js.addAppender(appender); + logger.debug("This is a test"); + assert.equal(appenderEvent.data[0], "This is a test"); + assert.equal(appenderEvent.categoryName, "tests"); + assert.equal(appenderEvent.level.toString(), "DEBUG"); + }, + 'if an appender for a category is defined': { + 'should register for that category': function (log4js) { + var otherEvent, + appenderEvent, + cheeseLogger; + + log4js.addAppender(function (evt) { appenderEvent = evt; }); + log4js.addAppender(function (evt) { otherEvent = evt; }, 'cheese'); + + cheeseLogger = log4js.getLogger('cheese'); + cheeseLogger.debug('This is a test'); + assert.deepEqual(appenderEvent, otherEvent); + assert.equal(otherEvent.data[0], 'This is a test'); + assert.equal(otherEvent.categoryName, 'cheese'); + + otherEvent = undefined; + appenderEvent = undefined; + log4js.getLogger('pants').debug("this should not be propagated to otherEvent"); + assert.isUndefined(otherEvent); + assert.equal(appenderEvent.data[0], "this should not be propagated to otherEvent"); + } + } + }, + + 'with a category': { + 'should only register the function as a listener for that category': function(log4js) { + var appenderEvent, + appender = function(evt) { appenderEvent = evt; }, + logger = log4js.getLogger("tests"); + + log4js.addAppender(appender, 'tests'); + logger.debug('this is a category test'); + assert.equal(appenderEvent.data[0], 'this is a category test'); + + appenderEvent = undefined; + log4js.getLogger('some other category').debug('Cheese'); + assert.isUndefined(appenderEvent); + } + }, + + 'with multiple categories': { + 'should register the function as a listener for all the categories': function(log4js) { + var appenderEvent, + appender = function(evt) { appenderEvent = evt; }, + logger = log4js.getLogger('tests'); + + log4js.addAppender(appender, 'tests', 'biscuits'); + + logger.debug('this is a test'); + assert.equal(appenderEvent.data[0], 'this is a test'); + appenderEvent = undefined; + + var otherLogger = log4js.getLogger('biscuits'); + otherLogger.debug("mmm... garibaldis"); + assert.equal(appenderEvent.data[0], "mmm... garibaldis"); + + appenderEvent = undefined; + + log4js.getLogger("something else").debug("pants"); + assert.isUndefined(appenderEvent); + }, + 'should register the function when the list of categories is an array': function(log4js) { + var appenderEvent, + appender = function(evt) { appenderEvent = evt; }; + + log4js.addAppender(appender, ['tests', 'pants']); + + log4js.getLogger('tests').debug('this is a test'); + assert.equal(appenderEvent.data[0], 'this is a test'); + + appenderEvent = undefined; + + log4js.getLogger('pants').debug("big pants"); + assert.equal(appenderEvent.data[0], "big pants"); + + appenderEvent = undefined; + + log4js.getLogger("something else").debug("pants"); + assert.isUndefined(appenderEvent); + } + } + }, + + 'default setup': { + topic: function() { + var appenderEvents = [], + fakeConsole = { + 'name': 'stdout', + 'appender': function () { + return function(evt) { + appenderEvents.push(evt); + }; + }, + 'configure': function (config) { + return fakeConsole.appender(); + } + }, + globalConsole = { + log: function() { } + }, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + './appenders/stdout': fakeConsole + }, + globals: { + console: globalConsole + } + } + ), + logger = log4js.getLogger('a-test'); + + logger.debug("this is a test"); + globalConsole.log("this should not be logged"); + + return appenderEvents; + }, + + 'should configure a stdout appender': function(appenderEvents) { + assert.equal(appenderEvents[0].data[0], 'this is a test'); + }, + + 'should not replace console.log with log4js version': function(appenderEvents) { + assert.equal(appenderEvents.length, 1); + } + }, + + 'console' : { + topic: setupConsoleTest, + + 'when replaceConsole called': { + topic: function(test) { + test.log4js.replaceConsole(); + + test.fakeConsole.log("Some debug message someone put in a module"); + test.fakeConsole.debug("Some debug"); + test.fakeConsole.error("An error"); + test.fakeConsole.info("some info"); + test.fakeConsole.warn("a warning"); + + test.fakeConsole.log("cheese (%s) and biscuits (%s)", "gouda", "garibaldis"); + test.fakeConsole.log({ lumpy: "tapioca" }); + test.fakeConsole.log("count %d", 123); + test.fakeConsole.log("stringify %j", { lumpy: "tapioca" }); + + return test.logEvents; + }, + + 'should replace console.log methods with log4js ones': function(logEvents) { + assert.equal(logEvents.length, 9); + assert.equal(logEvents[0].data[0], "Some debug message someone put in a module"); + assert.equal(logEvents[0].level.toString(), "INFO"); + assert.equal(logEvents[1].data[0], "Some debug"); + assert.equal(logEvents[1].level.toString(), "DEBUG"); + assert.equal(logEvents[2].data[0], "An error"); + assert.equal(logEvents[2].level.toString(), "ERROR"); + assert.equal(logEvents[3].data[0], "some info"); + assert.equal(logEvents[3].level.toString(), "INFO"); + assert.equal(logEvents[4].data[0], "a warning"); + assert.equal(logEvents[4].level.toString(), "WARN"); + assert.equal(logEvents[5].data[0], "cheese (%s) and biscuits (%s)"); + assert.equal(logEvents[5].data[1], "gouda"); + assert.equal(logEvents[5].data[2], "garibaldis"); + } + }, + 'when turned off': { + topic: function(test) { + test.log4js.restoreConsole(); + try { + test.fakeConsole.log("This should cause the error described in the setup"); + } catch (e) { + return e; + } + }, + 'should call the original console methods': function (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, "this should not be called."); + } + } + }, + 'console configuration': { + topic: setupConsoleTest, + 'when disabled': { + topic: function(test) { + test.log4js.replaceConsole(); + test.log4js.configure({ replaceConsole: false }); + try { + test.fakeConsole.log("This should cause the error described in the setup"); + } catch (e) { + return e; + } + }, + 'should allow for turning off console replacement': function (err) { + assert.instanceOf(err, Error); + assert.equal(err.message, 'this should not be called.'); + } + }, + 'when enabled': { + topic: function(test) { + test.log4js.restoreConsole(); + test.log4js.configure({ replaceConsole: true }); + //log4js.configure clears all appenders + test.log4js.addAppender(function(evt) { + test.logEvents.push(evt); + }); + + test.fakeConsole.debug("Some debug"); + return test.logEvents; + }, + + 'should allow for turning on console replacement': function (logEvents) { + assert.equal(logEvents.length, 1); + assert.equal(logEvents[0].level.toString(), "DEBUG"); + assert.equal(logEvents[0].data[0], "Some debug"); + } + } + }, + 'configuration persistence' : { + topic: function() { + var logEvent, + firstLog4js = require('../../lib/log4js'), + secondLog4js; + + firstLog4js.clearAppenders(); + firstLog4js.addAppender(function(evt) { logEvent = evt; }); + + secondLog4js = require('../../lib/log4js'); + secondLog4js.getLogger().info("This should go to the appender defined in firstLog4js"); + + return logEvent; + }, + 'should maintain appenders between requires': function (logEvent) { + assert.equal(logEvent.data[0], "This should go to the appender defined in firstLog4js"); + } + }, + + 'getDefaultLogger': { + topic: function() { + return require('../../lib/log4js').getDefaultLogger(); + }, + 'should return a logger': function(logger) { + assert.ok(logger.info); + assert.ok(logger.debug); + assert.ok(logger.error); + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/logglyAppender-test.js b/node_modules/log4js/test/vows/logglyAppender-test.js new file mode 100644 index 0000000..ce7c6a6 --- /dev/null +++ b/node_modules/log4js/test/vows/logglyAppender-test.js @@ -0,0 +1,141 @@ +"use strict"; +var vows = require('vows') + , assert = require('assert') + , log4js = require('../../lib/log4js') + , sandbox = require('sandboxed-module') + ; + +function setupLogging(category, options) { + var msgs = []; + + var fakeLoggly = { + createClient: function(options) { + return { + config: options, + log: function(msg, tags, cb) { + msgs.push({ + msg: msg, + tags: tags, + cb: cb + }); + } + }; + } + }; + + var fakeLayouts = { + layout: function(type, config) { + this.type = type; + this.config = config; + return log4js.layouts.messagePassThroughLayout; + }, + basicLayout: log4js.layouts.basicLayout, + messagePassThroughLayout: log4js.layouts.messagePassThroughLayout + }; + + var fakeConsole = { + errors: [], + error: function(msg, value) { + this.errors.push({ msg: msg, value: value }); + } + }; + + var logglyModule = sandbox.require('../../lib/appenders/loggly', { + requires: { + 'loggly': fakeLoggly, + '../layouts': fakeLayouts + }, + globals: { + console: fakeConsole + } + }); + + log4js.addAppender( + logglyModule.configure(options), + logglyModule.shutdown, + category); + + return { + logger: log4js.getLogger(category), + loggly: fakeLoggly, + layouts: fakeLayouts, + console: fakeConsole, + results: msgs + }; +} + +log4js.clearAppenders(); + +function setupTaggedLogging() { + return setupLogging('loggly', { + token: 'your-really-long-input-token', + subdomain: 'your-subdomain', + tags: ['loggly-tag1', 'loggly-tag2', 'loggly-tagn'] + }); +} + +vows.describe('log4js logglyAppender').addBatch({ + 'with minimal config': { + topic: function() { + var setup = setupTaggedLogging(); + setup.logger.log('trace', 'Log event #1', 'Log 2', { tags: ['tag1', 'tag2'] }); + return setup; + }, + 'has a results.length of 1': function(topic) { + assert.equal(topic.results.length, 1); + }, + 'has a result msg with both args concatenated': function(topic) { + assert.equal(topic.results[0].msg.msg, 'Log event #1 Log 2'); + }, + 'has a result tags with the arg that contains tags': function(topic) { + assert.deepEqual(topic.results[0].tags, ['tag1', 'tag2']); + } + } +}).addBatch({ + 'config with object with tags and other keys': { + topic: function() { + var setup = setupTaggedLogging(); + + // ignore this tags object b/c there are 2 keys + setup.logger.log('trace', 'Log event #1', { other: 'other', tags: ['tag1', 'tag2'] }); + return setup; + }, + 'has a results.length of 1': function(topic) { + assert.equal(topic.results.length, 1); + }, + 'has a result msg with the args concatenated': function(topic) { + assert.equal(topic.results[0].msg.msg, + 'Log event #1 { other: \'other\', tags: [ \'tag1\', \'tag2\' ] }'); + }, + 'has a result tags with the arg that contains no tags': function(topic) { + assert.deepEqual(topic.results[0].tags, []); + } + } +}).addBatch({ + 'with shutdown callback': { + topic: function() { + var setup = setupTaggedLogging(); + + setup.logger.log('trace', 'Log event #1', 'Log 2', { + tags: ['tag1', 'tag2'] + }); + + return setup; + }, + 'after the last message has been sent': { + topic: function (topic) { + var that = this; + + log4js.shutdown(this.callback); + topic.results[0].cb(); + + // setTimeout(function() { + // that.callback(new Error('Shutdown callback has not been called')); + // }, 0); + }, + 'calls `log4js.shutdown`s callback function.': function(error, result) { + assert.equal(error, undefined); + } + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/logstashUDP-test.js b/node_modules/log4js/test/vows/logstashUDP-test.js new file mode 100644 index 0000000..0e2c050 --- /dev/null +++ b/node_modules/log4js/test/vows/logstashUDP-test.js @@ -0,0 +1,135 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, log4js = require('../../lib/log4js') +, sandbox = require('sandboxed-module') +; + +function setupLogging(category, options) { + var udpSent = {}; + + var fakeDgram = { + createSocket: function (type) { + return { + send: function(buffer, offset, length, port, host, callback) { + udpSent.date = new Date(); + udpSent.host = host; + udpSent.port = port; + udpSent.length = length; + udpSent.offset = 0; + udpSent.buffer = buffer; + callback(undefined, length); + } + }; + } + }; + + var logstashModule = sandbox.require('../../lib/appenders/logstashUDP', { + requires: { + 'dgram': fakeDgram + } + }); + log4js.clearAppenders(); + log4js.addAppender(logstashModule.configure(options), category); + + return { + logger: log4js.getLogger(category), + results: udpSent + }; +} + +vows.describe('logstashUDP appender').addBatch({ + 'when logging with logstash via UDP': { + topic: function() { + var setup = setupLogging('myCategory', { + "host": "127.0.0.1", + "port": 10001, + "type": "logstashUDP", + "logType": "myAppType", + "category": "myLogger", + "fields": { + "field1": "value1", + "field2": "value2" + }, + "layout": { + "type": "pattern", + "pattern": "%m" + } + }); + setup.logger.log('trace', 'Log event #1'); + return setup; + }, + 'an UDP packet should be sent': function (topic) { + assert.equal(topic.results.host, "127.0.0.1"); + assert.equal(topic.results.port, 10001); + assert.equal(topic.results.offset, 0); + var json = JSON.parse(topic.results.buffer.toString()); + assert.equal(json.type, 'myAppType'); + var fields = { + field1: 'value1', + field2: 'value2', + level: 'TRACE', + category: 'myCategory' + }; + assert.equal(JSON.stringify(json.fields), JSON.stringify(fields)); + assert.equal(json.message, 'Log event #1'); + // Assert timestamp, up to hours resolution. + var date = new Date(json['@timestamp']); + assert.equal( + date.toISOString().substring(0, 14), + topic.results.date.toISOString().substring(0, 14) + ); + } + }, + + 'when missing some options': { + topic: function() { + var setup = setupLogging('myLogger', { + "host": "127.0.0.1", + "port": 10001, + "type": "logstashUDP", + "category": "myLogger", + "layout": { + "type": "pattern", + "pattern": "%m" + } + }); + setup.logger.log('trace', 'Log event #1'); + return setup; + }, + 'it sets some defaults': function (topic) { + var json = JSON.parse(topic.results.buffer.toString()); + assert.equal(json.type, 'myLogger'); + assert.equal( + JSON.stringify(json.fields), + JSON.stringify({'level': 'TRACE', 'category': 'myLogger'}) + ); + } + }, + + 'when extra fields provided': { + topic: function() { + var setup = setupLogging('myLogger', { + "host": "127.0.0.1", + "port": 10001, + "type": "logstashUDP", + "category": "myLogger", + "layout": { + "type": "dummy" + } + }); + setup.logger.log('trace', 'Log event #1', {'extra1': 'value1', 'extra2': 'value2'}); + return setup; + },'they should be added to fields structure': function (topic) { + var json = JSON.parse(topic.results.buffer.toString()); + var fields = { + 'extra1': 'value1', + 'extra2': 'value2', + 'level': 'TRACE', + 'category': 'myLogger' + }; + assert.equal(JSON.stringify(json.fields), JSON.stringify(fields)); + } + } + +}).export(module); diff --git a/node_modules/log4js/test/vows/mailgunAppender-test.js b/node_modules/log4js/test/vows/mailgunAppender-test.js new file mode 100644 index 0000000..261fb1e --- /dev/null +++ b/node_modules/log4js/test/vows/mailgunAppender-test.js @@ -0,0 +1,190 @@ +"use strict"; +var vows = require('vows'); +var assert = require('assert'); +var log4js = require('../../lib/log4js'); +var sandbox = require('sandboxed-module'); + +function setupLogging(category, options) { + var msgs = []; + + var mailgunCredentials = { + apiKey: options.apikey, + domain: options.domain + }; + + var fakeMailgun = function (conf) { + return { + messages: function () { + return { + config: options, + send: function (data, callback) { + msgs.push(data); + callback(false, {status:"OK"}); + } + }; + } + }; + }; + + var fakeLayouts = { + layout: function (type, config) { + this.type = type; + this.config = config; + return log4js.layouts.messagePassThroughLayout; + }, + basicLayout: log4js.layouts.basicLayout, + messagePassThroughLayout: log4js.layouts.messagePassThroughLayout + }; + + var fakeConsole = { + errors: [], + logs: [], + error: function (msg, value) { + this.errors.push({msg: msg, value: value}); + }, + log: function (msg, value) { + this.logs.push({msg: msg, value: value}); + } + }; + + + var mailgunModule = sandbox.require('../../lib/appenders/mailgun', { + requires: { + 'mailgun-js': fakeMailgun, + '../layouts': fakeLayouts + }, + globals: { + console: fakeConsole + } + }); + + + log4js.addAppender(mailgunModule.configure(options), category); + + return { + logger: log4js.getLogger(category), + mailer: fakeMailgun, + layouts: fakeLayouts, + console: fakeConsole, + mails: msgs, + credentials: mailgunCredentials + }; +} + +function checkMessages(result) { + for (var i = 0; i < result.mails.length; ++i) { + assert.equal(result.mails[i].from, 'sender@domain.com'); + assert.equal(result.mails[i].to, 'recepient@domain.com'); + assert.equal(result.mails[i].subject, 'This is subject'); + assert.ok(new RegExp('.+Log event #' + (i + 1)).test(result.mails[i].text)); + } +} + +log4js.clearAppenders(); + +vows.describe('log4js mailgunAppender').addBatch({ + 'mailgun setup': { + topic: setupLogging('mailgun setup', { + apikey: 'APIKEY', + domain: 'DOMAIN', + from: 'sender@domain.com', + to: 'recepient@domain.com', + subject: 'This is subject' + }), + 'mailgun credentials should match': function(result){ + assert.equal(result.credentials.apiKey, 'APIKEY'); + assert.equal(result.credentials.domain, 'DOMAIN'); + } + }, + + 'basic usage': { + topic: function(){ + var setup = setupLogging('basic usage', { + apikey: 'APIKEY', + domain: 'DOMAIN', + from: 'sender@domain.com', + to: 'recepient@domain.com', + subject: 'This is subject' + }); + + setup.logger.info("Log event #1"); + return setup; + }, + 'there should be one message only': function (result) { + assert.equal(result.mails.length, 1); + }, + 'message should contain proper data': function (result) { + checkMessages(result); + } + }, + 'config with layout': { + topic: function () { + var setup = setupLogging('config with layout', { + layout: { + type: "tester" + } + }); + return setup; + }, + 'should configure layout': function (result) { + assert.equal(result.layouts.type, 'tester'); + } + }, + 'error when sending email': { + topic: function () { + var setup = setupLogging('separate email for each event', { + apikey: 'APIKEY', + domain: 'DOMAIN', + from: 'sender@domain.com', + to: 'recepient@domain.com', + subject: 'This is subject' + }); + + setup.mailer.messages = function () { + return { + send: function (msg, cb) { + cb({msg: "log4js.mailgunAppender - Error happened"}, null); + } + }; + }; + + setup.logger.info("This will break"); + return setup.console; + }, + 'should be logged to console': function (cons) { + assert.equal(cons.errors.length, 1); + assert.equal(cons.errors[0].msg, 'log4js.mailgunAppender - Error happened'); + } + }, + 'separate email for each event': { + topic: function () { + var self = this; + var setup = setupLogging('separate email for each event', { + apikey: 'APIKEY', + domain: 'DOMAIN', + from: 'sender@domain.com', + to: 'recepient@domain.com', + subject: 'This is subject' + }); + setTimeout(function () { + setup.logger.info('Log event #1'); + }, 0); + setTimeout(function () { + setup.logger.info('Log event #2'); + }, 500); + setTimeout(function () { + setup.logger.info('Log event #3'); + }, 1100); + setTimeout(function () { + self.callback(null, setup); + }, 3000); + }, + 'there should be three messages': function (result) { + assert.equal(result.mails.length, 3); + }, + 'messages should contain proper data': function (result) { + checkMessages(result); + } + } + +}).export(module); diff --git a/node_modules/log4js/test/vows/multiprocess-test.js b/node_modules/log4js/test/vows/multiprocess-test.js new file mode 100644 index 0000000..2e8bffb --- /dev/null +++ b/node_modules/log4js/test/vows/multiprocess-test.js @@ -0,0 +1,317 @@ +"use strict"; +var vows = require('vows') +, sandbox = require('sandboxed-module') +, assert = require('assert') +; + +function makeFakeNet() { + return { + logEvents: [], + data: [], + cbs: {}, + createConnectionCalled: 0, + fakeAppender: function(logEvent) { + this.logEvents.push(logEvent); + }, + createConnection: function(port, host) { + var fakeNet = this; + this.port = port; + this.host = host; + this.createConnectionCalled += 1; + return { + on: function(evt, cb) { + fakeNet.cbs[evt] = cb; + }, + write: function(data, encoding) { + fakeNet.data.push(data); + fakeNet.encoding = encoding; + }, + end: function() { + fakeNet.closeCalled = true; + } + }; + }, + createServer: function(cb) { + var fakeNet = this; + cb({ + remoteAddress: '1.2.3.4', + remotePort: '1234', + setEncoding: function(encoding) { + fakeNet.encoding = encoding; + }, + on: function(event, cb) { + fakeNet.cbs[event] = cb; + } + }); + + return { + listen: function(port, host) { + fakeNet.port = port; + fakeNet.host = host; + } + }; + } + }; +} + +vows.describe('Multiprocess Appender').addBatch({ + 'worker': { + topic: function() { + var fakeNet = makeFakeNet(), + appender = sandbox.require( + '../../lib/appenders/multiprocess', + { + requires: { + 'net': fakeNet + } + } + ).appender({ mode: 'worker', loggerPort: 1234, loggerHost: 'pants' }); + + //don't need a proper log event for the worker tests + appender('before connect'); + fakeNet.cbs.connect(); + appender('after connect'); + fakeNet.cbs.close(true); + appender('after error, before connect'); + fakeNet.cbs.connect(); + appender('after error, after connect'); + appender(new Error('Error test')); + + return fakeNet; + }, + 'should open a socket to the loggerPort and loggerHost': function(net) { + assert.equal(net.port, 1234); + assert.equal(net.host, 'pants'); + }, + 'should buffer messages written before socket is connected': function(net) { + assert.equal(net.data[0], JSON.stringify('before connect')); + }, + 'should write log messages to socket as json strings with a terminator string': function(net) { + assert.equal(net.data[0], JSON.stringify('before connect')); + assert.equal(net.data[1], '__LOG4JS__'); + assert.equal(net.data[2], JSON.stringify('after connect')); + assert.equal(net.data[3], '__LOG4JS__'); + assert.equal(net.encoding, 'utf8'); + }, + 'should attempt to re-open the socket on error': function(net) { + assert.equal(net.data[4], JSON.stringify('after error, before connect')); + assert.equal(net.data[5], '__LOG4JS__'); + assert.equal(net.data[6], JSON.stringify('after error, after connect')); + assert.equal(net.data[7], '__LOG4JS__'); + assert.equal(net.createConnectionCalled, 2); + }, + 'should serialize an Error correctly': function(net) { + assert( + JSON.parse(net.data[8]).stack, + "Expected:\n\n" + net.data[8] + "\n\n to have a 'stack' property" + ); + var actual = JSON.parse(net.data[8]).stack; + var expectedRegex = /^Error: Error test/; + assert( + actual.match(expectedRegex), + "Expected: \n\n " + actual + "\n\n to match " + expectedRegex + ); + + } + }, + 'worker with timeout': { + topic: function() { + var fakeNet = makeFakeNet(), + appender = sandbox.require( + '../../lib/appenders/multiprocess', + { + requires: { + 'net': fakeNet + } + } + ).appender({ mode: 'worker' }); + + //don't need a proper log event for the worker tests + appender('before connect'); + fakeNet.cbs.connect(); + appender('after connect'); + fakeNet.cbs.timeout(); + appender('after timeout, before close'); + fakeNet.cbs.close(); + appender('after close, before connect'); + fakeNet.cbs.connect(); + appender('after close, after connect'); + + return fakeNet; + }, + 'should attempt to re-open the socket': function(net) { + //skipping the __LOG4JS__ separators + assert.equal(net.data[0], JSON.stringify('before connect')); + assert.equal(net.data[2], JSON.stringify('after connect')); + assert.equal(net.data[4], JSON.stringify('after timeout, before close')); + assert.equal(net.data[6], JSON.stringify('after close, before connect')); + assert.equal(net.data[8], JSON.stringify('after close, after connect')); + assert.equal(net.createConnectionCalled, 2); + } + }, + 'worker defaults': { + topic: function() { + var fakeNet = makeFakeNet(), + appender = sandbox.require( + '../../lib/appenders/multiprocess', + { + requires: { + 'net': fakeNet + } + } + ).appender({ mode: 'worker' }); + + return fakeNet; + }, + 'should open a socket to localhost:5000': function(net) { + assert.equal(net.port, 5000); + assert.equal(net.host, 'localhost'); + } + }, + 'master': { + topic: function() { + var fakeNet = makeFakeNet(), + appender = sandbox.require( + '../../lib/appenders/multiprocess', + { + requires: { + 'net': fakeNet + } + } + ).appender({ mode: 'master', + loggerHost: 'server', + loggerPort: 1234, + actualAppender: fakeNet.fakeAppender.bind(fakeNet) + }); + + appender('this should be sent to the actual appender directly'); + + return fakeNet; + }, + 'should listen for log messages on loggerPort and loggerHost': function(net) { + assert.equal(net.port, 1234); + assert.equal(net.host, 'server'); + }, + 'should return the underlying appender': function(net) { + assert.equal(net.logEvents[0], 'this should be sent to the actual appender directly'); + }, + 'when a client connects': { + topic: function(net) { + var logString = JSON.stringify( + { level: { level: 10000, levelStr: 'DEBUG' } + , data: ['some debug']} + ) + '__LOG4JS__'; + + net.cbs.data( + JSON.stringify( + { level: { level: 40000, levelStr: 'ERROR' } + , data: ['an error message'] } + ) + '__LOG4JS__' + ); + net.cbs.data(logString.substring(0, 10)); + net.cbs.data(logString.substring(10)); + net.cbs.data(logString + logString + logString); + net.cbs.end( + JSON.stringify( + { level: { level: 50000, levelStr: 'FATAL' } + , data: ["that's all folks"] } + ) + '__LOG4JS__' + ); + net.cbs.data('bad message__LOG4JS__'); + return net; + }, + 'should parse log messages into log events and send to appender': function(net) { + assert.equal(net.logEvents[1].level.toString(), 'ERROR'); + assert.equal(net.logEvents[1].data[0], 'an error message'); + assert.equal(net.logEvents[1].remoteAddress, '1.2.3.4'); + assert.equal(net.logEvents[1].remotePort, '1234'); + }, + 'should parse log messages split into multiple chunks': function(net) { + assert.equal(net.logEvents[2].level.toString(), 'DEBUG'); + assert.equal(net.logEvents[2].data[0], 'some debug'); + assert.equal(net.logEvents[2].remoteAddress, '1.2.3.4'); + assert.equal(net.logEvents[2].remotePort, '1234'); + }, + 'should parse multiple log messages in a single chunk': function(net) { + assert.equal(net.logEvents[3].data[0], 'some debug'); + assert.equal(net.logEvents[4].data[0], 'some debug'); + assert.equal(net.logEvents[5].data[0], 'some debug'); + }, + 'should handle log messages sent as part of end event': function(net) { + assert.equal(net.logEvents[6].data[0], "that's all folks"); + }, + 'should handle unparseable log messages': function(net) { + assert.equal(net.logEvents[7].level.toString(), 'ERROR'); + assert.equal(net.logEvents[7].categoryName, 'log4js'); + assert.equal(net.logEvents[7].data[0], 'Unable to parse log:'); + assert.equal(net.logEvents[7].data[1], 'bad message'); + } + } + }, + 'master defaults': { + topic: function() { + var fakeNet = makeFakeNet(), + appender = sandbox.require( + '../../lib/appenders/multiprocess', + { + requires: { + 'net': fakeNet + } + } + ).appender({ mode: 'master' }); + + return fakeNet; + }, + 'should listen for log messages on localhost:5000': function(net) { + assert.equal(net.port, 5000); + assert.equal(net.host, 'localhost'); + } + } +}).addBatch({ + 'configure': { + topic: function() { + var results = {} + , fakeNet = makeFakeNet() + , appender = sandbox.require( + '../../lib/appenders/multiprocess', + { + requires: { + 'net': fakeNet, + '../log4js': { + loadAppender: function(app) { + results.appenderLoaded = app; + }, + appenderMakers: { + 'madeupappender': function(config, options) { + results.config = config; + results.options = options; + } + } + } + } + } + ).configure( + { + mode: 'master', + appender: { + type: 'madeupappender', + cheese: 'gouda' + } + }, + { crackers: 'jacobs' } + ); + + return results; + + }, + 'should load underlying appender for master': function(results) { + assert.equal(results.appenderLoaded, 'madeupappender'); + }, + 'should pass config to underlying appender': function(results) { + assert.equal(results.config.cheese, 'gouda'); + }, + 'should pass options to underlying appender': function(results) { + assert.equal(results.options.crackers, 'jacobs'); + } + } +}).exportTo(module); diff --git a/node_modules/log4js/test/vows/newLevel-test.js b/node_modules/log4js/test/vows/newLevel-test.js new file mode 100644 index 0000000..c0c2487 --- /dev/null +++ b/node_modules/log4js/test/vows/newLevel-test.js @@ -0,0 +1,138 @@ +"use strict"; +var vows = require('vows') + , assert = require('assert') + , Level = require('../../lib/levels') + , log4js = require('../../lib/log4js') + , loggerModule = require('../../lib/logger') + , Logger = loggerModule.Logger; + +vows.describe('../../lib/logger').addBatch({ + 'creating a new log level': { + topic: function () { + Level.forName("DIAG", 6000); + return new Logger(); + }, + + 'should export new log level in levels module': function (logger) { + assert.isDefined(Level.DIAG); + assert.equal(Level.DIAG.levelStr, "DIAG"); + assert.equal(Level.DIAG.level, 6000); + }, + + 'should create named function on logger prototype': function(logger) { + assert.isFunction(logger.diag); + }, + + 'should create isLevelEnabled function on logger prototype': function(logger) { + assert.isFunction(logger.isDiagEnabled); + }, + }, + + 'creating a new log level with underscores': { + topic: function () { + Level.forName("NEW_LEVEL_OTHER", 6000); + return new Logger(); + }, + + 'should export new log level to levels module': function (logger) { + assert.isDefined(Level.NEW_LEVEL_OTHER); + assert.equal(Level.NEW_LEVEL_OTHER.levelStr, "NEW_LEVEL_OTHER"); + assert.equal(Level.NEW_LEVEL_OTHER.level, 6000); + }, + + 'should create named function on logger prototype in camel case': function(logger) { + assert.isFunction(logger.newLevelOther); + }, + + 'should create named isLevelEnabled function on logger prototype in camel case': + function(logger) { + assert.isFunction(logger.isNewLevelOtherEnabled); + } + }, + + 'creating log events containing newly created log level': { + topic: function() { + var events = [], + logger = new Logger(); + logger.addListener("log", function (logEvent) { events.push(logEvent); }); + + logger.log(Level.forName("LVL1", 6000), "Event 1"); + logger.log(Level.getLevel("LVL1"), "Event 2"); + logger.log("LVL1", "Event 3"); + logger.lvl1("Event 4"); + + logger.setLevel(Level.forName("LVL2", 7000)); + logger.lvl1("Event 5"); + + return events; + }, + + 'should show log events with new log level': function(events) { + assert.equal(events[0].level.toString(), "LVL1"); + assert.equal(events[0].data[0], "Event 1"); + + assert.equal(events[1].level.toString(), "LVL1"); + assert.equal(events[1].data[0], "Event 2"); + + assert.equal(events[2].level.toString(), "LVL1"); + assert.equal(events[2].data[0], "Event 3"); + + assert.equal(events[3].level.toString(), "LVL1"); + assert.equal(events[3].data[0], "Event 4"); + }, + + 'should not be present if min log level is greater than newly created level': + function(events) { + assert.equal(events.length, 4); + } + }, + + 'creating a new log level with incorrect parameters': { + topic: function() { + log4js.levels.forName(9000, "FAIL_LEVEL_1"); + log4js.levels.forName("FAIL_LEVEL_2"); + return new Logger(); + }, + + 'should fail to create the level': function(logger) { + assert.isUndefined(Level.FAIL_LEVEL_1); + assert.isUndefined(Level.FAIL_LEVEL_2); + } + }, + + 'calling log with an undefined log level': { + topic: function() { + var events = [], + logger = new Logger(); + logger.addListener("log", function (logEvent) { events.push(logEvent); }); + + logger.log("LEVEL_DOES_NEXT_EXIST", "Event 1"); + logger.log(Level.forName("LEVEL_DOES_NEXT_EXIST"), "Event 2"); + + return events; + }, + + 'should fallback to the default log level (INFO)': function(events) { + assert.equal(events[0].level.toString(), "INFO"); + assert.equal(events[1].level.toString(), "INFO"); + } + }, + + 'creating a new level with an existing level name': { + topic: function() { + var events = [], + logger = new Logger(); + logger.addListener("log", function (logEvent) { events.push(logEvent); }); + + logger.log(log4js.levels.forName("MY_LEVEL", 9000), "Event 1"); + logger.log(log4js.levels.forName("MY_LEVEL", 8000), "Event 1"); + + return events; + }, + + 'should override the existing log level': function(events) { + assert.equal(events[0].level.level, 9000); + assert.equal(events[1].level.level, 8000); + } + } +}).exportTo(module); \ No newline at end of file diff --git a/node_modules/log4js/test/vows/nolog-test.js b/node_modules/log4js/test/vows/nolog-test.js new file mode 100644 index 0000000..04776bf --- /dev/null +++ b/node_modules/log4js/test/vows/nolog-test.js @@ -0,0 +1,297 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, util = require('util') +, EE = require('events').EventEmitter +, levels = require('../../lib/levels'); + +function MockLogger() { + + var that = this; + this.messages = []; + + this.log = function(level, message, exception) { + that.messages.push({ level: level, message: message }); + }; + + this.isLevelEnabled = function(level) { + return level.isGreaterThanOrEqualTo(that.level); + }; + + this.level = levels.TRACE; + +} + +function MockRequest(remoteAddr, method, originalUrl) { + + this.socket = { remoteAddress: remoteAddr }; + this.originalUrl = originalUrl; + this.method = method; + this.httpVersionMajor = '5'; + this.httpVersionMinor = '0'; + this.headers = {}; +} + +function MockResponse(statusCode) { + var r = this; + this.statusCode = statusCode; + + this.end = function(chunk, encoding) { + r.emit('finish'); + }; +} +util.inherits(MockResponse, EE); + +vows.describe('log4js connect logger').addBatch({ + 'getConnectLoggerModule': { + topic: function() { + var clm = require('../../lib/connect-logger'); + return clm; + }, + + 'should return a "connect logger" factory' : function(clm) { + assert.isObject(clm); + }, + + 'nolog String' : { + topic: function(clm) { + var ml = new MockLogger(); + var cl = clm.connectLogger(ml, { nolog: "\\.gif" }); + return {cl: cl, ml: ml}; + }, + + 'check unmatch url request': { + topic: function(d){ + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.png'); // not gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + },10); + }, + 'check message': function(messages){ + assert.isArray(messages); + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.include(messages[0].message, 'GET'); + assert.include(messages[0].message, 'http://url'); + assert.include(messages[0].message, 'my.remote.addr'); + assert.include(messages[0].message, '200'); + messages.pop(); + } + }, + + 'check match url request': { + topic: function(d) { + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.gif'); // gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + },10); + }, + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 0); + } + } + }, + + 'nolog Strings' : { + topic: function(clm) { + var ml = new MockLogger(); + var cl = clm.connectLogger(ml, {nolog: "\\.gif|\\.jpe?g"}); + return {cl: cl, ml: ml}; + }, + + 'check unmatch url request (png)': { + topic: function(d){ + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.png'); // not gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages){ + assert.isArray(messages); + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.include(messages[0].message, 'GET'); + assert.include(messages[0].message, 'http://url'); + assert.include(messages[0].message, 'my.remote.addr'); + assert.include(messages[0].message, '200'); + messages.pop(); + } + }, + + 'check match url request (gif)': { + topic: function(d) { + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.gif'); // gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 0); + } + }, + 'check match url request (jpeg)': { + topic: function(d) { + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.jpeg'); // gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 0); + } + } + }, + 'nolog Array' : { + topic: function(clm) { + var ml = new MockLogger(); + var cl = clm.connectLogger(ml, {nolog: ["\\.gif", "\\.jpe?g"]}); + return {cl: cl, ml: ml}; + }, + + 'check unmatch url request (png)': { + topic: function(d){ + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.png'); // not gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages){ + assert.isArray(messages); + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.include(messages[0].message, 'GET'); + assert.include(messages[0].message, 'http://url'); + assert.include(messages[0].message, 'my.remote.addr'); + assert.include(messages[0].message, '200'); + messages.pop(); + } + }, + + 'check match url request (gif)': { + topic: function(d) { + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.gif'); // gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 0); + } + }, + + 'check match url request (jpeg)': { + topic: function(d) { + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.jpeg'); // gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 0); + } + }, + }, + 'nolog RegExp' : { + topic: function(clm) { + var ml = new MockLogger(); + var cl = clm.connectLogger(ml, {nolog: /\.gif|\.jpe?g/}); + return {cl: cl, ml: ml}; + }, + + 'check unmatch url request (png)': { + topic: function(d){ + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.png'); // not gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages){ + assert.isArray(messages); + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.include(messages[0].message, 'GET'); + assert.include(messages[0].message, 'http://url'); + assert.include(messages[0].message, 'my.remote.addr'); + assert.include(messages[0].message, '200'); + messages.pop(); + } + }, + + 'check match url request (gif)': { + topic: function(d) { + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.gif'); // gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 0); + } + }, + + 'check match url request (jpeg)': { + topic: function(d) { + var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.jpeg'); // gif + var res = new MockResponse(200); + var cb = this.callback; + d.cl(req, res, function() { }); + res.end('chunk', 'encoding'); + setTimeout(function() { + cb(null, d.ml.messages); + }, 10); + }, + 'check message': function(messages) { + assert.isArray(messages); + assert.equal(messages.length, 0); + } + } + } + } + +}).export(module); diff --git a/node_modules/log4js/test/vows/reloadConfiguration-test.js b/node_modules/log4js/test/vows/reloadConfiguration-test.js new file mode 100644 index 0000000..781f577 --- /dev/null +++ b/node_modules/log4js/test/vows/reloadConfiguration-test.js @@ -0,0 +1,340 @@ +"use strict"; +var vows = require('vows') +, assert = require('assert') +, sandbox = require('sandboxed-module'); + +function setupConsoleTest() { + var fakeConsole = {} + , logEvents = [] + , log4js; + + ['trace','debug','log','info','warn','error'].forEach(function(fn) { + fakeConsole[fn] = function() { + throw new Error("this should not be called."); + }; + }); + + log4js = sandbox.require( + '../../lib/log4js', + { + globals: { + console: fakeConsole + } + } + ); + + log4js.clearAppenders(); + log4js.addAppender(function(evt) { + logEvents.push(evt); + }); + + return { log4js: log4js, logEvents: logEvents, fakeConsole: fakeConsole }; +} + +vows.describe('reload configuration').addBatch({ + 'with config file changing' : { + topic: function() { + var pathsChecked = [], + logEvents = [], + logger, + modulePath = 'path/to/log4js.json', + fakeFS = { + lastMtime: Date.now(), + config: { + appenders: [ + { type: 'console', layout: { type: 'messagePassThrough' } } + ], + levels: { 'a-test' : 'INFO' } + }, + readFileSync: function (file, encoding) { + assert.equal(file, modulePath); + assert.equal(encoding, 'utf8'); + return JSON.stringify(fakeFS.config); + }, + statSync: function (path) { + pathsChecked.push(path); + if (path === modulePath) { + fakeFS.lastMtime += 1; + return { mtime: new Date(fakeFS.lastMtime) }; + } else { + throw new Error("no such file"); + } + } + }, + fakeConsole = { + 'name': 'console', + 'appender': function () { + return function(evt) { logEvents.push(evt); }; + }, + 'configure': function (config) { + return fakeConsole.appender(); + } + }, + setIntervalCallback, + fakeSetInterval = function(cb, timeout) { + setIntervalCallback = cb; + }, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + 'fs': fakeFS, + './appenders/console': fakeConsole + }, + globals: { + 'console': fakeConsole, + 'setInterval' : fakeSetInterval, + } + } + ); + + log4js.configure('path/to/log4js.json', { reloadSecs: 30 }); + logger = log4js.getLogger('a-test'); + logger.info("info1"); + logger.debug("debug2 - should be ignored"); + fakeFS.config.levels['a-test'] = "DEBUG"; + setIntervalCallback(); + logger.info("info3"); + logger.debug("debug4"); + + return logEvents; + }, + 'should configure log4js from first log4js.json found': function(logEvents) { + assert.equal(logEvents[0].data[0], 'info1'); + assert.equal(logEvents[1].data[0], 'info3'); + assert.equal(logEvents[2].data[0], 'debug4'); + assert.equal(logEvents.length, 3); + } + }, + + 'with config file staying the same' : { + topic: function() { + var pathsChecked = [], + fileRead = 0, + logEvents = [], + logger, + modulePath = require('path').normalize(__dirname + '/../../lib/log4js.json'), + mtime = new Date(), + fakeFS = { + config: { + appenders: [ + { type: 'console', layout: { type: 'messagePassThrough' } } + ], + levels: { 'a-test' : 'INFO' } + }, + readFileSync: function (file, encoding) { + fileRead += 1; + assert.isString(file); + assert.equal(file, modulePath); + assert.equal(encoding, 'utf8'); + return JSON.stringify(fakeFS.config); + }, + statSync: function (path) { + pathsChecked.push(path); + if (path === modulePath) { + return { mtime: mtime }; + } else { + throw new Error("no such file"); + } + } + }, + fakeConsole = { + 'name': 'console', + 'appender': function () { + return function(evt) { logEvents.push(evt); }; + }, + 'configure': function (config) { + return fakeConsole.appender(); + } + }, + setIntervalCallback, + fakeSetInterval = function(cb, timeout) { + setIntervalCallback = cb; + }, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + 'fs': fakeFS, + './appenders/console': fakeConsole + }, + globals: { + 'console': fakeConsole, + 'setInterval' : fakeSetInterval, + } + } + ); + + log4js.configure(modulePath, { reloadSecs: 3 }); + logger = log4js.getLogger('a-test'); + logger.info("info1"); + logger.debug("debug2 - should be ignored"); + setIntervalCallback(); + logger.info("info3"); + logger.debug("debug4"); + + return [ pathsChecked, logEvents, modulePath, fileRead ]; + }, + 'should only read the configuration file once': function(args) { + var fileRead = args[3]; + assert.equal(fileRead, 1); + }, + 'should configure log4js from first log4js.json found': function(args) { + var logEvents = args[1]; + assert.equal(logEvents.length, 2); + assert.equal(logEvents[0].data[0], 'info1'); + assert.equal(logEvents[1].data[0], 'info3'); + } + }, + + 'when config file is removed': { + topic: function() { + var pathsChecked = [], + fileRead = 0, + logEvents = [], + logger, + modulePath = require('path').normalize(__dirname + '/../../lib/log4js.json'), + mtime = new Date(), + fakeFS = { + config: { + appenders: [ + { type: 'console', layout: { type: 'messagePassThrough' } } + ], + levels: { 'a-test' : 'INFO' } + }, + readFileSync: function (file, encoding) { + fileRead += 1; + assert.isString(file); + assert.equal(file, modulePath); + assert.equal(encoding, 'utf8'); + return JSON.stringify(fakeFS.config); + }, + statSync: function (path) { + this.statSync = function() { + throw new Error("no such file"); + }; + return { mtime: new Date() }; + } + }, + fakeConsole = { + 'name': 'console', + 'appender': function () { + return function(evt) { logEvents.push(evt); }; + }, + 'configure': function (config) { + return fakeConsole.appender(); + } + }, + setIntervalCallback, + fakeSetInterval = function(cb, timeout) { + setIntervalCallback = cb; + }, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + 'fs': fakeFS, + './appenders/console': fakeConsole + }, + globals: { + 'console': fakeConsole, + 'setInterval' : fakeSetInterval, + } + } + ); + + log4js.configure(modulePath, { reloadSecs: 3 }); + logger = log4js.getLogger('a-test'); + logger.info("info1"); + logger.debug("debug2 - should be ignored"); + setIntervalCallback(); + logger.info("info3"); + logger.debug("debug4"); + + return [ pathsChecked, logEvents, modulePath, fileRead ]; + }, + 'should only read the configuration file once': function(args) { + var fileRead = args[3]; + assert.equal(fileRead, 1); + }, + 'should not clear configuration when config file not found': function(args) { + var logEvents = args[1]; + assert.equal(logEvents.length, 3); + assert.equal(logEvents[0].data[0], 'info1'); + assert.equal(logEvents[1].level.toString(), 'WARN'); + assert.include(logEvents[1].data[0], 'Failed to load configuration file'); + assert.equal(logEvents[2].data[0], 'info3'); + } + }, + + 'when passed an object': { + topic: function() { + var test = setupConsoleTest(); + test.log4js.configure({}, { reloadSecs: 30 }); + return test.logEvents; + }, + 'should log a warning': function(events) { + assert.equal(events[0].level.toString(), 'WARN'); + assert.equal( + events[0].data[0], + 'Ignoring configuration reload parameter for "object" configuration.' + ); + } + }, + + 'when called twice with reload options': { + topic: function() { + var modulePath = require('path').normalize(__dirname + '/../../lib/log4js.json'), + fakeFS = { + readFileSync: function (file, encoding) { + return JSON.stringify({}); + }, + statSync: function (path) { + return { mtime: new Date() }; + } + }, + fakeConsole = { + 'name': 'console', + 'appender': function () { + return function(evt) { }; + }, + 'configure': function (config) { + return fakeConsole.appender(); + } + }, + setIntervalCallback, + intervalCleared = false, + clearedId, + fakeSetInterval = function(cb, timeout) { + setIntervalCallback = cb; + return 1234; + }, + log4js = sandbox.require( + '../../lib/log4js', + { + requires: { + 'fs': fakeFS, + './appenders/console': fakeConsole + }, + globals: { + 'console': fakeConsole, + 'setInterval' : fakeSetInterval, + 'clearInterval': function(interval) { + intervalCleared = true; + clearedId = interval; + } + } + } + ); + + log4js.configure(modulePath, { reloadSecs: 3 }); + log4js.configure(modulePath, { reloadSecs: 15 }); + + return { cleared: intervalCleared, id: clearedId }; + }, + 'should clear the previous interval': function(result) { + assert.isTrue(result.cleared); + assert.equal(result.id, 1234); + } + } +}).exportTo(module); diff --git a/node_modules/log4js/test/vows/setLevel-asymmetry-test.js b/node_modules/log4js/test/vows/setLevel-asymmetry-test.js new file mode 100644 index 0000000..149a929 --- /dev/null +++ b/node_modules/log4js/test/vows/setLevel-asymmetry-test.js @@ -0,0 +1,100 @@ +"use strict"; +/* jshint loopfunc: true */ +// This test shows an asymmetry between setLevel and isLevelEnabled +// (in log4js-node@0.4.3 and earlier): +// 1) setLevel("foo") works, but setLevel(log4js.levels.foo) silently +// does not (sets the level to TRACE). +// 2) isLevelEnabled("foo") works as does isLevelEnabled(log4js.levels.foo). +// + +// Basic set up +var vows = require('vows'); +var assert = require('assert'); +var log4js = require('../../lib/log4js'); +var logger = log4js.getLogger('test-setLevel-asymmetry'); + +// uncomment one or other of the following to see progress (or not) while running the tests +// var showProgress = console.log; +var showProgress = function() {}; + + +// Define the array of levels as string to iterate over. +var strLevels= ['Trace','Debug','Info','Warn','Error','Fatal']; + +var log4jsLevels =[]; +// populate an array with the log4js.levels that match the strLevels. +// Would be nice if we could iterate over log4js.levels instead, +// but log4js.levels.toLevel prevents that for now. +strLevels.forEach(function(l) { + log4jsLevels.push(log4js.levels.toLevel(l)); +}); + + +// We are going to iterate over this object's properties to define an exhaustive list of vows. +var levelTypes = { + 'string': strLevels, + 'log4js.levels.level': log4jsLevels, +}; + +// Set up the basic vows batch for this test +var batch = { + setLevel: { + } +}; + +showProgress('Populating batch object...'); + +// Populating the batch object programmatically, +// as I don't have the patience to manually populate it with +// the (strLevels.length x levelTypes.length) ^ 2 = 144 possible test combinations +for (var type in levelTypes) { + var context = 'is called with a '+type; + var levelsToTest = levelTypes[type]; + showProgress('Setting up the vows context for '+context); + + batch.setLevel[context]= {}; + levelsToTest.forEach( function(level) { + var subContext = 'of '+level; + var log4jsLevel=log4js.levels.toLevel(level.toString()); + + showProgress('Setting up the vows sub-context for '+subContext); + batch.setLevel[context][subContext] = {topic: level}; + for (var comparisonType in levelTypes) { + levelTypes[comparisonType].forEach(function(comparisonLevel) { + var t = type; + var ct = comparisonType; + var expectedResult = log4jsLevel.isLessThanOrEqualTo(comparisonLevel); + var vow = 'isLevelEnabled(' + comparisonLevel + + ') called with a ' + comparisonType + + ' should return ' + expectedResult; + showProgress('Setting up the vows vow for '+vow); + + batch.setLevel[context][subContext][vow] = function(levelToSet) { + logger.setLevel(levelToSet); + showProgress( + '*** Checking setLevel( ' + level + + ' ) of type ' + t + + ', and isLevelEnabled( ' + comparisonLevel + + ' ) of type ' + ct + '. Expecting: ' + expectedResult + ); + assert.equal( + logger.isLevelEnabled(comparisonLevel), + expectedResult, + 'Failed: calling setLevel( ' + level + + ' ) with type ' + type + + ', isLevelEnabled( ' + comparisonLevel + + ' ) of type ' + comparisonType + + ' did not return ' + expectedResult + ); + }; + }); + } + }); + +} + +showProgress('Running tests...'); + +vows.describe('log4js setLevel asymmetry fix').addBatch(batch).export(module); + + diff --git a/node_modules/log4js/test/vows/slackAppender-test.js b/node_modules/log4js/test/vows/slackAppender-test.js new file mode 100644 index 0000000..a49ab78 --- /dev/null +++ b/node_modules/log4js/test/vows/slackAppender-test.js @@ -0,0 +1,168 @@ +"use strict"; +var vows = require('vows'); +var assert = require('assert'); +var log4js = require('../../lib/log4js'); +var sandbox = require('sandboxed-module'); + +function setupLogging(category, options) { + var msgs = []; + + var slackCredentials = { + token: options.token, + channel_id: options.channel_id, + username: options.username, + format: options.format, + icon_url: options.icon_url + }; + var fakeSlack = (function (key) { + function constructor() { + return { + options: key, + api: function (action, data, callback) { + msgs.push(data); + callback(false, {status: "sent"}); + } + }; + } + + return constructor(key); + }); + + var fakeLayouts = { + layout: function (type, config) { + this.type = type; + this.config = config; + return log4js.layouts.messagePassThroughLayout; + }, + basicLayout: log4js.layouts.basicLayout, + coloredLayout: log4js.layouts.coloredLayout, + messagePassThroughLayout: log4js.layouts.messagePassThroughLayout + }; + + var fakeConsole = { + errors: [], + logs: [], + error: function (msg, value) { + this.errors.push({msg: msg, value: value}); + }, + log: function (msg, value) { + this.logs.push({msg: msg, value: value}); + } + }; + + + var slackModule = sandbox.require('../../lib/appenders/slack', { + requires: { + 'slack-node': fakeSlack, + '../layouts': fakeLayouts + }, + globals: { + console: fakeConsole + } + }); + + + log4js.addAppender(slackModule.configure(options), category); + + return { + logger: log4js.getLogger(category), + mailer: fakeSlack, + layouts: fakeLayouts, + console: fakeConsole, + messages: msgs, + credentials: slackCredentials + }; +} + +function checkMessages(result) { + for (var i = 0; i < result.messages.length; ++i) { + assert.equal(result.messages[i].channel, '#CHANNEL'); + assert.equal(result.messages[i].username, 'USERNAME'); + assert.ok(new RegExp('.+Log event #' + (i + 1)).test(result.messages[i].text)); + } +} + +log4js.clearAppenders(); + +vows.describe('log4js slackAppender').addBatch({ + 'slack setup': { + topic: setupLogging('slack setup', { + token: 'TOKEN', + channel_id: "#CHANNEL", + username: "USERNAME", + format: "FORMAT", + icon_url: "ICON_URL" + }), + 'slack credentials should match': function (result) { + assert.equal(result.credentials.token, 'TOKEN'); + assert.equal(result.credentials.channel_id, '#CHANNEL'); + assert.equal(result.credentials.username, 'USERNAME'); + assert.equal(result.credentials.format, 'FORMAT'); + assert.equal(result.credentials.icon_url, 'ICON_URL'); + } + }, + + 'basic usage': { + topic: function () { + var setup = setupLogging('basic usage', { + token: 'TOKEN', + channel_id: "#CHANNEL", + username: "USERNAME", + format: "FORMAT", + icon_url: "ICON_URL", + }); + + setup.logger.info("Log event #1"); + return setup; + }, + 'there should be one message only': function (result) { + assert.equal(result.messages.length, 1); + }, + 'message should contain proper data': function (result) { + checkMessages(result); + } + }, + 'config with layout': { + topic: function () { + var setup = setupLogging('config with layout', { + layout: { + type: "tester" + } + }); + return setup; + }, + 'should configure layout': function (result) { + assert.equal(result.layouts.type, 'tester'); + } + }, + 'separate notification for each event': { + topic: function () { + var self = this; + var setup = setupLogging('separate notification for each event', { + token: 'TOKEN', + channel_id: "#CHANNEL", + username: "USERNAME", + format: "FORMAT", + icon_url: "ICON_URL", + }); + setTimeout(function () { + setup.logger.info('Log event #1'); + }, 0); + setTimeout(function () { + setup.logger.info('Log event #2'); + }, 500); + setTimeout(function () { + setup.logger.info('Log event #3'); + }, 1100); + setTimeout(function () { + self.callback(null, setup); + }, 3000); + }, + 'there should be three messages': function (result) { + assert.equal(result.messages.length, 3); + }, + 'messages should contain proper data': function (result) { + checkMessages(result); + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/smtpAppender-test.js b/node_modules/log4js/test/vows/smtpAppender-test.js new file mode 100644 index 0000000..af5ccd9 --- /dev/null +++ b/node_modules/log4js/test/vows/smtpAppender-test.js @@ -0,0 +1,318 @@ +"use strict"; +var vows = require('vows'); +var assert = require('assert'); +var log4js = require('../../lib/log4js'); +var sandbox = require('sandboxed-module'); + +function setupLogging(category, options) { + var msgs = []; + + var fakeMailer = { + createTransport: function (name, options) { + return { + config: options, + sendMail: function (msg, callback) { + msgs.push(msg); + callback(null, true); + }, + close: function () { + } + }; + } + }; + + var fakeLayouts = { + layout: function (type, config) { + this.type = type; + this.config = config; + return log4js.layouts.messagePassThroughLayout; + }, + basicLayout: log4js.layouts.basicLayout, + messagePassThroughLayout: log4js.layouts.messagePassThroughLayout + }; + + var fakeConsole = { + errors: [], + error: function (msg, value) { + this.errors.push({msg: msg, value: value}); + } + }; + + var fakeTransportPlugin = function () { + }; + + var smtpModule = sandbox.require('../../lib/appenders/smtp', { + requires: { + 'nodemailer': fakeMailer, + 'nodemailer-sendmail-transport': fakeTransportPlugin, + 'nodemailer-smtp-transport': fakeTransportPlugin, + '../layouts': fakeLayouts + }, + globals: { + console: fakeConsole + } + }); + + log4js.addAppender(smtpModule.configure(options), category); + + return { + logger: log4js.getLogger(category), + mailer: fakeMailer, + layouts: fakeLayouts, + console: fakeConsole, + results: msgs + }; +} + +function checkMessages(result, sender, subject) { + for (var i = 0; i < result.results.length; ++i) { + assert.equal(result.results[i].from, sender); + assert.equal(result.results[i].to, 'recipient@domain.com'); + assert.equal(result.results[i].subject, subject ? subject : 'Log event #' + (i + 1)); + assert.ok(new RegExp('.+Log event #' + (i + 1) + '\n$').test(result.results[i].text)); + } +} + +log4js.clearAppenders(); +vows.describe('log4js smtpAppender').addBatch({ + 'minimal config': { + topic: function () { + var setup = setupLogging('minimal config', { + recipients: 'recipient@domain.com', + SMTP: { + port: 25, + auth: { + user: 'user@domain.com' + } + } + }); + setup.logger.info('Log event #1'); + return setup; + }, + 'there should be one message only': function (result) { + assert.equal(result.results.length, 1); + }, + 'message should contain proper data': function (result) { + checkMessages(result); + } + }, + 'fancy config': { + topic: function () { + var setup = setupLogging('fancy config', { + recipients: 'recipient@domain.com', + sender: 'sender@domain.com', + subject: 'This is subject', + SMTP: { + port: 25, + auth: { + user: 'user@domain.com' + } + } + }); + setup.logger.info('Log event #1'); + return setup; + }, + 'there should be one message only': function (result) { + assert.equal(result.results.length, 1); + }, + 'message should contain proper data': function (result) { + checkMessages(result, 'sender@domain.com', 'This is subject'); + } + }, + 'config with layout': { + topic: function () { + var setup = setupLogging('config with layout', { + layout: { + type: "tester" + } + }); + return setup; + }, + 'should configure layout': function (result) { + assert.equal(result.layouts.type, 'tester'); + } + }, + 'separate email for each event': { + topic: function () { + var self = this; + var setup = setupLogging('separate email for each event', { + recipients: 'recipient@domain.com', + SMTP: { + port: 25, + auth: { + user: 'user@domain.com' + } + } + }); + setTimeout(function () { + setup.logger.info('Log event #1'); + }, 0); + setTimeout(function () { + setup.logger.info('Log event #2'); + }, 500); + setTimeout(function () { + setup.logger.info('Log event #3'); + }, 1100); + setTimeout(function () { + self.callback(null, setup); + }, 3000); + }, + 'there should be three messages': function (result) { + assert.equal(result.results.length, 3); + }, + 'messages should contain proper data': function (result) { + checkMessages(result); + } + }, + 'multiple events in one email': { + topic: function () { + var self = this; + var setup = setupLogging('multiple events in one email', { + recipients: 'recipient@domain.com', + sendInterval: 1, + SMTP: { + port: 25, + auth: { + user: 'user@domain.com' + } + } + }); + setTimeout(function () { + setup.logger.info('Log event #1'); + }, 0); + setTimeout(function () { + setup.logger.info('Log event #2'); + }, 100); + setTimeout(function () { + setup.logger.info('Log event #3'); + }, 1500); + setTimeout(function () { + self.callback(null, setup); + }, 3000); + }, + 'there should be two messages': function (result) { + assert.equal(result.results.length, 2); + }, + 'messages should contain proper data': function (result) { + assert.equal(result.results[0].to, 'recipient@domain.com'); + assert.equal(result.results[0].subject, 'Log event #1'); + assert.equal( + result.results[0].text.match(new RegExp('.+Log event #[1-2]$', 'gm')).length, + 2 + ); + assert.equal(result.results[1].to, 'recipient@domain.com'); + assert.equal(result.results[1].subject, 'Log event #3'); + assert.ok(new RegExp('.+Log event #3\n$').test(result.results[1].text)); + } + }, + 'error when sending email': { + topic: function () { + var setup = setupLogging('error when sending email', { + recipients: 'recipient@domain.com', + sendInterval: 0, + SMTP: {port: 25, auth: {user: 'user@domain.com'}} + }); + + setup.mailer.createTransport = function () { + return { + sendMail: function (msg, cb) { + cb({message: "oh noes"}); + }, + close: function () { + } + }; + }; + + setup.logger.info("This will break"); + return setup.console; + }, + 'should be logged to console': function (cons) { + assert.equal(cons.errors.length, 1); + assert.equal(cons.errors[0].msg, "log4js.smtpAppender - Error happened"); + assert.equal(cons.errors[0].value.message, 'oh noes'); + } + }, + 'transport full config': { + topic: function () { + var setup = setupLogging('transport full config', { + recipients: 'recipient@domain.com', + transport: { + plugin: 'sendmail', + options: { + path: '/usr/sbin/sendmail' + } + } + }); + setup.logger.info('Log event #1'); + return setup; + }, + 'there should be one message only': function (result) { + assert.equal(result.results.length, 1); + }, + 'message should contain proper data': function (result) { + checkMessages(result); + } + }, + 'transport no-options config': { + topic: function () { + var setup = setupLogging('transport no-options config', { + recipients: 'recipient@domain.com', + transport: { + plugin: 'sendmail' + } + }); + setup.logger.info('Log event #1'); + return setup; + }, + 'there should be one message only': function (result) { + assert.equal(result.results.length, 1); + }, + 'message should contain proper data': function (result) { + checkMessages(result); + } + }, + 'transport no-plugin config': { + topic: function () { + var setup = setupLogging('transport no-plugin config', { + recipients: 'recipient@domain.com', + transport: { + } + }); + setup.logger.info('Log event #1'); + return setup; + }, + 'there should be one message only': function (result) { + assert.equal(result.results.length, 1); + }, + 'message should contain proper data': function (result) { + checkMessages(result); + } + }, + 'attachment config': { + topic: function () { + var setup = setupLogging('attachment config', { + recipients: 'recipient@domain.com', + attachment: { + enable: true + }, + SMTP: { + port: 25, + auth: { + user: 'user@domain.com' + } + } + }); + setup.logger.info('Log event #1'); + return setup; + }, + 'message should contain proper data': function (result) { + assert.equal(result.results.length, 1); + assert.equal(result.results[0].attachments.length, 1); + var attachment = result.results[0].attachments[0]; + assert.equal(result.results[0].text, "See logs as attachment"); + assert.equal(attachment.filename, "default.log"); + assert.equal(attachment.contentType, "text/x-log"); + assert.ok(new RegExp('.+Log event #' + 1 + '\n$').test(attachment.content)); + } + } +}).export(module); diff --git a/node_modules/log4js/test/vows/subcategories-test.js b/node_modules/log4js/test/vows/subcategories-test.js new file mode 100644 index 0000000..f34c36b --- /dev/null +++ b/node_modules/log4js/test/vows/subcategories-test.js @@ -0,0 +1,86 @@ +"use strict"; +var assert = require('assert') +, vows = require('vows') +, sandbox = require('sandboxed-module') +, log4js = require('../../lib/log4js') +, levels = require('../../lib/levels'); + +vows.describe('subcategories').addBatch({ + 'loggers created after levels configuration is loaded': { + topic: function() { + + log4js.configure({ + "levels": { + "sub1": "WARN", + "sub1.sub11": "TRACE", + "sub1.sub11.sub111": "WARN", + "sub1.sub12": "INFO" + } + }, { reloadSecs: 30 }); + + return { + "sub1": log4js.getLogger('sub1'), // WARN + "sub11": log4js.getLogger('sub1.sub11'), // TRACE + "sub111": log4js.getLogger('sub1.sub11.sub111'), // WARN + "sub12": log4js.getLogger('sub1.sub12'), // INFO + + "sub13": log4js.getLogger('sub1.sub13'), // Inherits sub1: WARN + "sub112": log4js.getLogger('sub1.sub11.sub112'), // Inherits sub1.sub11: TRACE + "sub121": log4js.getLogger('sub1.sub12.sub121'), // Inherits sub12: INFO + "sub0": log4js.getLogger('sub0') // Not defined, not inherited: TRACE + }; + }, + 'check logger levels': function(loggers) { + assert.equal(loggers.sub1.level, levels.WARN); + assert.equal(loggers.sub11.level, levels.TRACE); + assert.equal(loggers.sub111.level, levels.WARN); + assert.equal(loggers.sub12.level, levels.INFO); + + assert.equal(loggers.sub13.level, levels.WARN); + assert.equal(loggers.sub112.level, levels.TRACE); + assert.equal(loggers.sub121.level, levels.INFO); + assert.equal(loggers.sub0.level, levels.TRACE); + } + }, + 'loggers created before levels configuration is loaded': { + topic: function() { + + var loggers = { + "sub1": log4js.getLogger('sub1'), // WARN + "sub11": log4js.getLogger('sub1.sub11'), // TRACE + "sub111": log4js.getLogger('sub1.sub11.sub111'), // WARN + "sub12": log4js.getLogger('sub1.sub12'), // INFO + + "sub13": log4js.getLogger('sub1.sub13'), // Inherits sub1: WARN + "sub112": log4js.getLogger('sub1.sub11.sub112'), // Inherits sub1.sub11: TRACE + "sub121": log4js.getLogger('sub1.sub12.sub121'), // Inherits sub12: INFO + "sub0": log4js.getLogger('sub0') // Not defined, not inherited: TRACE + }; + + + log4js.configure({ + "levels": { + "sub1": "WARN", + "sub1.sub11": "TRACE", + "sub1.sub11.sub111": "WARN", + "sub1.sub12": "INFO" + } + }, { reloadSecs: 30 }); + + return loggers; + + + }, + 'check logger levels': function(loggers) { + assert.equal(loggers.sub1.level, levels.WARN); + assert.equal(loggers.sub11.level, levels.TRACE); + assert.equal(loggers.sub111.level, levels.WARN); + assert.equal(loggers.sub12.level, levels.INFO); + + assert.equal(loggers.sub13.level, levels.WARN); + assert.equal(loggers.sub112.level, levels.TRACE); + assert.equal(loggers.sub121.level, levels.INFO); + assert.equal(loggers.sub0.level, levels.TRACE); + } + } +}).exportTo(module); diff --git a/node_modules/log4js/test/vows/with-categoryFilter.json b/node_modules/log4js/test/vows/with-categoryFilter.json new file mode 100644 index 0000000..5cde0c6 --- /dev/null +++ b/node_modules/log4js/test/vows/with-categoryFilter.json @@ -0,0 +1,23 @@ +{ + "appenders": [ + { + "type": "categoryFilter", + "exclude": "web", + "appender": { + "type": "file", + "filename": "test/vows/categoryFilter-noweb.log", + "layout": { + "type": "messagePassThrough" + } + } + }, + { + "category": "web", + "type": "file", + "filename": "test/vows/categoryFilter-web.log", + "layout": { + "type": "messagePassThrough" + } + } + ] +} diff --git a/node_modules/log4js/test/vows/with-dateFile.json b/node_modules/log4js/test/vows/with-dateFile.json new file mode 100644 index 0000000..4cc4381 --- /dev/null +++ b/node_modules/log4js/test/vows/with-dateFile.json @@ -0,0 +1,17 @@ +{ + "appenders": [ + { + "category": "tests", + "type": "dateFile", + "filename": "test/vows/date-file-test.log", + "pattern": "-from-MM-dd", + "layout": { + "type": "messagePassThrough" + } + } + ], + + "levels": { + "tests": "WARN" + } +} diff --git a/node_modules/log4js/test/vows/with-log-rolling.json b/node_modules/log4js/test/vows/with-log-rolling.json new file mode 100644 index 0000000..e946f31 --- /dev/null +++ b/node_modules/log4js/test/vows/with-log-rolling.json @@ -0,0 +1,10 @@ +{ + "appenders": [ + { + "type": "file", + "filename": "tmp-test.log", + "maxLogSize": 1024, + "backups": 3 + } + ] +} diff --git a/node_modules/log4js/test/vows/with-logLevelFilter.json b/node_modules/log4js/test/vows/with-logLevelFilter.json new file mode 100644 index 0000000..c80367d --- /dev/null +++ b/node_modules/log4js/test/vows/with-logLevelFilter.json @@ -0,0 +1,41 @@ +{ + "appenders": [ + { + "category": "tests", + "type": "logLevelFilter", + "level": "WARN", + "appender": { + "type": "file", + "filename": "test/vows/logLevelFilter-warnings.log", + "layout": { + "type": "messagePassThrough" + } + } + }, + { + "category": "tests", + "type": "logLevelFilter", + "level": "TRACE", + "maxLevel": "DEBUG", + "appender": { + "type": "file", + "filename": "test/vows/logLevelFilter-debugs.log", + "layout": { + "type": "messagePassThrough" + } + } + }, + { + "category": "tests", + "type": "file", + "filename": "test/vows/logLevelFilter.log", + "layout": { + "type": "messagePassThrough" + } + } + ], + + "levels": { + "tests": "TRACE" + } +} diff --git a/node_modules/loud-rejection/api.js b/node_modules/loud-rejection/api.js new file mode 100644 index 0000000..f6cd6a1 --- /dev/null +++ b/node_modules/loud-rejection/api.js @@ -0,0 +1,11 @@ +'use strict'; +var util = require('util'); +var currentlyUnhandled = require('currently-unhandled'); + +// WARNING: This undocumented API is subject to change. + +module.exports = util.deprecate(function (process) { + return { + currentlyUnhandled: currentlyUnhandled(process) + }; +}, 'loudRejection/api is deprecated. Use the currently-unhandled module instead.'); diff --git a/node_modules/loud-rejection/index.js b/node_modules/loud-rejection/index.js new file mode 100644 index 0000000..319b945 --- /dev/null +++ b/node_modules/loud-rejection/index.js @@ -0,0 +1,36 @@ +'use strict'; +var util = require('util'); +var onExit = require('signal-exit'); +var currentlyUnhandled = require('currently-unhandled'); + +var installed = false; + +module.exports = function (log) { + if (installed) { + return; + } + + installed = true; + + log = log || console.error; + + var listUnhandled = currentlyUnhandled(); + + onExit(function () { + var unhandledRejections = listUnhandled(); + + if (unhandledRejections.length > 0) { + unhandledRejections.forEach(function (x) { + var err = x.reason; + + if (!(err instanceof Error)) { + err = new Error('Promise rejected with value: ' + util.inspect(err)); + } + + log(err.stack); + }); + + process.exitCode = 1; + } + }); +}; diff --git a/node_modules/loud-rejection/license b/node_modules/loud-rejection/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/loud-rejection/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/loud-rejection/package.json b/node_modules/loud-rejection/package.json new file mode 100644 index 0000000..7969a24 --- /dev/null +++ b/node_modules/loud-rejection/package.json @@ -0,0 +1,130 @@ +{ + "_args": [ + [ + { + "raw": "loud-rejection@^1.0.0", + "scope": null, + "escapedName": "loud-rejection", + "name": "loud-rejection", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/meow" + ] + ], + "_from": "loud-rejection@>=1.0.0 <2.0.0", + "_id": "loud-rejection@1.6.0", + "_inCache": true, + "_location": "/loud-rejection", + "_nodeVersion": "4.4.5", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/loud-rejection-1.6.0.tgz_1467583452502_0.21159938420169055" + }, + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.15.5", + "_phantomChildren": {}, + "_requested": { + "raw": "loud-rejection@^1.0.0", + "scope": null, + "escapedName": "loud-rejection", + "name": "loud-rejection", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/meow" + ], + "_resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "_shasum": "5b46f80147edee578870f086d04821cf998e551f", + "_shrinkwrap": null, + "_spec": "loud-rejection@^1.0.0", + "_where": "/home/burchettm/statsbot/node_modules/meow", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/loud-rejection/issues" + }, + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "description": "Make unhandled promise rejections fail loudly instead of the default silent fail", + "devDependencies": { + "ava": "*", + "bluebird": "^3.0.5", + "coveralls": "^2.11.4", + "delay": "^1.0.0", + "execa": "^0.4.0", + "get-stream": "^2.0.0", + "nyc": "^6.2.1", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "5b46f80147edee578870f086d04821cf998e551f", + "tarball": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js", + "register.js", + "api.js" + ], + "gitHead": "174a9b37f0de7ed255526b506f37961f9f74bd4d", + "homepage": "https://github.com/sindresorhus/loud-rejection#readme", + "keywords": [ + "promise", + "promises", + "unhandled", + "uncaught", + "rejection", + "loud", + "fail", + "catch", + "throw", + "handler", + "exit", + "debug", + "debugging", + "verbose" + ], + "license": "MIT", + "maintainers": [ + { + "name": "jamestalmage", + "email": "james@talmage.io" + }, + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "loud-rejection", + "nyc": { + "exclude": [ + "fixture.js" + ] + }, + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/loud-rejection.git" + }, + "scripts": { + "coveralls": "nyc report --reporter=text-lcov | coveralls", + "test": "xo && nyc ava" + }, + "version": "1.6.0" +} diff --git a/node_modules/loud-rejection/readme.md b/node_modules/loud-rejection/readme.md new file mode 100644 index 0000000..a973261 --- /dev/null +++ b/node_modules/loud-rejection/readme.md @@ -0,0 +1,68 @@ +# loud-rejection [![Build Status](https://travis-ci.org/sindresorhus/loud-rejection.svg?branch=master)](https://travis-ci.org/sindresorhus/loud-rejection) [![Coverage Status](https://coveralls.io/repos/github/sindresorhus/loud-rejection/badge.svg?branch=master)](https://coveralls.io/github/sindresorhus/loud-rejection?branch=master) + +> Make unhandled promise rejections fail loudly instead of the default [silent fail](https://gist.github.com/benjamingr/0237932cee84712951a2) + +By default, promises fail silently if you don't attach a `.catch()` handler to them. + +Use this in top-level things like tests, CLI tools, apps, etc, **but not in reusable modules.**
+Not needed in the browser as unhandled promises are shown in the console. + + +## Install + +``` +$ npm install --save loud-rejection +``` + + +## Usage + +```js +const loudRejection = require('loud-rejection'); +const promiseFn = require('promise-fn'); + +// Install the unhandledRejection listeners +loudRejection(); + +promiseFn(); +``` + +Without this module it's more verbose and you might even miss some that will fail silently: + +```js +const promiseFn = require('promise-fn'); + +function error(err) { + console.error(err.stack); + process.exit(1); +} + +promiseFn().catch(error); +``` + +### Register script + +Alternatively to the above, you may simply require `loud-rejection/register` and the unhandledRejection listener will be automagically installed for you. + +This is handy for ES2015 imports: + +```js +import 'loud-rejection/register'; +``` + + +## API + +### loudRejection([log]) + +#### log + +Type: `Function`
+Default: `console.error` + +Custom logging function to print the rejected promise. Receives the error stack. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/loud-rejection/register.js b/node_modules/loud-rejection/register.js new file mode 100644 index 0000000..2934812 --- /dev/null +++ b/node_modules/loud-rejection/register.js @@ -0,0 +1,2 @@ +'use strict'; +require('./')(); diff --git a/node_modules/map-obj/index.js b/node_modules/map-obj/index.js new file mode 100644 index 0000000..8b7b4d6 --- /dev/null +++ b/node_modules/map-obj/index.js @@ -0,0 +1,13 @@ +'use strict'; +module.exports = function (obj, cb) { + var ret = {}; + var keys = Object.keys(obj); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var res = cb(key, obj[key], obj); + ret[res[0]] = res[1]; + } + + return ret; +}; diff --git a/node_modules/map-obj/license b/node_modules/map-obj/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/map-obj/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/map-obj/package.json b/node_modules/map-obj/package.json new file mode 100644 index 0000000..f17334b --- /dev/null +++ b/node_modules/map-obj/package.json @@ -0,0 +1,101 @@ +{ + "_args": [ + [ + { + "raw": "map-obj@^1.0.1", + "scope": null, + "escapedName": "map-obj", + "name": "map-obj", + "rawSpec": "^1.0.1", + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/meow" + ] + ], + "_from": "map-obj@>=1.0.1 <2.0.0", + "_id": "map-obj@1.0.1", + "_inCache": true, + "_location": "/map-obj", + "_nodeVersion": "0.12.2", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.7.4", + "_phantomChildren": {}, + "_requested": { + "raw": "map-obj@^1.0.1", + "scope": null, + "escapedName": "map-obj", + "name": "map-obj", + "rawSpec": "^1.0.1", + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/camelcase-keys", + "/meow" + ], + "_resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "_shasum": "d933ceb9205d82bdcf4886f6742bdc2b4dea146d", + "_shrinkwrap": null, + "_spec": "map-obj@^1.0.1", + "_where": "/home/burchettm/statsbot/node_modules/meow", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/map-obj/issues" + }, + "dependencies": {}, + "description": "Map object keys and values into a new object", + "devDependencies": { + "ava": "0.0.4" + }, + "directories": {}, + "dist": { + "shasum": "d933ceb9205d82bdcf4886f6742bdc2b4dea146d", + "tarball": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "a4f2d49ae6b5f7c0e55130b49ab0412298b797bc", + "homepage": "https://github.com/sindresorhus/map-obj", + "keywords": [ + "map", + "obj", + "object", + "key", + "keys", + "value", + "values", + "val", + "iterate", + "iterator" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "map-obj", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/map-obj.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/map-obj/readme.md b/node_modules/map-obj/readme.md new file mode 100644 index 0000000..fee03d9 --- /dev/null +++ b/node_modules/map-obj/readme.md @@ -0,0 +1,29 @@ +# map-obj [![Build Status](https://travis-ci.org/sindresorhus/map-obj.svg?branch=master)](https://travis-ci.org/sindresorhus/map-obj) + +> Map object keys and values into a new object + + +## Install + +``` +$ npm install --save map-obj +``` + + +## Usage + +```js +var mapObj = require('map-obj'); + +var newObject = mapObj({foo: 'bar'}, function (key, value, object) { + // first element is the new key and second is the new value + // here we reverse the order + return [value, key]; +}); +//=> {bar: 'foo'} +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/meow/index.js b/node_modules/meow/index.js new file mode 100644 index 0000000..d7ab879 --- /dev/null +++ b/node_modules/meow/index.js @@ -0,0 +1,82 @@ +'use strict'; +var path = require('path'); +var minimist = require('minimist'); +var objectAssign = require('object-assign'); +var camelcaseKeys = require('camelcase-keys'); +var decamelize = require('decamelize'); +var mapObj = require('map-obj'); +var trimNewlines = require('trim-newlines'); +var redent = require('redent'); +var readPkgUp = require('read-pkg-up'); +var loudRejection = require('loud-rejection'); +var normalizePackageData = require('normalize-package-data'); + +// get the uncached parent +delete require.cache[__filename]; +var parentDir = path.dirname(module.parent.filename); + +module.exports = function (opts, minimistOpts) { + loudRejection(); + + if (Array.isArray(opts) || typeof opts === 'string') { + opts = {help: opts}; + } + + opts = objectAssign({ + pkg: readPkgUp.sync({ + cwd: parentDir, + normalize: false + }).pkg, + argv: process.argv.slice(2) + }, opts); + + minimistOpts = objectAssign({}, minimistOpts); + + minimistOpts.default = mapObj(minimistOpts.default || {}, function (key, value) { + return [decamelize(key, '-'), value]; + }); + + if (Array.isArray(opts.help)) { + opts.help = opts.help.join('\n'); + } + + var pkg = typeof opts.pkg === 'string' ? require(path.join(parentDir, opts.pkg)) : opts.pkg; + var argv = minimist(opts.argv, minimistOpts); + var help = redent(trimNewlines(opts.help || ''), 2); + + normalizePackageData(pkg); + + process.title = pkg.bin ? Object.keys(pkg.bin)[0] : pkg.name; + + var description = opts.description; + if (!description && description !== false) { + description = pkg.description; + } + + help = (description ? '\n ' + description + '\n' : '') + (help ? '\n' + help : '\n'); + + var showHelp = function (code) { + console.log(help); + process.exit(code || 0); + }; + + if (argv.version && opts.version !== false) { + console.log(typeof opts.version === 'string' ? opts.version : pkg.version); + process.exit(); + } + + if (argv.help && opts.help !== false) { + showHelp(); + } + + var _ = argv._; + delete argv._; + + return { + input: _, + flags: camelcaseKeys(argv), + pkg: pkg, + help: help, + showHelp: showHelp + }; +}; diff --git a/node_modules/meow/license b/node_modules/meow/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/meow/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/meow/package.json b/node_modules/meow/package.json new file mode 100644 index 0000000..9dc459a --- /dev/null +++ b/node_modules/meow/package.json @@ -0,0 +1,121 @@ +{ + "_args": [ + [ + { + "raw": "meow@^3.3.0", + "scope": null, + "escapedName": "meow", + "name": "meow", + "rawSpec": "^3.3.0", + "spec": ">=3.3.0 <4.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/dateformat" + ] + ], + "_from": "meow@>=3.3.0 <4.0.0", + "_id": "meow@3.7.0", + "_inCache": true, + "_location": "/meow", + "_nodeVersion": "4.2.4", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.14.12", + "_phantomChildren": {}, + "_requested": { + "raw": "meow@^3.3.0", + "scope": null, + "escapedName": "meow", + "name": "meow", + "rawSpec": "^3.3.0", + "spec": ">=3.3.0 <4.0.0", + "type": "range" + }, + "_requiredBy": [ + "/dateformat" + ], + "_resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "_shasum": "72cb668b425228290abbfa856892587308a801fb", + "_shrinkwrap": null, + "_spec": "meow@^3.3.0", + "_where": "/home/burchettm/statsbot/node_modules/dateformat", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/meow/issues" + }, + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "description": "CLI app helper", + "devDependencies": { + "ava": "*", + "execa": "^0.1.1", + "indent-string": "^2.1.0", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "72cb668b425228290abbfa856892587308a801fb", + "tarball": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "9a5c90af79fb8f5f29c97e6b92b63f41e2df4f34", + "homepage": "https://github.com/sindresorhus/meow#readme", + "keywords": [ + "cli", + "bin", + "util", + "utility", + "helper", + "argv", + "command", + "line", + "meow", + "cat", + "kitten", + "parser", + "option", + "flags", + "input", + "cmd", + "console" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "meow", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/meow.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.7.0" +} diff --git a/node_modules/meow/readme.md b/node_modules/meow/readme.md new file mode 100644 index 0000000..253380d --- /dev/null +++ b/node_modules/meow/readme.md @@ -0,0 +1,159 @@ +# meow [![Build Status](https://travis-ci.org/sindresorhus/meow.svg?branch=master)](https://travis-ci.org/sindresorhus/meow) + +> CLI app helper + +![](meow.gif) + + +## Features + +- Parses arguments using [minimist](https://github.com/substack/minimist) +- Converts flags to [camelCase](https://github.com/sindresorhus/camelcase) +- Outputs version when `--version` +- Outputs description and supplied help text when `--help` +- Makes unhandled rejected promises [fail loudly](https://github.com/sindresorhus/loud-rejection) instead of the default silent fail +- Sets the process title to the binary name defined in package.json + + +## Install + +``` +$ npm install --save meow +``` + + +## Usage + +``` +$ ./foo-app.js unicorns --rainbow-cake +``` + +```js +#!/usr/bin/env node +'use strict'; +const meow = require('meow'); +const foo = require('./'); + +const cli = meow(` + Usage + $ foo + + Options + -r, --rainbow Include a rainbow + + Examples + $ foo unicorns --rainbow + 🌈 unicorns 🌈 +`, { + alias: { + r: 'rainbow' + } +}); +/* +{ + input: ['unicorns'], + flags: {rainbow: true}, + ... +} +*/ + +foo(cli.input[0], cli.flags); +``` + + +## API + +### meow(options, [minimistOptions]) + +Returns an object with: + +- `input` *(array)* - Non-flag arguments +- `flags` *(object)* - Flags converted to camelCase +- `pkg` *(object)* - The `package.json` object +- `help` *(object)* - The help text used with `--help` +- `showHelp([code=0])` *(function)* - Show the help text and exit with `code` + +#### options + +Type: `object`, `array`, `string` + +Can either be a string/array that is the `help` or an options object. + +##### description + +Type: `string`, `boolean` +Default: The package.json `"description"` property + +A description to show above the help text. + +Set it to `false` to disable it altogether. + +##### help + +Type: `string`, `boolean` + +The help text you want shown. + +The input is reindented and starting/ending newlines are trimmed which means you can use a [template literal](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/template_strings) without having to care about using the correct amount of indent. + +If it's an array each item will be a line. +*(Still supported, but you should use a template literal instead.)* + +The description will be shown above your help text automatically. + +Set it to `false` to disable it altogether. + +##### version + +Type: `string`, `boolean` +Default: The package.json `"version"` property + +Set a custom version output. + +Set it to `false` to disable it altogether. + +##### pkg + +Type: `string`, `object` +Default: Closest package.json upwards + +Relative path to package.json or as an object. + +##### argv + +Type: `array` +Default: `process.argv.slice(2)` + +Custom arguments object. + +#### minimistOptions + +Type: `object` +Default: `{}` + +Minimist [options](https://github.com/substack/minimist#var-argv--parseargsargs-opts). + +Keys passed to the minimist `default` option are [decamelized](https://github.com/sindresorhus/decamelize), so you can for example pass in `fooBar: 'baz'` and have it be the default for the `--foo-bar` flag. + + +## Promises + +Meow will make unhandled rejected promises [fail loudly](https://github.com/sindresorhus/loud-rejection) instead of the default silent fail. Meaning you don't have to manually `.catch()` promises used in your CLI. + + +## Tips + +See [`chalk`](https://github.com/chalk/chalk) if you want to colorize the terminal output. + +See [`get-stdin`](https://github.com/sindresorhus/get-stdin) if you want to accept input from stdin. + +See [`update-notifier`](https://github.com/yeoman/update-notifier) if you want update notifications. + +See [`configstore`](https://github.com/yeoman/configstore) if you need to persist some data. + +[More useful CLI utilities.](https://github.com/sindresorhus/awesome-nodejs#command-line-utilities) + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/merge/.npmignore b/node_modules/merge/.npmignore new file mode 100644 index 0000000..3598c30 --- /dev/null +++ b/node_modules/merge/.npmignore @@ -0,0 +1 @@ +tests \ No newline at end of file diff --git a/node_modules/merge/LICENSE b/node_modules/merge/LICENSE new file mode 100644 index 0000000..5351894 --- /dev/null +++ b/node_modules/merge/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 yeikos - http://www.yeikos.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/merge/README.md b/node_modules/merge/README.md new file mode 100644 index 0000000..317b139 --- /dev/null +++ b/node_modules/merge/README.md @@ -0,0 +1,58 @@ +# Merge + +Merge multiple objects into one, optionally creating a new cloned object. +Similar to the jQuery.extend but more flexible. Works in Node.js and the +browser. + +## Node.js Usage + +```sh +npm install merge --save +``` + +```js +var merge = require('merge'), original, cloned; + +console.log(merge({one:'hello'}, {two: 'world'})); +// -> {"one": "hello", "two": "world"} + +original = { x: { y: 1 } }; +cloned = merge(true, original); +cloned.x.y++; + +console.log(original.x.y, cloned.x.y); +// -> 1, 2 + +console.log(merge.recursive(true, original, { x: { z: 2 } })); +// -> {"x": { "y": 1, "z": 2 } } + +``` + +## Browser Usage + +```html + + +``` + +## Tests + +```sh +npm test +``` diff --git a/node_modules/merge/bower.json b/node_modules/merge/bower.json new file mode 100644 index 0000000..bd5de03 --- /dev/null +++ b/node_modules/merge/bower.json @@ -0,0 +1,22 @@ +{ + "name": "merge", + "version": "1.2.0", + "homepage": "https://github.com/yeikos/js.merge", + "authors": [ + "yeikos " + ], + "description": "Merge multiple objects into one, optionally creating a new cloned object. Similar to the jQuery.extend but more flexible. Works in Node.js and the browser.", + "main": "merge.js", + "keywords": [ + "merge", + "recursive", + "extend", + "clone", + "object", + "browser" + ], + "license": "MIT", + "ignore": [ + "tests" + ] +} diff --git a/node_modules/merge/merge.js b/node_modules/merge/merge.js new file mode 100644 index 0000000..43089c8 --- /dev/null +++ b/node_modules/merge/merge.js @@ -0,0 +1,175 @@ +/*! + * @name JavaScript/NodeJS Merge v1.2.0 + * @author yeikos + * @repository https://github.com/yeikos/js.merge + + * Copyright 2014 yeikos - MIT license + * https://raw.github.com/yeikos/js.merge/master/LICENSE + */ + +;(function(isNode) { + + /** + * Merge one or more objects + * @param bool? clone + * @param mixed,... arguments + * @return object + */ + + var Public = function(clone) { + + return merge(clone === true, false, arguments); + + }, publicName = 'merge'; + + /** + * Merge two or more objects recursively + * @param bool? clone + * @param mixed,... arguments + * @return object + */ + + Public.recursive = function(clone) { + + return merge(clone === true, true, arguments); + + }; + + /** + * Clone the input removing any reference + * @param mixed input + * @return mixed + */ + + Public.clone = function(input) { + + var output = input, + type = typeOf(input), + index, size; + + if (type === 'array') { + + output = []; + size = input.length; + + for (index=0;index=1.2.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/console-stamp" + ] + ], + "_from": "merge@>=1.2.0 <2.0.0", + "_id": "merge@1.2.0", + "_inCache": true, + "_location": "/merge", + "_npmUser": { + "name": "yeikos", + "email": "yeikos@gmail.com" + }, + "_npmVersion": "1.4.21", + "_phantomChildren": {}, + "_requested": { + "raw": "merge@^1.2.0", + "scope": null, + "escapedName": "merge", + "name": "merge", + "rawSpec": "^1.2.0", + "spec": ">=1.2.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/console-stamp" + ], + "_resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "_shasum": "7531e39d4949c281a66b8c5a6e0265e8b05894da", + "_shrinkwrap": null, + "_spec": "merge@^1.2.0", + "_where": "/home/burchettm/statsbot/node_modules/console-stamp", + "author": { + "name": "yeikos", + "url": "http://www.yeikos.com" + }, + "bugs": { + "url": "https://github.com/yeikos/js.merge/issues" + }, + "dependencies": {}, + "description": "Merge multiple objects into one, optionally creating a new cloned object. Similar to the jQuery.extend but more flexible. Works in Node.js and the browser.", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "7531e39d4949c281a66b8c5a6e0265e8b05894da", + "tarball": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz" + }, + "gitHead": "6fc27c23e1ebf54a4f6ba8a7224dd48dfd9faf7c", + "homepage": "https://github.com/yeikos/js.merge", + "keywords": [ + "merge", + "recursive", + "extend", + "clone", + "object", + "browser" + ], + "license": "MIT", + "main": "merge.js", + "maintainers": [ + { + "name": "yeikos", + "email": "yeikos@gmail.com" + } + ], + "name": "merge", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/yeikos/js.merge.git" + }, + "scripts": { + "test": "cd tests; node index.js" + }, + "version": "1.2.0" +} diff --git a/node_modules/methods/HISTORY.md b/node_modules/methods/HISTORY.md new file mode 100644 index 0000000..c0ecf07 --- /dev/null +++ b/node_modules/methods/HISTORY.md @@ -0,0 +1,29 @@ +1.1.2 / 2016-01-17 +================== + + * perf: enable strict mode + +1.1.1 / 2014-12-30 +================== + + * Improve `browserify` support + +1.1.0 / 2014-07-05 +================== + + * Add `CONNECT` method + +1.0.1 / 2014-06-02 +================== + + * Fix module to work with harmony transform + +1.0.0 / 2014-05-08 +================== + + * Add `PURGE` method + +0.1.0 / 2013-10-28 +================== + + * Add `http.METHODS` support diff --git a/node_modules/methods/LICENSE b/node_modules/methods/LICENSE new file mode 100644 index 0000000..220dc1a --- /dev/null +++ b/node_modules/methods/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2013-2014 TJ Holowaychuk +Copyright (c) 2015-2016 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/methods/README.md b/node_modules/methods/README.md new file mode 100644 index 0000000..672a32b --- /dev/null +++ b/node_modules/methods/README.md @@ -0,0 +1,51 @@ +# Methods + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +HTTP verbs that Node.js core's HTTP parser supports. + +This module provides an export that is just like `http.METHODS` from Node.js core, +with the following differences: + + * All method names are lower-cased. + * Contains a fallback list of methods for Node.js versions that do not have a + `http.METHODS` export (0.10 and lower). + * Provides the fallback list when using tools like `browserify` without pulling + in the `http` shim module. + +## Install + +```bash +$ npm install methods +``` + +## API + +```js +var methods = require('methods') +``` + +### methods + +This is an array of lower-cased method names that Node.js supports. If Node.js +provides the `http.METHODS` export, then this is the same array lower-cased, +otherwise it is a snapshot of the verbs from Node.js 0.10. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat +[npm-url]: https://npmjs.org/package/methods +[node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat +[node-version-url]: https://nodejs.org/en/download/ +[travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat +[travis-url]: https://travis-ci.org/jshttp/methods +[coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style=flat +[coveralls-url]: https://coveralls.io/r/jshttp/methods?branch=master +[downloads-image]: https://img.shields.io/npm/dm/methods.svg?style=flat +[downloads-url]: https://npmjs.org/package/methods diff --git a/node_modules/methods/index.js b/node_modules/methods/index.js new file mode 100644 index 0000000..667a50b --- /dev/null +++ b/node_modules/methods/index.js @@ -0,0 +1,69 @@ +/*! + * methods + * Copyright(c) 2013-2014 TJ Holowaychuk + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module dependencies. + * @private + */ + +var http = require('http'); + +/** + * Module exports. + * @public + */ + +module.exports = getCurrentNodeMethods() || getBasicNodeMethods(); + +/** + * Get the current Node.js methods. + * @private + */ + +function getCurrentNodeMethods() { + return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) { + return method.toLowerCase(); + }); +} + +/** + * Get the "basic" Node.js methods, a snapshot from Node.js 0.10. + * @private + */ + +function getBasicNodeMethods() { + return [ + 'get', + 'post', + 'put', + 'head', + 'delete', + 'options', + 'trace', + 'copy', + 'lock', + 'mkcol', + 'move', + 'purge', + 'propfind', + 'proppatch', + 'unlock', + 'report', + 'mkactivity', + 'checkout', + 'merge', + 'm-search', + 'notify', + 'subscribe', + 'unsubscribe', + 'patch', + 'search', + 'connect' + ]; +} diff --git a/node_modules/methods/package.json b/node_modules/methods/package.json new file mode 100644 index 0000000..4038df9 --- /dev/null +++ b/node_modules/methods/package.json @@ -0,0 +1,122 @@ +{ + "_args": [ + [ + { + "raw": "methods@~1.1.1", + "scope": null, + "escapedName": "methods", + "name": "methods", + "rawSpec": "~1.1.1", + "spec": ">=1.1.1 <1.2.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/superagent" + ] + ], + "_from": "methods@>=1.1.1 <1.2.0", + "_id": "methods@1.1.2", + "_inCache": true, + "_location": "/methods", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "methods@~1.1.1", + "scope": null, + "escapedName": "methods", + "name": "methods", + "rawSpec": "~1.1.1", + "spec": ">=1.1.1 <1.2.0", + "type": "range" + }, + "_requiredBy": [ + "/superagent" + ], + "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "_shasum": "5529a4d67654134edcc5266656835b0f851afcee", + "_shrinkwrap": null, + "_spec": "methods@~1.1.1", + "_where": "/home/burchettm/statsbot/node_modules/superagent", + "browser": { + "http": false + }, + "bugs": { + "url": "https://github.com/jshttp/methods/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + } + ], + "dependencies": {}, + "description": "HTTP methods that node supports", + "devDependencies": { + "istanbul": "0.4.1", + "mocha": "1.21.5" + }, + "directories": {}, + "dist": { + "shasum": "5529a4d67654134edcc5266656835b0f851afcee", + "tarball": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "index.js", + "HISTORY.md", + "LICENSE" + ], + "gitHead": "25d257d913f1b94bd2d73581521ff72c81469140", + "homepage": "https://github.com/jshttp/methods", + "keywords": [ + "http", + "methods" + ], + "license": "MIT", + "maintainers": [ + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "jonathanong", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "methods", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/methods.git" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "version": "1.1.2" +} diff --git a/node_modules/mime-db/HISTORY.md b/node_modules/mime-db/HISTORY.md new file mode 100644 index 0000000..27b2a11 --- /dev/null +++ b/node_modules/mime-db/HISTORY.md @@ -0,0 +1,391 @@ +1.26.0 / 2017-01-14 +=================== + + * Add `application/coap-payload` + * Add `application/cose` + * Add `application/cose-key` + * Add `application/cose-key-set` + * Add `application/mud+json` + * Add `application/trig` + * Add `application/vnd.dataresource+json` + * Add `application/vnd.hc+json` + * Add `application/vnd.tableschema+json` + * Add `application/yang-patch+json` + * Add `application/yang-patch+xml` + * Add extension `.geojson` to `application/geo+json` + +1.25.0 / 2016-11-11 +=================== + + * Add `application/dicom+json` + * Add `application/dicom+xml` + * Add `application/vnd.openstreetmap.data+xml` + * Add `application/vnd.tri.onesource` + * Add `application/yang-data+json` + * Add `application/yang-data+xml` + +1.24.0 / 2016-09-18 +=================== + + * Add `application/clue_info+xml` + * Add `application/geo+json` + * Add `application/lgr+xml` + * Add `application/vnd.amazon.mobi8-ebook` + * Add `application/vnd.chess-pgn` + * Add `application/vnd.comicbook+zip` + * Add `application/vnd.d2l.coursepackage1p0+zip` + * Add `application/vnd.espass-espass+zip` + * Add `application/vnd.nearst.inv+json` + * Add `application/vnd.oma.lwm2m+json` + * Add `application/vnd.oma.lwm2m+tlv` + * Add `application/vnd.quarantainenet` + * Add `application/vnd.rar` + * Add `audio/mp3` + * Add `image/dicom-rle` + * Add `image/emf` + * Add `image/jls` + * Add `image/wmf` + * Add `model/gltf+json` + * Add `text/vnd.ascii-art` + +1.23.0 / 2016-05-01 +=================== + + * Add `application/efi` + * Add `application/vnd.3gpp.sms+xml` + * Add `application/vnd.3lightssoftware.imagescal` + * Add `application/vnd.coreos.ignition+json` + * Add `application/vnd.desmume.movie` + * Add `application/vnd.onepager` + * Add `application/vnd.vel+json` + * Add `text/prs.prop.logic` + * Add `video/encaprtp` + * Add `video/h265` + * Add `video/iso.segment` + * Add `video/raptorfec` + * Add `video/rtploopback` + * Add `video/vnd.radgamettools.bink` + * Add `video/vnd.radgamettools.smacker` + * Add `video/vp8` + * Add extension `.3gpp` to `audio/3gpp` + +1.22.0 / 2016-02-15 +=================== + + * Add `application/ppsp-tracker+json` + * Add `application/problem+json` + * Add `application/problem+xml` + * Add `application/vnd.hdt` + * Add `application/vnd.ms-printschematicket+xml` + * Add `model/vnd.rosette.annotated-data-model` + * Add `text/slim` + * Add extension `.rng` to `application/xml` + * Fix extension of `application/dash+xml` to be `.mpd` + * Update primary extension to `.m4a` for `audio/mp4` + +1.21.0 / 2016-01-06 +=================== + + * Add `application/emergencycalldata.comment+xml` + * Add `application/emergencycalldata.deviceinfo+xml` + * Add `application/emergencycalldata.providerinfo+xml` + * Add `application/emergencycalldata.serviceinfo+xml` + * Add `application/emergencycalldata.subscriberinfo+xml` + * Add `application/vnd.filmit.zfc` + * Add `application/vnd.google-apps.document` + * Add `application/vnd.google-apps.presentation` + * Add `application/vnd.google-apps.spreadsheet` + * Add `application/vnd.mapbox-vector-tile` + * Add `application/vnd.ms-printdevicecapabilities+xml` + * Add `application/vnd.ms-windows.devicepairing` + * Add `application/vnd.ms-windows.nwprinting.oob` + * Add `application/vnd.tml` + * Add `audio/evs` + +1.20.0 / 2015-11-10 +=================== + + * Add `application/cdni` + * Add `application/csvm+json` + * Add `application/rfc+xml` + * Add `application/vnd.3gpp.access-transfer-events+xml` + * Add `application/vnd.3gpp.srvcc-ext+xml` + * Add `application/vnd.ms-windows.wsd.oob` + * Add `application/vnd.oxli.countgraph` + * Add `application/vnd.pagerduty+json` + * Add `text/x-suse-ymp` + +1.19.0 / 2015-09-17 +=================== + + * Add `application/vnd.3gpp-prose-pc3ch+xml` + * Add `application/vnd.3gpp.srvcc-info+xml` + * Add `application/vnd.apple.pkpass` + * Add `application/vnd.drive+json` + +1.18.0 / 2015-09-03 +=================== + + * Add `application/pkcs12` + * Add `application/vnd.3gpp-prose+xml` + * Add `application/vnd.3gpp.mid-call+xml` + * Add `application/vnd.3gpp.state-and-event-info+xml` + * Add `application/vnd.anki` + * Add `application/vnd.firemonkeys.cloudcell` + * Add `application/vnd.openblox.game+xml` + * Add `application/vnd.openblox.game-binary` + +1.17.0 / 2015-08-13 +=================== + + * Add `application/x-msdos-program` + * Add `audio/g711-0` + * Add `image/vnd.mozilla.apng` + * Add extension `.exe` to `application/x-msdos-program` + +1.16.0 / 2015-07-29 +=================== + + * Add `application/vnd.uri-map` + +1.15.0 / 2015-07-13 +=================== + + * Add `application/x-httpd-php` + +1.14.0 / 2015-06-25 +=================== + + * Add `application/scim+json` + * Add `application/vnd.3gpp.ussd+xml` + * Add `application/vnd.biopax.rdf+xml` + * Add `text/x-processing` + +1.13.0 / 2015-06-07 +=================== + + * Add nginx as a source + * Add `application/x-cocoa` + * Add `application/x-java-archive-diff` + * Add `application/x-makeself` + * Add `application/x-perl` + * Add `application/x-pilot` + * Add `application/x-redhat-package-manager` + * Add `application/x-sea` + * Add `audio/x-m4a` + * Add `audio/x-realaudio` + * Add `image/x-jng` + * Add `text/mathml` + +1.12.0 / 2015-06-05 +=================== + + * Add `application/bdoc` + * Add `application/vnd.hyperdrive+json` + * Add `application/x-bdoc` + * Add extension `.rtf` to `text/rtf` + +1.11.0 / 2015-05-31 +=================== + + * Add `audio/wav` + * Add `audio/wave` + * Add extension `.litcoffee` to `text/coffeescript` + * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` + * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` + +1.10.0 / 2015-05-19 +=================== + + * Add `application/vnd.balsamiq.bmpr` + * Add `application/vnd.microsoft.portable-executable` + * Add `application/x-ns-proxy-autoconfig` + +1.9.1 / 2015-04-19 +================== + + * Remove `.json` extension from `application/manifest+json` + - This is causing bugs downstream + +1.9.0 / 2015-04-19 +================== + + * Add `application/manifest+json` + * Add `application/vnd.micro+json` + * Add `image/vnd.zbrush.pcx` + * Add `image/x-ms-bmp` + +1.8.0 / 2015-03-13 +================== + + * Add `application/vnd.citationstyles.style+xml` + * Add `application/vnd.fastcopy-disk-image` + * Add `application/vnd.gov.sk.xmldatacontainer+xml` + * Add extension `.jsonld` to `application/ld+json` + +1.7.0 / 2015-02-08 +================== + + * Add `application/vnd.gerber` + * Add `application/vnd.msa-disk-image` + +1.6.1 / 2015-02-05 +================== + + * Community extensions ownership transferred from `node-mime` + +1.6.0 / 2015-01-29 +================== + + * Add `application/jose` + * Add `application/jose+json` + * Add `application/json-seq` + * Add `application/jwk+json` + * Add `application/jwk-set+json` + * Add `application/jwt` + * Add `application/rdap+json` + * Add `application/vnd.gov.sk.e-form+xml` + * Add `application/vnd.ims.imsccv1p3` + +1.5.0 / 2014-12-30 +================== + + * Add `application/vnd.oracle.resource+json` + * Fix various invalid MIME type entries + - `application/mbox+xml` + - `application/oscp-response` + - `application/vwg-multiplexed` + - `audio/g721` + +1.4.0 / 2014-12-21 +================== + + * Add `application/vnd.ims.imsccv1p2` + * Fix various invalid MIME type entries + - `application/vnd-acucobol` + - `application/vnd-curl` + - `application/vnd-dart` + - `application/vnd-dxr` + - `application/vnd-fdf` + - `application/vnd-mif` + - `application/vnd-sema` + - `application/vnd-wap-wmlc` + - `application/vnd.adobe.flash-movie` + - `application/vnd.dece-zip` + - `application/vnd.dvb_service` + - `application/vnd.micrografx-igx` + - `application/vnd.sealed-doc` + - `application/vnd.sealed-eml` + - `application/vnd.sealed-mht` + - `application/vnd.sealed-ppt` + - `application/vnd.sealed-tiff` + - `application/vnd.sealed-xls` + - `application/vnd.sealedmedia.softseal-html` + - `application/vnd.sealedmedia.softseal-pdf` + - `application/vnd.wap-slc` + - `application/vnd.wap-wbxml` + - `audio/vnd.sealedmedia.softseal-mpeg` + - `image/vnd-djvu` + - `image/vnd-svf` + - `image/vnd-wap-wbmp` + - `image/vnd.sealed-png` + - `image/vnd.sealedmedia.softseal-gif` + - `image/vnd.sealedmedia.softseal-jpg` + - `model/vnd-dwf` + - `model/vnd.parasolid.transmit-binary` + - `model/vnd.parasolid.transmit-text` + - `text/vnd-a` + - `text/vnd-curl` + - `text/vnd.wap-wml` + * Remove example template MIME types + - `application/example` + - `audio/example` + - `image/example` + - `message/example` + - `model/example` + - `multipart/example` + - `text/example` + - `video/example` + +1.3.1 / 2014-12-16 +================== + + * Fix missing extensions + - `application/json5` + - `text/hjson` + +1.3.0 / 2014-12-07 +================== + + * Add `application/a2l` + * Add `application/aml` + * Add `application/atfx` + * Add `application/atxml` + * Add `application/cdfx+xml` + * Add `application/dii` + * Add `application/json5` + * Add `application/lxf` + * Add `application/mf4` + * Add `application/vnd.apache.thrift.compact` + * Add `application/vnd.apache.thrift.json` + * Add `application/vnd.coffeescript` + * Add `application/vnd.enphase.envoy` + * Add `application/vnd.ims.imsccv1p1` + * Add `text/csv-schema` + * Add `text/hjson` + * Add `text/markdown` + * Add `text/yaml` + +1.2.0 / 2014-11-09 +================== + + * Add `application/cea` + * Add `application/dit` + * Add `application/vnd.gov.sk.e-form+zip` + * Add `application/vnd.tmd.mediaflex.api+xml` + * Type `application/epub+zip` is now IANA-registered + +1.1.2 / 2014-10-23 +================== + + * Rebuild database for `application/x-www-form-urlencoded` change + +1.1.1 / 2014-10-20 +================== + + * Mark `application/x-www-form-urlencoded` as compressible. + +1.1.0 / 2014-09-28 +================== + + * Add `application/font-woff2` + +1.0.3 / 2014-09-25 +================== + + * Fix engine requirement in package + +1.0.2 / 2014-09-25 +================== + + * Add `application/coap-group+json` + * Add `application/dcd` + * Add `application/vnd.apache.thrift.binary` + * Add `image/vnd.tencent.tap` + * Mark all JSON-derived types as compressible + * Update `text/vtt` data + +1.0.1 / 2014-08-30 +================== + + * Fix extension ordering + +1.0.0 / 2014-08-30 +================== + + * Add `application/atf` + * Add `application/merge-patch+json` + * Add `multipart/x-mixed-replace` + * Add `source: 'apache'` metadata + * Add `source: 'iana'` metadata + * Remove badly-assumed charset data diff --git a/node_modules/mime-db/LICENSE b/node_modules/mime-db/LICENSE new file mode 100644 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/mime-db/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/mime-db/README.md b/node_modules/mime-db/README.md new file mode 100644 index 0000000..7662440 --- /dev/null +++ b/node_modules/mime-db/README.md @@ -0,0 +1,82 @@ +# mime-db + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][travis-image]][travis-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +This is a database of all mime types. +It consists of a single, public JSON file and does not include any logic, +allowing it to remain as un-opinionated as possible with an API. +It aggregates data from the following sources: + +- http://www.iana.org/assignments/media-types/media-types.xhtml +- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types + +## Installation + +```bash +npm install mime-db +``` + +### Database Download + +If you're crazy enough to use this in the browser, you can just grab the +JSON file using [RawGit](https://rawgit.com/). It is recommended to replace +`master` with [a release tag](https://github.com/jshttp/mime-db/tags) as the +JSON format may change in the future. + +``` +https://cdn.rawgit.com/jshttp/mime-db/master/db.json +``` + +## Usage + +```js +var db = require('mime-db'); + +// grab data on .js files +var data = db['application/javascript']; +``` + +## Data Structure + +The JSON file is a map lookup for lowercased mime types. +Each mime type has the following properties: + +- `.source` - where the mime type is defined. + If not set, it's probably a custom media type. + - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) + - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) + - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) +- `.extensions[]` - known extensions associated with this mime type. +- `.compressible` - whether a file of this type can be gzipped. +- `.charset` - the default charset associated with this type, if any. + +If unknown, every property could be `undefined`. + +## Contributing + +To edit the database, only make PRs against `src/custom.json` or +`src/custom-suffix.json`. + +To update the build, run `npm run build`. + +## Adding Custom Media Types + +The best way to get new media types included in this library is to register +them with the IANA. The community registration procedure is outlined in +[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types +registered with the IANA are automatically pulled into this library. + +[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg +[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg +[npm-url]: https://npmjs.org/package/mime-db +[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg +[travis-url]: https://travis-ci.org/jshttp/mime-db +[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master +[node-image]: https://img.shields.io/node/v/mime-db.svg +[node-url]: http://nodejs.org/download/ diff --git a/node_modules/mime-db/db.json b/node_modules/mime-db/db.json new file mode 100644 index 0000000..400b9e1 --- /dev/null +++ b/node_modules/mime-db/db.json @@ -0,0 +1,6751 @@ +{ + "application/1d-interleaved-parityfec": { + "source": "iana" + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana" + }, + "application/3gpp-ims+xml": { + "source": "iana" + }, + "application/a2l": { + "source": "iana" + }, + "application/activemessage": { + "source": "iana" + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/aml": { + "source": "iana" + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"] + }, + "application/applefile": { + "source": "iana" + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"] + }, + "application/atf": { + "source": "iana" + }, + "application/atfx": { + "source": "iana" + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"] + }, + "application/atomcat+xml": { + "source": "iana", + "extensions": ["atomcat"] + }, + "application/atomdeleted+xml": { + "source": "iana" + }, + "application/atomicmail": { + "source": "iana" + }, + "application/atomsvc+xml": { + "source": "iana", + "extensions": ["atomsvc"] + }, + "application/atxml": { + "source": "iana" + }, + "application/auth-policy+xml": { + "source": "iana" + }, + "application/bacnet-xdd+zip": { + "source": "iana" + }, + "application/batch-smtp": { + "source": "iana" + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/beep+xml": { + "source": "iana" + }, + "application/calendar+json": { + "source": "iana", + "compressible": true + }, + "application/calendar+xml": { + "source": "iana" + }, + "application/call-completion": { + "source": "iana" + }, + "application/cals-1840": { + "source": "iana" + }, + "application/cbor": { + "source": "iana" + }, + "application/ccmp+xml": { + "source": "iana" + }, + "application/ccxml+xml": { + "source": "iana", + "extensions": ["ccxml"] + }, + "application/cdfx+xml": { + "source": "iana" + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"] + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"] + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"] + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"] + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"] + }, + "application/cdni": { + "source": "iana" + }, + "application/cea": { + "source": "iana" + }, + "application/cea-2018+xml": { + "source": "iana" + }, + "application/cellml+xml": { + "source": "iana" + }, + "application/cfw": { + "source": "iana" + }, + "application/clue_info+xml": { + "source": "iana" + }, + "application/cms": { + "source": "iana" + }, + "application/cnrp+xml": { + "source": "iana" + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true + }, + "application/coap-payload": { + "source": "iana" + }, + "application/commonground": { + "source": "iana" + }, + "application/conference-info+xml": { + "source": "iana" + }, + "application/cose": { + "source": "iana" + }, + "application/cose-key": { + "source": "iana" + }, + "application/cose-key-set": { + "source": "iana" + }, + "application/cpl+xml": { + "source": "iana" + }, + "application/csrattrs": { + "source": "iana" + }, + "application/csta+xml": { + "source": "iana" + }, + "application/cstadata+xml": { + "source": "iana" + }, + "application/csvm+json": { + "source": "iana", + "compressible": true + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"] + }, + "application/cybercash": { + "source": "iana" + }, + "application/dart": { + "compressible": true + }, + "application/dash+xml": { + "source": "iana", + "extensions": ["mpd"] + }, + "application/dashdelta": { + "source": "iana" + }, + "application/davmount+xml": { + "source": "iana", + "extensions": ["davmount"] + }, + "application/dca-rft": { + "source": "iana" + }, + "application/dcd": { + "source": "iana" + }, + "application/dec-dx": { + "source": "iana" + }, + "application/dialog-info+xml": { + "source": "iana" + }, + "application/dicom": { + "source": "iana" + }, + "application/dicom+json": { + "source": "iana", + "compressible": true + }, + "application/dicom+xml": { + "source": "iana" + }, + "application/dii": { + "source": "iana" + }, + "application/dit": { + "source": "iana" + }, + "application/dns": { + "source": "iana" + }, + "application/docbook+xml": { + "source": "apache", + "extensions": ["dbk"] + }, + "application/dskpp+xml": { + "source": "iana" + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"] + }, + "application/dssc+xml": { + "source": "iana", + "extensions": ["xdssc"] + }, + "application/dvcs": { + "source": "iana" + }, + "application/ecmascript": { + "source": "iana", + "compressible": true, + "extensions": ["ecma"] + }, + "application/edi-consent": { + "source": "iana" + }, + "application/edi-x12": { + "source": "iana", + "compressible": false + }, + "application/edifact": { + "source": "iana", + "compressible": false + }, + "application/efi": { + "source": "iana" + }, + "application/emergencycalldata.comment+xml": { + "source": "iana" + }, + "application/emergencycalldata.deviceinfo+xml": { + "source": "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + "source": "iana" + }, + "application/emergencycalldata.serviceinfo+xml": { + "source": "iana" + }, + "application/emergencycalldata.subscriberinfo+xml": { + "source": "iana" + }, + "application/emma+xml": { + "source": "iana", + "extensions": ["emma"] + }, + "application/emotionml+xml": { + "source": "iana" + }, + "application/encaprtp": { + "source": "iana" + }, + "application/epp+xml": { + "source": "iana" + }, + "application/epub+zip": { + "source": "iana", + "extensions": ["epub"] + }, + "application/eshop": { + "source": "iana" + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"] + }, + "application/fastinfoset": { + "source": "iana" + }, + "application/fastsoap": { + "source": "iana" + }, + "application/fdt+xml": { + "source": "iana" + }, + "application/fits": { + "source": "iana" + }, + "application/font-sfnt": { + "source": "iana" + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"] + }, + "application/font-woff": { + "source": "iana", + "compressible": false, + "extensions": ["woff"] + }, + "application/font-woff2": { + "compressible": false, + "extensions": ["woff2"] + }, + "application/framework-attributes+xml": { + "source": "iana" + }, + "application/geo+json": { + "source": "iana", + "compressible": true, + "extensions": ["geojson"] + }, + "application/gml+xml": { + "source": "iana", + "extensions": ["gml"] + }, + "application/gpx+xml": { + "source": "apache", + "extensions": ["gpx"] + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"] + }, + "application/gzip": { + "source": "iana", + "compressible": false + }, + "application/h224": { + "source": "iana" + }, + "application/held+xml": { + "source": "iana" + }, + "application/http": { + "source": "iana" + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"] + }, + "application/ibe-key-request+xml": { + "source": "iana" + }, + "application/ibe-pkg-reply+xml": { + "source": "iana" + }, + "application/ibe-pp-data": { + "source": "iana" + }, + "application/iges": { + "source": "iana" + }, + "application/im-iscomposing+xml": { + "source": "iana" + }, + "application/index": { + "source": "iana" + }, + "application/index.cmd": { + "source": "iana" + }, + "application/index.obj": { + "source": "iana" + }, + "application/index.response": { + "source": "iana" + }, + "application/index.vnd": { + "source": "iana" + }, + "application/inkml+xml": { + "source": "iana", + "extensions": ["ink","inkml"] + }, + "application/iotp": { + "source": "iana" + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"] + }, + "application/ipp": { + "source": "iana" + }, + "application/isup": { + "source": "iana" + }, + "application/its+xml": { + "source": "iana" + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar","war","ear"] + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"] + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"] + }, + "application/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js"] + }, + "application/jose": { + "source": "iana" + }, + "application/jose+json": { + "source": "iana", + "compressible": true + }, + "application/jrd+json": { + "source": "iana", + "compressible": true + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json","map"] + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true + }, + "application/json-seq": { + "source": "iana" + }, + "application/json5": { + "extensions": ["json5"] + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"] + }, + "application/jwk+json": { + "source": "iana", + "compressible": true + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true + }, + "application/jwt": { + "source": "iana" + }, + "application/kpml-request+xml": { + "source": "iana" + }, + "application/kpml-response+xml": { + "source": "iana" + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"] + }, + "application/lgr+xml": { + "source": "iana" + }, + "application/link-format": { + "source": "iana" + }, + "application/load-control+xml": { + "source": "iana" + }, + "application/lost+xml": { + "source": "iana", + "extensions": ["lostxml"] + }, + "application/lostsync+xml": { + "source": "iana" + }, + "application/lxf": { + "source": "iana" + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"] + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"] + }, + "application/macwriteii": { + "source": "iana" + }, + "application/mads+xml": { + "source": "iana", + "extensions": ["mads"] + }, + "application/manifest+json": { + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"] + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"] + }, + "application/marcxml+xml": { + "source": "iana", + "extensions": ["mrcx"] + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma","nb","mb"] + }, + "application/mathml+xml": { + "source": "iana", + "extensions": ["mathml"] + }, + "application/mathml-content+xml": { + "source": "iana" + }, + "application/mathml-presentation+xml": { + "source": "iana" + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana" + }, + "application/mbms-deregister+xml": { + "source": "iana" + }, + "application/mbms-envelope+xml": { + "source": "iana" + }, + "application/mbms-msk+xml": { + "source": "iana" + }, + "application/mbms-msk-response+xml": { + "source": "iana" + }, + "application/mbms-protection-description+xml": { + "source": "iana" + }, + "application/mbms-reception-report+xml": { + "source": "iana" + }, + "application/mbms-register+xml": { + "source": "iana" + }, + "application/mbms-register-response+xml": { + "source": "iana" + }, + "application/mbms-schedule+xml": { + "source": "iana" + }, + "application/mbms-user-service-description+xml": { + "source": "iana" + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"] + }, + "application/media-policy-dataset+xml": { + "source": "iana" + }, + "application/media_control+xml": { + "source": "iana" + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "extensions": ["mscml"] + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true + }, + "application/metalink+xml": { + "source": "apache", + "extensions": ["metalink"] + }, + "application/metalink4+xml": { + "source": "iana", + "extensions": ["meta4"] + }, + "application/mets+xml": { + "source": "iana", + "extensions": ["mets"] + }, + "application/mf4": { + "source": "iana" + }, + "application/mikey": { + "source": "iana" + }, + "application/mods+xml": { + "source": "iana", + "extensions": ["mods"] + }, + "application/moss-keys": { + "source": "iana" + }, + "application/moss-signature": { + "source": "iana" + }, + "application/mosskey-data": { + "source": "iana" + }, + "application/mosskey-request": { + "source": "iana" + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21","mp21"] + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4s","m4p"] + }, + "application/mpeg4-generic": { + "source": "iana" + }, + "application/mpeg4-iod": { + "source": "iana" + }, + "application/mpeg4-iod-xmt": { + "source": "iana" + }, + "application/mrb-consumer+xml": { + "source": "iana" + }, + "application/mrb-publish+xml": { + "source": "iana" + }, + "application/msc-ivr+xml": { + "source": "iana" + }, + "application/msc-mixer+xml": { + "source": "iana" + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc","dot"] + }, + "application/mud+json": { + "source": "iana", + "compressible": true + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"] + }, + "application/nasdata": { + "source": "iana" + }, + "application/news-checkgroups": { + "source": "iana" + }, + "application/news-groupinfo": { + "source": "iana" + }, + "application/news-transmission": { + "source": "iana" + }, + "application/nlsml+xml": { + "source": "iana" + }, + "application/nss": { + "source": "iana" + }, + "application/ocsp-request": { + "source": "iana" + }, + "application/ocsp-response": { + "source": "iana" + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"] + }, + "application/odx": { + "source": "iana" + }, + "application/oebps-package+xml": { + "source": "iana", + "extensions": ["opf"] + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"] + }, + "application/omdoc+xml": { + "source": "apache", + "extensions": ["omdoc"] + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc","onetoc2","onetmp","onepkg"] + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"] + }, + "application/p2p-overlay+xml": { + "source": "iana" + }, + "application/parityfec": { + "source": "iana" + }, + "application/patch-ops-error+xml": { + "source": "iana", + "extensions": ["xer"] + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"] + }, + "application/pdx": { + "source": "iana" + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"] + }, + "application/pgp-keys": { + "source": "iana" + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["asc","sig"] + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"] + }, + "application/pidf+xml": { + "source": "iana" + }, + "application/pidf-diff+xml": { + "source": "iana" + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"] + }, + "application/pkcs12": { + "source": "iana" + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m","p7c"] + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"] + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"] + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"] + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"] + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"] + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"] + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"] + }, + "application/pls+xml": { + "source": "iana", + "extensions": ["pls"] + }, + "application/poc-settings+xml": { + "source": "iana" + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai","eps","ps"] + }, + "application/ppsp-tracker+json": { + "source": "iana", + "compressible": true + }, + "application/problem+json": { + "source": "iana", + "compressible": true + }, + "application/problem+xml": { + "source": "iana" + }, + "application/provenance+xml": { + "source": "iana" + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana" + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"] + }, + "application/prs.hpub+zip": { + "source": "iana" + }, + "application/prs.nprend": { + "source": "iana" + }, + "application/prs.plucker": { + "source": "iana" + }, + "application/prs.rdf-xml-crypt": { + "source": "iana" + }, + "application/prs.xsf+xml": { + "source": "iana" + }, + "application/pskc+xml": { + "source": "iana", + "extensions": ["pskcxml"] + }, + "application/qsig": { + "source": "iana" + }, + "application/raptorfec": { + "source": "iana" + }, + "application/rdap+json": { + "source": "iana", + "compressible": true + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf"] + }, + "application/reginfo+xml": { + "source": "iana", + "extensions": ["rif"] + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"] + }, + "application/remote-printing": { + "source": "iana" + }, + "application/reputon+json": { + "source": "iana", + "compressible": true + }, + "application/resource-lists+xml": { + "source": "iana", + "extensions": ["rl"] + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "extensions": ["rld"] + }, + "application/rfc+xml": { + "source": "iana" + }, + "application/riscos": { + "source": "iana" + }, + "application/rlmi+xml": { + "source": "iana" + }, + "application/rls-services+xml": { + "source": "iana", + "extensions": ["rs"] + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"] + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"] + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"] + }, + "application/rpki-updown": { + "source": "iana" + }, + "application/rsd+xml": { + "source": "apache", + "extensions": ["rsd"] + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"] + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "application/rtploopback": { + "source": "iana" + }, + "application/rtx": { + "source": "iana" + }, + "application/samlassertion+xml": { + "source": "iana" + }, + "application/samlmetadata+xml": { + "source": "iana" + }, + "application/sbml+xml": { + "source": "iana", + "extensions": ["sbml"] + }, + "application/scaip+xml": { + "source": "iana" + }, + "application/scim+json": { + "source": "iana", + "compressible": true + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"] + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"] + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"] + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"] + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"] + }, + "application/sep+xml": { + "source": "iana" + }, + "application/sep-exi": { + "source": "iana" + }, + "application/session-info": { + "source": "iana" + }, + "application/set-payment": { + "source": "iana" + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"] + }, + "application/set-registration": { + "source": "iana" + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"] + }, + "application/sgml": { + "source": "iana" + }, + "application/sgml-open-catalog": { + "source": "iana" + }, + "application/shf+xml": { + "source": "iana", + "extensions": ["shf"] + }, + "application/sieve": { + "source": "iana" + }, + "application/simple-filter+xml": { + "source": "iana" + }, + "application/simple-message-summary": { + "source": "iana" + }, + "application/simplesymbolcontainer": { + "source": "iana" + }, + "application/slate": { + "source": "iana" + }, + "application/smil": { + "source": "iana" + }, + "application/smil+xml": { + "source": "iana", + "extensions": ["smi","smil"] + }, + "application/smpte336m": { + "source": "iana" + }, + "application/soap+fastinfoset": { + "source": "iana" + }, + "application/soap+xml": { + "source": "iana", + "compressible": true + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"] + }, + "application/sparql-results+xml": { + "source": "iana", + "extensions": ["srx"] + }, + "application/spirits-event+xml": { + "source": "iana" + }, + "application/sql": { + "source": "iana" + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"] + }, + "application/srgs+xml": { + "source": "iana", + "extensions": ["grxml"] + }, + "application/sru+xml": { + "source": "iana", + "extensions": ["sru"] + }, + "application/ssdl+xml": { + "source": "apache", + "extensions": ["ssdl"] + }, + "application/ssml+xml": { + "source": "iana", + "extensions": ["ssml"] + }, + "application/tamp-apex-update": { + "source": "iana" + }, + "application/tamp-apex-update-confirm": { + "source": "iana" + }, + "application/tamp-community-update": { + "source": "iana" + }, + "application/tamp-community-update-confirm": { + "source": "iana" + }, + "application/tamp-error": { + "source": "iana" + }, + "application/tamp-sequence-adjust": { + "source": "iana" + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana" + }, + "application/tamp-status-query": { + "source": "iana" + }, + "application/tamp-status-response": { + "source": "iana" + }, + "application/tamp-update": { + "source": "iana" + }, + "application/tamp-update-confirm": { + "source": "iana" + }, + "application/tar": { + "compressible": true + }, + "application/tei+xml": { + "source": "iana", + "extensions": ["tei","teicorpus"] + }, + "application/thraud+xml": { + "source": "iana", + "extensions": ["tfi"] + }, + "application/timestamp-query": { + "source": "iana" + }, + "application/timestamp-reply": { + "source": "iana" + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"] + }, + "application/trig": { + "source": "iana" + }, + "application/ttml+xml": { + "source": "iana" + }, + "application/tve-trigger": { + "source": "iana" + }, + "application/ulpfec": { + "source": "iana" + }, + "application/urc-grpsheet+xml": { + "source": "iana" + }, + "application/urc-ressheet+xml": { + "source": "iana" + }, + "application/urc-targetdesc+xml": { + "source": "iana" + }, + "application/urc-uisocketdesc+xml": { + "source": "iana" + }, + "application/vcard+json": { + "source": "iana", + "compressible": true + }, + "application/vcard+xml": { + "source": "iana" + }, + "application/vemmi": { + "source": "iana" + }, + "application/vividence.scriptfile": { + "source": "apache" + }, + "application/vnd.3gpp-prose+xml": { + "source": "iana" + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana" + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana" + }, + "application/vnd.3gpp.mid-call+xml": { + "source": "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"] + }, + "application/vnd.3gpp.sms": { + "source": "iana" + }, + "application/vnd.3gpp.sms+xml": { + "source": "iana" + }, + "application/vnd.3gpp.srvcc-ext+xml": { + "source": "iana" + }, + "application/vnd.3gpp.srvcc-info+xml": { + "source": "iana" + }, + "application/vnd.3gpp.state-and-event-info+xml": { + "source": "iana" + }, + "application/vnd.3gpp.ussd+xml": { + "source": "iana" + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana" + }, + "application/vnd.3gpp2.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + "source": "iana" + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"] + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"] + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"] + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc","acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "extensions": ["air"] + }, + "application/vnd.adobe.flash.movie": { + "source": "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"] + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp","fxpl"] + }, + "application/vnd.adobe.partial-upload": { + "source": "iana" + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "extensions": ["xdp"] + }, + "application/vnd.adobe.xfdf": { + "source": "iana", + "extensions": ["xfdf"] + }, + "application/vnd.aether.imp": { + "source": "iana" + }, + "application/vnd.ah-barcode": { + "source": "iana" + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"] + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + "source": "iana" + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"] + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana" + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"] + }, + "application/vnd.anki": { + "source": "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"] + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"] + }, + "application/vnd.apache.thrift.binary": { + "source": "iana" + }, + "application/vnd.apache.thrift.compact": { + "source": "iana" + }, + "application/vnd.apache.thrift.json": { + "source": "iana" + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "extensions": ["mpkg"] + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"] + }, + "application/vnd.apple.pkpass": { + "compressible": false, + "extensions": ["pkpass"] + }, + "application/vnd.arastra.swi": { + "source": "iana" + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"] + }, + "application/vnd.artsquare": { + "source": "iana" + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"] + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"] + }, + "application/vnd.autopackage": { + "source": "iana" + }, + "application/vnd.avistar+xml": { + "source": "iana" + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana" + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana" + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.biopax.rdf+xml": { + "source": "iana" + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana" + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana" + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"] + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"] + }, + "application/vnd.cab-jscript": { + "source": "iana" + }, + "application/vnd.canon-cpdl": { + "source": "iana" + }, + "application/vnd.canon-lips": { + "source": "iana" + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana" + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana" + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "extensions": ["cdxml"] + }, + "application/vnd.chess-pgn": { + "source": "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"] + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana" + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana" + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"] + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"] + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g","c4d","c4f","c4p","c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"] + }, + "application/vnd.coffeescript": { + "source": "iana" + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.comicbook+zip": { + "source": "iana" + }, + "application/vnd.commerce-battelle": { + "source": "iana" + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"] + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"] + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"] + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "extensions": ["wbs"] + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"] + }, + "application/vnd.ctct.ws+xml": { + "source": "iana" + }, + "application/vnd.cups-pdf": { + "source": "iana" + }, + "application/vnd.cups-postscript": { + "source": "iana" + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"] + }, + "application/vnd.cups-raster": { + "source": "iana" + }, + "application/vnd.cups-raw": { + "source": "iana" + }, + "application/vnd.curl": { + "source": "iana" + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"] + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana" + }, + "application/vnd.cybank": { + "source": "iana" + }, + "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana" + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"] + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"] + }, + "application/vnd.dataresource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.debian.binary-package": { + "source": "iana" + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf","uvvf","uvd","uvvd"] + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "extensions": ["uvt","uvvt"] + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx","uvvx"] + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz","uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"] + }, + "application/vnd.desmume-movie": { + "source": "iana" + }, + "application/vnd.desmume.movie": { + "source": "apache" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana" + }, + "application/vnd.dm.delegation+xml": { + "source": "iana" + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"] + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + "source": "iana" + }, + "application/vnd.dolby.mobile.2": { + "source": "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana" + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"] + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"] + }, + "application/vnd.drive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"] + }, + "application/vnd.dtg.local": { + "source": "iana" + }, + "application/vnd.dtg.local.flash": { + "source": "iana" + }, + "application/vnd.dtg.local.html": { + "source": "iana" + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"] + }, + "application/vnd.dvb.dvbj": { + "source": "iana" + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana" + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana" + }, + "application/vnd.dvb.pfr": { + "source": "iana" + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"] + }, + "application/vnd.dxr": { + "source": "iana" + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"] + }, + "application/vnd.dzr": { + "source": "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana" + }, + "application/vnd.ecdis-update": { + "source": "iana" + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"] + }, + "application/vnd.ecowin.filerequest": { + "source": "iana" + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana" + }, + "application/vnd.ecowin.series": { + "source": "iana" + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana" + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana" + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"] + }, + "application/vnd.enphase.envoy": { + "source": "iana" + }, + "application/vnd.eprints.data+xml": { + "source": "iana" + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"] + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"] + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"] + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"] + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + "source": "iana" + }, + "application/vnd.espass-espass+zip": { + "source": "iana" + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "extensions": ["es3","et3"] + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana" + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana" + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana" + }, + "application/vnd.etsi.cug+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana" + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana" + }, + "application/vnd.etsi.mheg5": { + "source": "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana" + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana" + }, + "application/vnd.etsi.sci+xml": { + "source": "iana" + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana" + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana" + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana" + }, + "application/vnd.etsi.tsl.der": { + "source": "iana" + }, + "application/vnd.eudora.data": { + "source": "iana" + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"] + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"] + }, + "application/vnd.f-secure.mobile": { + "source": "iana" + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana" + }, + "application/vnd.fdf": { + "source": "iana", + "extensions": ["fdf"] + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"] + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed","dataless"] + }, + "application/vnd.ffsns": { + "source": "iana" + }, + "application/vnd.filmit.zfc": { + "source": "iana" + }, + "application/vnd.fints": { + "source": "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + "source": "iana" + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"] + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana" + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm","frame","maker","book"] + }, + "application/vnd.frogans.fnc": { + "source": "iana", + "extensions": ["fnc"] + }, + "application/vnd.frogans.ltf": { + "source": "iana", + "extensions": ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"] + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana" + }, + "application/vnd.fujixerox.art4": { + "source": "iana" + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana" + }, + "application/vnd.fut-misnet": { + "source": "iana" + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"] + }, + "application/vnd.geo+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geocube+xml": { + "source": "iana" + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"] + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"] + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex","gre"] + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"] + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"] + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"] + }, + "application/vnd.gerber": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana" + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"] + }, + "application/vnd.google-apps.document": { + "compressible": false, + "extensions": ["gdoc"] + }, + "application/vnd.google-apps.presentation": { + "compressible": false, + "extensions": ["gslides"] + }, + "application/vnd.google-apps.spreadsheet": { + "compressible": false, + "extensions": ["gsheet"] + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"] + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana" + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana" + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana" + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf","gqs"] + }, + "application/vnd.gridmp": { + "source": "iana" + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"] + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"] + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"] + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"] + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"] + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"] + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"] + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hal+xml": { + "source": "iana", + "extensions": ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "extensions": ["zmm"] + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"] + }, + "application/vnd.hc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hcl-bireports": { + "source": "iana" + }, + "application/vnd.hdt": { + "source": "iana" + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"] + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"] + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"] + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"] + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"] + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"] + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"] + }, + "application/vnd.httphone": { + "source": "iana" + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"] + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana" + }, + "application/vnd.ibm.afplinedata": { + "source": "iana" + }, + "application/vnd.ibm.electronic-media": { + "source": "iana" + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"] + }, + "application/vnd.ibm.modcap": { + "source": "iana", + "extensions": ["afp","listafp","list3820"] + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"] + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"] + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc","icm"] + }, + "application/vnd.ieee.1905": { + "source": "iana" + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"] + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"] + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana" + }, + "application/vnd.informix-visionary": { + "source": "iana" + }, + "application/vnd.infotech.project": { + "source": "iana" + }, + "application/vnd.infotech.project+xml": { + "source": "iana" + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana" + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"] + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw","xpx"] + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"] + }, + "application/vnd.intertrust.digibox": { + "source": "iana" + }, + "application/vnd.intertrust.nncp": { + "source": "iana" + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"] + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana" + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "extensions": ["irp"] + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"] + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"] + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"] + }, + "application/vnd.japannet-directory-service": { + "source": "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-registration": { + "source": "iana" + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-verification": { + "source": "iana" + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"] + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"] + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana" + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz","ktr"] + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"] + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"] + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"] + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"] + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"] + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr","kpt"] + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"] + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd","kwt"] + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"] + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"] + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne","knp"] + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp","skd","skt","skm"] + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"] + }, + "application/vnd.las.las+xml": { + "source": "iana", + "extensions": ["lasxml"] + }, + "application/vnd.liberty-request+xml": { + "source": "iana" + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "extensions": ["lbe"] + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"] + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"] + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"] + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"] + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"] + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"] + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"] + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + "source": "iana" + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana" + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana" + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana" + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana" + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana" + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"] + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + "source": "iana" + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"] + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"] + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"] + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana" + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana" + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"] + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"] + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"] + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"] + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"] + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"] + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"] + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"] + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana" + }, + "application/vnd.motorola.iprm": { + "source": "iana" + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"] + }, + "application/vnd.ms-3mfdocument": { + "source": "iana" + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"] + }, + "application/vnd.ms-asf": { + "source": "iana" + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache" + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"] + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"] + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"] + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"] + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana" + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"] + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache" + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"] + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana" + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt","pps","pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + "source": "iana" + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache" + }, + "application/vnd.ms-printschematicket+xml": { + "source": "iana" + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp","mpt"] + }, + "application/vnd.ms-tnef": { + "source": "iana" + }, + "application/vnd.ms-windows.devicepairing": { + "source": "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + "source": "iana" + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"] + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps","wks","wcm","wdb"] + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"] + }, + "application/vnd.msa-disk-image": { + "source": "iana" + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"] + }, + "application/vnd.msign": { + "source": "iana" + }, + "application/vnd.multiad.creator": { + "source": "iana" + }, + "application/vnd.multiad.creator.cif": { + "source": "iana" + }, + "application/vnd.music-niff": { + "source": "iana" + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"] + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"] + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"] + }, + "application/vnd.ncd.control": { + "source": "iana" + }, + "application/vnd.ncd.reference": { + "source": "iana" + }, + "application/vnd.nearst.inv+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.nervana": { + "source": "iana" + }, + "application/vnd.netfpx": { + "source": "iana" + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"] + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana" + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana" + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf","nitf"] + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"] + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"] + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"] + }, + "application/vnd.nokia.catalogs": { + "source": "iana" + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.conml+xml": { + "source": "iana" + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana" + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana" + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana" + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana" + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "iana", + "extensions": ["n-gage"] + }, + "application/vnd.nokia.ncd": { + "source": "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana" + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"] + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"] + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"] + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"] + }, + "application/vnd.ntt-local.content-share": { + "source": "iana" + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana" + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + "source": "iana", + "extensions": ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"] + }, + "application/vnd.obn": { + "source": "iana" + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana" + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana" + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana" + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana" + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana" + }, + "application/vnd.oipf.pae.gem": { + "source": "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana" + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana" + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana" + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana" + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"] + }, + "application/vnd.oma-scws-config": { + "source": "iana" + }, + "application/vnd.oma-scws-http-request": { + "source": "iana" + }, + "application/vnd.oma-scws-http-response": { + "source": "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana" + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana" + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana" + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana" + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana" + }, + "application/vnd.oma.dcd": { + "source": "iana" + }, + "application/vnd.oma.dcdc": { + "source": "iana" + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "extensions": ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana" + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana" + }, + "application/vnd.oma.lwm2m+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+tlv": { + "source": "iana" + }, + "application/vnd.oma.pal+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana" + }, + "application/vnd.oma.push": { + "source": "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana" + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana" + }, + "application/vnd.omads-email+xml": { + "source": "iana" + }, + "application/vnd.omads-file+xml": { + "source": "iana" + }, + "application/vnd.omads-folder+xml": { + "source": "iana" + }, + "application/vnd.omaloc-supl-init": { + "source": "iana" + }, + "application/vnd.onepager": { + "source": "iana" + }, + "application/vnd.openblox.game+xml": { + "source": "iana" + }, + "application/vnd.openblox.game-binary": { + "source": "iana" + }, + "application/vnd.openeye.oeb": { + "source": "iana" + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml-template": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "apache", + "extensions": ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml-template": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "apache", + "extensions": ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml-template": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "apache", + "extensions": ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana" + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.orange.indata": { + "source": "iana" + }, + "application/vnd.osa.netdeploy": { + "source": "iana" + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"] + }, + "application/vnd.osgi.bundle": { + "source": "iana" + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"] + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana" + }, + "application/vnd.oxli.countgraph": { + "source": "iana" + }, + "application/vnd.pagerduty+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb","pqa","oprc"] + }, + "application/vnd.panoply": { + "source": "iana" + }, + "application/vnd.paos+xml": { + "source": "iana" + }, + "application/vnd.paos.xml": { + "source": "apache" + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"] + }, + "application/vnd.pcos": { + "source": "iana" + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"] + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + "source": "iana" + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"] + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana" + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"] + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + "source": "iana" + }, + "application/vnd.powerbuilder7": { + "source": "iana" + }, + "application/vnd.powerbuilder7-s": { + "source": "iana" + }, + "application/vnd.powerbuilder75": { + "source": "iana" + }, + "application/vnd.powerbuilder75-s": { + "source": "iana" + }, + "application/vnd.preminet": { + "source": "iana" + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"] + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"] + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"] + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + "source": "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana" + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana" + }, + "application/vnd.quarantainenet": { + "source": "iana" + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana" + }, + "application/vnd.radisys.moml+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana" + }, + "application/vnd.rainstor.data": { + "source": "iana" + }, + "application/vnd.rapid": { + "source": "iana" + }, + "application/vnd.rar": { + "source": "iana" + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"] + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "extensions": ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + "source": "iana" + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"] + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"] + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "extensions": ["link66"] + }, + "application/vnd.rs-274x": { + "source": "iana" + }, + "application/vnd.ruckus.download": { + "source": "iana" + }, + "application/vnd.s3sms": { + "source": "iana" + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"] + }, + "application/vnd.sbm.cid": { + "source": "iana" + }, + "application/vnd.sbm.mid2": { + "source": "iana" + }, + "application/vnd.scribus": { + "source": "iana" + }, + "application/vnd.sealed.3df": { + "source": "iana" + }, + "application/vnd.sealed.csf": { + "source": "iana" + }, + "application/vnd.sealed.doc": { + "source": "iana" + }, + "application/vnd.sealed.eml": { + "source": "iana" + }, + "application/vnd.sealed.mht": { + "source": "iana" + }, + "application/vnd.sealed.net": { + "source": "iana" + }, + "application/vnd.sealed.ppt": { + "source": "iana" + }, + "application/vnd.sealed.tiff": { + "source": "iana" + }, + "application/vnd.sealed.xls": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana" + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"] + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"] + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"] + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"] + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"] + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"] + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"] + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd","twds"] + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"] + }, + "application/vnd.smart.notebook": { + "source": "iana" + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"] + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana" + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana" + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "extensions": ["sdkm","sdkd"] + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"] + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"] + }, + "application/vnd.sss-cod": { + "source": "iana" + }, + "application/vnd.sss-dtf": { + "source": "iana" + }, + "application/vnd.sss-ntf": { + "source": "iana" + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"] + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"] + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"] + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"] + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw","vor"] + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"] + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"] + }, + "application/vnd.street-stream": { + "source": "iana" + }, + "application/vnd.sun.wadl+xml": { + "source": "iana" + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"] + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"] + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"] + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"] + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"] + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus","susp"] + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"] + }, + "application/vnd.swiftview-ics": { + "source": "iana" + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis","sisx"] + }, + "application/vnd.syncml+xml": { + "source": "iana", + "extensions": ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "extensions": ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "extensions": ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana" + }, + "application/vnd.syncml.ds.notification": { + "source": "iana" + }, + "application/vnd.tableschema+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"] + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap","cap","dmp"] + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana" + }, + "application/vnd.tml": { + "source": "iana" + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"] + }, + "application/vnd.tri.onesource": { + "source": "iana" + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"] + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"] + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"] + }, + "application/vnd.truedoc": { + "source": "iana" + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana" + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd","ufdl"] + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"] + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"] + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"] + }, + "application/vnd.uoml+xml": { + "source": "iana", + "extensions": ["uoml"] + }, + "application/vnd.uplanet.alert": { + "source": "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.channel": { + "source": "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.list": { + "source": "iana" + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.signal": { + "source": "iana" + }, + "application/vnd.uri-map": { + "source": "iana" + }, + "application/vnd.valve.source.material": { + "source": "iana" + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"] + }, + "application/vnd.vd-study": { + "source": "iana" + }, + "application/vnd.vectorworks": { + "source": "iana" + }, + "application/vnd.vel+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.verimatrix.vcas": { + "source": "iana" + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana" + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd","vst","vss","vsw"] + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"] + }, + "application/vnd.vividence.scriptfile": { + "source": "iana" + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"] + }, + "application/vnd.wap.sic": { + "source": "iana" + }, + "application/vnd.wap.slc": { + "source": "iana" + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "extensions": ["wbxml"] + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"] + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"] + }, + "application/vnd.wfa.p2p": { + "source": "iana" + }, + "application/vnd.wfa.wsc": { + "source": "iana" + }, + "application/vnd.windows.devicepairing": { + "source": "iana" + }, + "application/vnd.wmc": { + "source": "iana" + }, + "application/vnd.wmf.bootstrap": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana" + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"] + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"] + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana" + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana" + }, + "application/vnd.wv.csp+xml": { + "source": "iana" + }, + "application/vnd.wv.ssp+xml": { + "source": "iana" + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"] + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"] + }, + "application/vnd.xfdl.webform": { + "source": "iana" + }, + "application/vnd.xmi+xml": { + "source": "iana" + }, + "application/vnd.xmpie.cpkg": { + "source": "iana" + }, + "application/vnd.xmpie.dpkg": { + "source": "iana" + }, + "application/vnd.xmpie.plan": { + "source": "iana" + }, + "application/vnd.xmpie.ppkg": { + "source": "iana" + }, + "application/vnd.xmpie.xlim": { + "source": "iana" + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "extensions": ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana" + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana" + }, + "application/vnd.yaoweme": { + "source": "iana" + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"] + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir","zirz"] + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "extensions": ["zaz"] + }, + "application/voicexml+xml": { + "source": "iana", + "extensions": ["vxml"] + }, + "application/vq-rtcpxr": { + "source": "iana" + }, + "application/watcherinfo+xml": { + "source": "iana" + }, + "application/whoispp-query": { + "source": "iana" + }, + "application/whoispp-response": { + "source": "iana" + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"] + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"] + }, + "application/wita": { + "source": "iana" + }, + "application/wordperfect5.1": { + "source": "iana" + }, + "application/wsdl+xml": { + "source": "iana", + "extensions": ["wsdl"] + }, + "application/wspolicy+xml": { + "source": "iana", + "extensions": ["wspolicy"] + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"] + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"] + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"] + }, + "application/x-amf": { + "source": "apache" + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"] + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab","x32","u32","vox"] + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"] + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"] + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"] + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"] + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb","blorb"] + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"] + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2","boz"] + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr","cba","cbt","cbz","cb7"] + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"] + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"] + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"] + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"] + }, + "application/x-chrome-extension": { + "extensions": ["crx"] + }, + "application/x-cocoa": { + "source": "nginx", + "extensions": ["cco"] + }, + "application/x-compress": { + "source": "apache" + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"] + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"] + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"] + }, + "application/x-deb": { + "compressible": false + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb","udeb"] + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"] + }, + "application/x-director": { + "source": "apache", + "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"] + }, + "application/x-dtbncx+xml": { + "source": "apache", + "extensions": ["ncx"] + }, + "application/x-dtbook+xml": { + "source": "apache", + "extensions": ["dtb"] + }, + "application/x-dtbresource+xml": { + "source": "apache", + "extensions": ["res"] + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"] + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"] + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"] + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"] + }, + "application/x-font-dos": { + "source": "apache" + }, + "application/x-font-framemaker": { + "source": "apache" + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"] + }, + "application/x-font-libgrx": { + "source": "apache" + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"] + }, + "application/x-font-otf": { + "source": "apache", + "compressible": true, + "extensions": ["otf"] + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"] + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"] + }, + "application/x-font-speedo": { + "source": "apache" + }, + "application/x-font-sunos-news": { + "source": "apache" + }, + "application/x-font-ttf": { + "source": "apache", + "compressible": true, + "extensions": ["ttf","ttc"] + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa","pfb","pfm","afm"] + }, + "application/x-font-vfont": { + "source": "apache" + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"] + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"] + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"] + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"] + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"] + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"] + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"] + }, + "application/x-gzip": { + "source": "apache" + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"] + }, + "application/x-httpd-php": { + "compressible": true, + "extensions": ["php"] + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"] + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"] + }, + "application/x-java-archive-diff": { + "source": "nginx", + "extensions": ["jardiff"] + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"] + }, + "application/x-javascript": { + "compressible": true + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"] + }, + "application/x-lua-bytecode": { + "extensions": ["luac"] + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh","lha"] + }, + "application/x-makeself": { + "source": "nginx", + "extensions": ["run"] + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"] + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc","mobi"] + }, + "application/x-mpegurl": { + "compressible": false + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"] + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"] + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"] + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"] + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"] + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"] + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"] + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"] + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"] + }, + "application/x-msdos-program": { + "extensions": ["exe"] + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe","dll","com","bat","msi"] + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb","m13","m14"] + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf","wmz","emf","emz"] + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"] + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"] + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"] + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"] + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"] + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc","cdf"] + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"] + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"] + }, + "application/x-perl": { + "source": "nginx", + "extensions": ["pl","pm"] + }, + "application/x-pilot": { + "source": "nginx", + "extensions": ["prc","pdb"] + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12","pfx"] + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b","spc"] + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"] + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"] + }, + "application/x-redhat-package-manager": { + "source": "nginx", + "extensions": ["rpm"] + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"] + }, + "application/x-sea": { + "source": "nginx", + "extensions": ["sea"] + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"] + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"] + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"] + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"] + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"] + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"] + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"] + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"] + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"] + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"] + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"] + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"] + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"] + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl","tk"] + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"] + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"] + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo","texi"] + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"] + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"] + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"] + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"] + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true + }, + "application/x-x509-ca-cert": { + "source": "apache", + "extensions": ["der","crt","pem"] + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"] + }, + "application/x-xliff+xml": { + "source": "apache", + "extensions": ["xlf"] + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"] + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"] + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] + }, + "application/x400-bp": { + "source": "iana" + }, + "application/xacml+xml": { + "source": "iana" + }, + "application/xaml+xml": { + "source": "apache", + "extensions": ["xaml"] + }, + "application/xcap-att+xml": { + "source": "iana" + }, + "application/xcap-caps+xml": { + "source": "iana" + }, + "application/xcap-diff+xml": { + "source": "iana", + "extensions": ["xdf"] + }, + "application/xcap-el+xml": { + "source": "iana" + }, + "application/xcap-error+xml": { + "source": "iana" + }, + "application/xcap-ns+xml": { + "source": "iana" + }, + "application/xcon-conference-info+xml": { + "source": "iana" + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana" + }, + "application/xenc+xml": { + "source": "iana", + "extensions": ["xenc"] + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml","xht"] + }, + "application/xhtml-voice+xml": { + "source": "apache" + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml","xsl","xsd","rng"] + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"] + }, + "application/xml-external-parsed-entity": { + "source": "iana" + }, + "application/xml-patch+xml": { + "source": "iana" + }, + "application/xmpp+xml": { + "source": "iana" + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"] + }, + "application/xproc+xml": { + "source": "apache", + "extensions": ["xpl"] + }, + "application/xslt+xml": { + "source": "iana", + "extensions": ["xslt"] + }, + "application/xspf+xml": { + "source": "apache", + "extensions": ["xspf"] + }, + "application/xv+xml": { + "source": "iana", + "extensions": ["mxml","xhvml","xvml","xvm"] + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"] + }, + "application/yang-data+json": { + "source": "iana", + "compressible": true + }, + "application/yang-data+xml": { + "source": "iana" + }, + "application/yang-patch+json": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+xml": { + "source": "iana" + }, + "application/yin+xml": { + "source": "iana", + "extensions": ["yin"] + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"] + }, + "application/zlib": { + "source": "iana" + }, + "audio/1d-interleaved-parityfec": { + "source": "iana" + }, + "audio/32kadpcm": { + "source": "iana" + }, + "audio/3gpp": { + "source": "iana", + "compressible": false, + "extensions": ["3gpp"] + }, + "audio/3gpp2": { + "source": "iana" + }, + "audio/ac3": { + "source": "iana" + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"] + }, + "audio/amr": { + "source": "iana" + }, + "audio/amr-wb": { + "source": "iana" + }, + "audio/amr-wb+": { + "source": "iana" + }, + "audio/aptx": { + "source": "iana" + }, + "audio/asc": { + "source": "iana" + }, + "audio/atrac-advanced-lossless": { + "source": "iana" + }, + "audio/atrac-x": { + "source": "iana" + }, + "audio/atrac3": { + "source": "iana" + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au","snd"] + }, + "audio/bv16": { + "source": "iana" + }, + "audio/bv32": { + "source": "iana" + }, + "audio/clearmode": { + "source": "iana" + }, + "audio/cn": { + "source": "iana" + }, + "audio/dat12": { + "source": "iana" + }, + "audio/dls": { + "source": "iana" + }, + "audio/dsr-es201108": { + "source": "iana" + }, + "audio/dsr-es202050": { + "source": "iana" + }, + "audio/dsr-es202211": { + "source": "iana" + }, + "audio/dsr-es202212": { + "source": "iana" + }, + "audio/dv": { + "source": "iana" + }, + "audio/dvi4": { + "source": "iana" + }, + "audio/eac3": { + "source": "iana" + }, + "audio/encaprtp": { + "source": "iana" + }, + "audio/evrc": { + "source": "iana" + }, + "audio/evrc-qcp": { + "source": "iana" + }, + "audio/evrc0": { + "source": "iana" + }, + "audio/evrc1": { + "source": "iana" + }, + "audio/evrcb": { + "source": "iana" + }, + "audio/evrcb0": { + "source": "iana" + }, + "audio/evrcb1": { + "source": "iana" + }, + "audio/evrcnw": { + "source": "iana" + }, + "audio/evrcnw0": { + "source": "iana" + }, + "audio/evrcnw1": { + "source": "iana" + }, + "audio/evrcwb": { + "source": "iana" + }, + "audio/evrcwb0": { + "source": "iana" + }, + "audio/evrcwb1": { + "source": "iana" + }, + "audio/evs": { + "source": "iana" + }, + "audio/fwdred": { + "source": "iana" + }, + "audio/g711-0": { + "source": "iana" + }, + "audio/g719": { + "source": "iana" + }, + "audio/g722": { + "source": "iana" + }, + "audio/g7221": { + "source": "iana" + }, + "audio/g723": { + "source": "iana" + }, + "audio/g726-16": { + "source": "iana" + }, + "audio/g726-24": { + "source": "iana" + }, + "audio/g726-32": { + "source": "iana" + }, + "audio/g726-40": { + "source": "iana" + }, + "audio/g728": { + "source": "iana" + }, + "audio/g729": { + "source": "iana" + }, + "audio/g7291": { + "source": "iana" + }, + "audio/g729d": { + "source": "iana" + }, + "audio/g729e": { + "source": "iana" + }, + "audio/gsm": { + "source": "iana" + }, + "audio/gsm-efr": { + "source": "iana" + }, + "audio/gsm-hr-08": { + "source": "iana" + }, + "audio/ilbc": { + "source": "iana" + }, + "audio/ip-mr_v2.5": { + "source": "iana" + }, + "audio/isac": { + "source": "apache" + }, + "audio/l16": { + "source": "iana" + }, + "audio/l20": { + "source": "iana" + }, + "audio/l24": { + "source": "iana", + "compressible": false + }, + "audio/l8": { + "source": "iana" + }, + "audio/lpc": { + "source": "iana" + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid","midi","kar","rmi"] + }, + "audio/mobile-xmf": { + "source": "iana" + }, + "audio/mp3": { + "compressible": false, + "extensions": ["mp3"] + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["m4a","mp4a"] + }, + "audio/mp4a-latm": { + "source": "iana" + }, + "audio/mpa": { + "source": "iana" + }, + "audio/mpa-robust": { + "source": "iana" + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] + }, + "audio/mpeg4-generic": { + "source": "iana" + }, + "audio/musepack": { + "source": "apache" + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga","ogg","spx"] + }, + "audio/opus": { + "source": "iana" + }, + "audio/parityfec": { + "source": "iana" + }, + "audio/pcma": { + "source": "iana" + }, + "audio/pcma-wb": { + "source": "iana" + }, + "audio/pcmu": { + "source": "iana" + }, + "audio/pcmu-wb": { + "source": "iana" + }, + "audio/prs.sid": { + "source": "iana" + }, + "audio/qcelp": { + "source": "iana" + }, + "audio/raptorfec": { + "source": "iana" + }, + "audio/red": { + "source": "iana" + }, + "audio/rtp-enc-aescm128": { + "source": "iana" + }, + "audio/rtp-midi": { + "source": "iana" + }, + "audio/rtploopback": { + "source": "iana" + }, + "audio/rtx": { + "source": "iana" + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"] + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"] + }, + "audio/smv": { + "source": "iana" + }, + "audio/smv-qcp": { + "source": "iana" + }, + "audio/smv0": { + "source": "iana" + }, + "audio/sp-midi": { + "source": "iana" + }, + "audio/speex": { + "source": "iana" + }, + "audio/t140c": { + "source": "iana" + }, + "audio/t38": { + "source": "iana" + }, + "audio/telephone-event": { + "source": "iana" + }, + "audio/tone": { + "source": "iana" + }, + "audio/uemclip": { + "source": "iana" + }, + "audio/ulpfec": { + "source": "iana" + }, + "audio/vdvi": { + "source": "iana" + }, + "audio/vmr-wb": { + "source": "iana" + }, + "audio/vnd.3gpp.iufp": { + "source": "iana" + }, + "audio/vnd.4sb": { + "source": "iana" + }, + "audio/vnd.audiokoz": { + "source": "iana" + }, + "audio/vnd.celp": { + "source": "iana" + }, + "audio/vnd.cisco.nse": { + "source": "iana" + }, + "audio/vnd.cmles.radio-events": { + "source": "iana" + }, + "audio/vnd.cns.anp1": { + "source": "iana" + }, + "audio/vnd.cns.inf1": { + "source": "iana" + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva","uvva"] + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"] + }, + "audio/vnd.dlna.adts": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana" + }, + "audio/vnd.dolby.mlp": { + "source": "iana" + }, + "audio/vnd.dolby.mps": { + "source": "iana" + }, + "audio/vnd.dolby.pl2": { + "source": "iana" + }, + "audio/vnd.dolby.pl2x": { + "source": "iana" + }, + "audio/vnd.dolby.pl2z": { + "source": "iana" + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana" + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"] + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"] + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"] + }, + "audio/vnd.dvb.file": { + "source": "iana" + }, + "audio/vnd.everad.plj": { + "source": "iana" + }, + "audio/vnd.hns.audio": { + "source": "iana" + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana" + }, + "audio/vnd.nortel.vbk": { + "source": "iana" + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + "source": "iana" + }, + "audio/vnd.qcelp": { + "source": "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana" + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"] + }, + "audio/vnd.rn-realaudio": { + "compressible": false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana" + }, + "audio/vnd.vmx.cvsd": { + "source": "iana" + }, + "audio/vnd.wave": { + "compressible": false + }, + "audio/vorbis": { + "source": "iana", + "compressible": false + }, + "audio/vorbis-config": { + "source": "iana" + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"] + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"] + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif","aiff","aifc"] + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"] + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"] + }, + "audio/x-m4a": { + "source": "nginx", + "extensions": ["m4a"] + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"] + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"] + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"] + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"] + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram","ra"] + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"] + }, + "audio/x-realaudio": { + "source": "nginx", + "extensions": ["ra"] + }, + "audio/x-tta": { + "source": "apache" + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"] + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"] + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"] + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"] + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"] + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"] + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"] + }, + "chemical/x-pdb": { + "source": "apache" + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"] + }, + "font/opentype": { + "compressible": true, + "extensions": ["otf"] + }, + "image/bmp": { + "source": "iana", + "compressible": true, + "extensions": ["bmp"] + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"] + }, + "image/dicom-rle": { + "source": "iana" + }, + "image/emf": { + "source": "iana" + }, + "image/fits": { + "source": "iana" + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"] + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"] + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"] + }, + "image/jls": { + "source": "iana" + }, + "image/jp2": { + "source": "iana" + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg","jpg","jpe"] + }, + "image/jpm": { + "source": "iana" + }, + "image/jpx": { + "source": "iana" + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"] + }, + "image/naplps": { + "source": "iana" + }, + "image/pjpeg": { + "compressible": false + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"] + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif"] + }, + "image/prs.pti": { + "source": "iana" + }, + "image/pwg-raster": { + "source": "iana" + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"] + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg","svgz"] + }, + "image/t38": { + "source": "iana" + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tiff","tif"] + }, + "image/tiff-fx": { + "source": "iana" + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana" + }, + "image/vnd.cns.inf2": { + "source": "iana" + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi","uvvi","uvg","uvvg"] + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu","djv"] + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"] + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"] + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"] + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"] + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana" + }, + "image/vnd.microsoft.icon": { + "source": "iana" + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.mozilla.apng": { + "source": "iana" + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"] + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"] + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"] + }, + "image/vnd.radiance": { + "source": "iana" + }, + "image/vnd.sealed.png": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana" + }, + "image/vnd.svf": { + "source": "iana" + }, + "image/vnd.tencent.tap": { + "source": "iana" + }, + "image/vnd.valve.source.texture": { + "source": "iana" + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"] + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"] + }, + "image/vnd.zbrush.pcx": { + "source": "iana" + }, + "image/webp": { + "source": "apache", + "extensions": ["webp"] + }, + "image/wmf": { + "source": "iana" + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"] + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"] + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"] + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh","fhc","fh4","fh5","fh7"] + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"] + }, + "image/x-jng": { + "source": "nginx", + "extensions": ["jng"] + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"] + }, + "image/x-ms-bmp": { + "source": "nginx", + "compressible": true, + "extensions": ["bmp"] + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"] + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic","pct"] + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"] + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"] + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"] + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"] + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"] + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"] + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"] + }, + "image/x-xcf": { + "compressible": false + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"] + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"] + }, + "message/cpim": { + "source": "iana" + }, + "message/delivery-status": { + "source": "iana" + }, + "message/disposition-notification": { + "source": "iana" + }, + "message/external-body": { + "source": "iana" + }, + "message/feedback-report": { + "source": "iana" + }, + "message/global": { + "source": "iana" + }, + "message/global-delivery-status": { + "source": "iana" + }, + "message/global-disposition-notification": { + "source": "iana" + }, + "message/global-headers": { + "source": "iana" + }, + "message/http": { + "source": "iana", + "compressible": false + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true + }, + "message/news": { + "source": "iana" + }, + "message/partial": { + "source": "iana", + "compressible": false + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml","mime"] + }, + "message/s-http": { + "source": "iana" + }, + "message/sip": { + "source": "iana" + }, + "message/sipfrag": { + "source": "iana" + }, + "message/tracking-status": { + "source": "iana" + }, + "message/vnd.si.simp": { + "source": "iana" + }, + "message/vnd.wfa.wsc": { + "source": "iana" + }, + "model/gltf+json": { + "source": "iana", + "compressible": true + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs","iges"] + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh","mesh","silo"] + }, + "model/vnd.collada+xml": { + "source": "iana", + "extensions": ["dae"] + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"] + }, + "model/vnd.flatland.3dml": { + "source": "iana" + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"] + }, + "model/vnd.gs-gdl": { + "source": "apache" + }, + "model/vnd.gs.gdl": { + "source": "iana" + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"] + }, + "model/vnd.moml+xml": { + "source": "iana" + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"] + }, + "model/vnd.opengex": { + "source": "iana" + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana" + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana" + }, + "model/vnd.rosette.annotated-data-model": { + "source": "iana" + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana" + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"] + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl","vrml"] + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db","x3dbz"] + }, + "model/x3d+fastinfoset": { + "source": "iana" + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv","x3dvz"] + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d","x3dz"] + }, + "model/x3d-vrml": { + "source": "iana" + }, + "multipart/alternative": { + "source": "iana", + "compressible": false + }, + "multipart/appledouble": { + "source": "iana" + }, + "multipart/byteranges": { + "source": "iana" + }, + "multipart/digest": { + "source": "iana" + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false + }, + "multipart/form-data": { + "source": "iana", + "compressible": false + }, + "multipart/header-set": { + "source": "iana" + }, + "multipart/mixed": { + "source": "iana", + "compressible": false + }, + "multipart/parallel": { + "source": "iana" + }, + "multipart/related": { + "source": "iana", + "compressible": false + }, + "multipart/report": { + "source": "iana" + }, + "multipart/signed": { + "source": "iana", + "compressible": false + }, + "multipart/voice-message": { + "source": "iana" + }, + "multipart/x-mixed-replace": { + "source": "iana" + }, + "text/1d-interleaved-parityfec": { + "source": "iana" + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache","manifest"] + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics","ifb"] + }, + "text/calender": { + "compressible": true + }, + "text/cmd": { + "compressible": true + }, + "text/coffeescript": { + "extensions": ["coffee","litcoffee"] + }, + "text/css": { + "source": "iana", + "compressible": true, + "extensions": ["css"] + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"] + }, + "text/csv-schema": { + "source": "iana" + }, + "text/directory": { + "source": "iana" + }, + "text/dns": { + "source": "iana" + }, + "text/ecmascript": { + "source": "iana" + }, + "text/encaprtp": { + "source": "iana" + }, + "text/enriched": { + "source": "iana" + }, + "text/fwdred": { + "source": "iana" + }, + "text/grammar-ref-list": { + "source": "iana" + }, + "text/hjson": { + "extensions": ["hjson"] + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html","htm","shtml"] + }, + "text/jade": { + "extensions": ["jade"] + }, + "text/javascript": { + "source": "iana", + "compressible": true + }, + "text/jcr-cnd": { + "source": "iana" + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"] + }, + "text/less": { + "extensions": ["less"] + }, + "text/markdown": { + "source": "iana" + }, + "text/mathml": { + "source": "nginx", + "extensions": ["mml"] + }, + "text/mizar": { + "source": "iana" + }, + "text/n3": { + "source": "iana", + "compressible": true, + "extensions": ["n3"] + }, + "text/parameters": { + "source": "iana" + }, + "text/parityfec": { + "source": "iana" + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt","text","conf","def","list","log","in","ini"] + }, + "text/provenance-notation": { + "source": "iana" + }, + "text/prs.fallenstein.rst": { + "source": "iana" + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"] + }, + "text/prs.prop.logic": { + "source": "iana" + }, + "text/raptorfec": { + "source": "iana" + }, + "text/red": { + "source": "iana" + }, + "text/rfc822-headers": { + "source": "iana" + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"] + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "text/rtp-enc-aescm128": { + "source": "iana" + }, + "text/rtploopback": { + "source": "iana" + }, + "text/rtx": { + "source": "iana" + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml","sgm"] + }, + "text/slim": { + "extensions": ["slim","slm"] + }, + "text/stylus": { + "extensions": ["stylus","styl"] + }, + "text/t140": { + "source": "iana" + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"] + }, + "text/troff": { + "source": "iana", + "extensions": ["t","tr","roff","man","me","ms"] + }, + "text/turtle": { + "source": "iana", + "extensions": ["ttl"] + }, + "text/ulpfec": { + "source": "iana" + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri","uris","urls"] + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"] + }, + "text/vnd.a": { + "source": "iana" + }, + "text/vnd.abc": { + "source": "iana" + }, + "text/vnd.ascii-art": { + "source": "iana" + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"] + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"] + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"] + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"] + }, + "text/vnd.debian.copyright": { + "source": "iana" + }, + "text/vnd.dmclientscript": { + "source": "iana" + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana" + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"] + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"] + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"] + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"] + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"] + }, + "text/vnd.iptc.newsml": { + "source": "iana" + }, + "text/vnd.iptc.nitf": { + "source": "iana" + }, + "text/vnd.latex-z": { + "source": "iana" + }, + "text/vnd.motorola.reflex": { + "source": "iana" + }, + "text/vnd.ms-mediapackage": { + "source": "iana" + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana" + }, + "text/vnd.si.uricatalogue": { + "source": "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "extensions": ["jad"] + }, + "text/vnd.trolltech.linguist": { + "source": "iana" + }, + "text/vnd.wap.si": { + "source": "iana" + }, + "text/vnd.wap.sl": { + "source": "iana" + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"] + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"] + }, + "text/vtt": { + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"] + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s","asm"] + }, + "text/x-c": { + "source": "apache", + "extensions": ["c","cc","cxx","cpp","h","hh","dic"] + }, + "text/x-component": { + "source": "nginx", + "extensions": ["htc"] + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f","for","f77","f90"] + }, + "text/x-gwt-rpc": { + "compressible": true + }, + "text/x-handlebars-template": { + "extensions": ["hbs"] + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"] + }, + "text/x-jquery-tmpl": { + "compressible": true + }, + "text/x-lua": { + "extensions": ["lua"] + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["markdown","md","mkd"] + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"] + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"] + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p","pas"] + }, + "text/x-processing": { + "compressible": true, + "extensions": ["pde"] + }, + "text/x-sass": { + "extensions": ["sass"] + }, + "text/x-scss": { + "extensions": ["scss"] + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"] + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"] + }, + "text/x-suse-ymp": { + "compressible": true, + "extensions": ["ymp"] + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"] + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"] + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"] + }, + "text/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml"] + }, + "text/xml-external-parsed-entity": { + "source": "iana" + }, + "text/yaml": { + "extensions": ["yaml","yml"] + }, + "video/1d-interleaved-parityfec": { + "source": "apache" + }, + "video/3gpp": { + "source": "apache", + "extensions": ["3gp","3gpp"] + }, + "video/3gpp-tt": { + "source": "apache" + }, + "video/3gpp2": { + "source": "apache", + "extensions": ["3g2"] + }, + "video/bmpeg": { + "source": "apache" + }, + "video/bt656": { + "source": "apache" + }, + "video/celb": { + "source": "apache" + }, + "video/dv": { + "source": "apache" + }, + "video/encaprtp": { + "source": "apache" + }, + "video/h261": { + "source": "apache", + "extensions": ["h261"] + }, + "video/h263": { + "source": "apache", + "extensions": ["h263"] + }, + "video/h263-1998": { + "source": "apache" + }, + "video/h263-2000": { + "source": "apache" + }, + "video/h264": { + "source": "apache", + "extensions": ["h264"] + }, + "video/h264-rcdo": { + "source": "apache" + }, + "video/h264-svc": { + "source": "apache" + }, + "video/h265": { + "source": "apache" + }, + "video/iso.segment": { + "source": "apache" + }, + "video/jpeg": { + "source": "apache", + "extensions": ["jpgv"] + }, + "video/jpeg2000": { + "source": "apache" + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm","jpgm"] + }, + "video/mj2": { + "source": "apache", + "extensions": ["mj2","mjp2"] + }, + "video/mp1s": { + "source": "apache" + }, + "video/mp2p": { + "source": "apache" + }, + "video/mp2t": { + "source": "apache", + "extensions": ["ts"] + }, + "video/mp4": { + "source": "apache", + "compressible": false, + "extensions": ["mp4","mp4v","mpg4"] + }, + "video/mp4v-es": { + "source": "apache" + }, + "video/mpeg": { + "source": "apache", + "compressible": false, + "extensions": ["mpeg","mpg","mpe","m1v","m2v"] + }, + "video/mpeg4-generic": { + "source": "apache" + }, + "video/mpv": { + "source": "apache" + }, + "video/nv": { + "source": "apache" + }, + "video/ogg": { + "source": "apache", + "compressible": false, + "extensions": ["ogv"] + }, + "video/parityfec": { + "source": "apache" + }, + "video/pointer": { + "source": "apache" + }, + "video/quicktime": { + "source": "apache", + "compressible": false, + "extensions": ["qt","mov"] + }, + "video/raptorfec": { + "source": "apache" + }, + "video/raw": { + "source": "apache" + }, + "video/rtp-enc-aescm128": { + "source": "apache" + }, + "video/rtploopback": { + "source": "apache" + }, + "video/rtx": { + "source": "apache" + }, + "video/smpte292m": { + "source": "apache" + }, + "video/ulpfec": { + "source": "apache" + }, + "video/vc1": { + "source": "apache" + }, + "video/vnd.cctv": { + "source": "apache" + }, + "video/vnd.dece.hd": { + "source": "apache", + "extensions": ["uvh","uvvh"] + }, + "video/vnd.dece.mobile": { + "source": "apache", + "extensions": ["uvm","uvvm"] + }, + "video/vnd.dece.mp4": { + "source": "apache" + }, + "video/vnd.dece.pd": { + "source": "apache", + "extensions": ["uvp","uvvp"] + }, + "video/vnd.dece.sd": { + "source": "apache", + "extensions": ["uvs","uvvs"] + }, + "video/vnd.dece.video": { + "source": "apache", + "extensions": ["uvv","uvvv"] + }, + "video/vnd.directv.mpeg": { + "source": "apache" + }, + "video/vnd.directv.mpeg-tts": { + "source": "apache" + }, + "video/vnd.dlna.mpeg-tts": { + "source": "apache" + }, + "video/vnd.dvb.file": { + "source": "apache", + "extensions": ["dvb"] + }, + "video/vnd.fvt": { + "source": "apache", + "extensions": ["fvt"] + }, + "video/vnd.hns.video": { + "source": "apache" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "apache" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "apache" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "apache" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "apache" + }, + "video/vnd.iptvforum.ttsavc": { + "source": "apache" + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "apache" + }, + "video/vnd.motorola.video": { + "source": "apache" + }, + "video/vnd.motorola.videop": { + "source": "apache" + }, + "video/vnd.mpegurl": { + "source": "apache", + "extensions": ["mxu","m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + "source": "apache", + "extensions": ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "apache" + }, + "video/vnd.nokia.videovoip": { + "source": "apache" + }, + "video/vnd.objectvideo": { + "source": "apache" + }, + "video/vnd.radgamettools.bink": { + "source": "apache" + }, + "video/vnd.radgamettools.smacker": { + "source": "apache" + }, + "video/vnd.sealed.mpeg1": { + "source": "apache" + }, + "video/vnd.sealed.mpeg4": { + "source": "apache" + }, + "video/vnd.sealed.swf": { + "source": "apache" + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "apache" + }, + "video/vnd.uvvu.mp4": { + "source": "apache", + "extensions": ["uvu","uvvu"] + }, + "video/vnd.vivo": { + "source": "apache", + "extensions": ["viv"] + }, + "video/vp8": { + "source": "apache" + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"] + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"] + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"] + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"] + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"] + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv","mk3d","mks"] + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"] + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf","asx"] + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"] + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"] + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"] + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"] + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"] + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"] + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"] + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"] + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"] + }, + "x-shader/x-fragment": { + "compressible": true + }, + "x-shader/x-vertex": { + "compressible": true + } +} diff --git a/node_modules/mime-db/index.js b/node_modules/mime-db/index.js new file mode 100644 index 0000000..551031f --- /dev/null +++ b/node_modules/mime-db/index.js @@ -0,0 +1,11 @@ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = require('./db.json') diff --git a/node_modules/mime-db/package.json b/node_modules/mime-db/package.json new file mode 100644 index 0000000..90b473d --- /dev/null +++ b/node_modules/mime-db/package.json @@ -0,0 +1,138 @@ +{ + "_args": [ + [ + { + "raw": "mime-db@~1.26.0", + "scope": null, + "escapedName": "mime-db", + "name": "mime-db", + "rawSpec": "~1.26.0", + "spec": ">=1.26.0 <1.27.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/mime-types" + ] + ], + "_from": "mime-db@>=1.26.0 <1.27.0", + "_id": "mime-db@1.26.0", + "_inCache": true, + "_location": "/mime-db", + "_nodeVersion": "4.6.1", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/mime-db-1.26.0.tgz_1484453096877_0.39498970191925764" + }, + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "2.15.9", + "_phantomChildren": {}, + "_requested": { + "raw": "mime-db@~1.26.0", + "scope": null, + "escapedName": "mime-db", + "name": "mime-db", + "rawSpec": "~1.26.0", + "spec": ">=1.26.0 <1.27.0", + "type": "range" + }, + "_requiredBy": [ + "/mime-types" + ], + "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz", + "_shasum": "eaffcd0e4fc6935cf8134da246e2e6c35305adff", + "_shrinkwrap": null, + "_spec": "mime-db@~1.26.0", + "_where": "/home/burchettm/statsbot/node_modules/mime-types", + "bugs": { + "url": "https://github.com/jshttp/mime-db/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + { + "name": "Robert Kieffer", + "email": "robert@broofa.com", + "url": "http://github.com/broofa" + } + ], + "dependencies": {}, + "description": "Media Type Database", + "devDependencies": { + "bluebird": "3.4.7", + "co": "4.6.0", + "cogent": "1.0.1", + "csv-parse": "1.1.9", + "eslint": "3.13.1", + "eslint-config-standard": "6.2.1", + "eslint-plugin-promise": "3.3.0", + "eslint-plugin-standard": "2.0.1", + "gnode": "0.1.2", + "istanbul": "0.4.5", + "mocha": "1.21.5", + "raw-body": "2.2.0", + "stream-to-array": "2.3.0" + }, + "directories": {}, + "dist": { + "shasum": "eaffcd0e4fc6935cf8134da246e2e6c35305adff", + "tarball": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "gitHead": "1d9ff30e45b07a506a20f25df3a3c7106d219e24", + "homepage": "https://github.com/jshttp/mime-db#readme", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "license": "MIT", + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + } + ], + "name": "mime-db", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/mime-db.git" + }, + "scripts": { + "build": "node scripts/build", + "fetch": "gnode scripts/fetch-apache && gnode scripts/fetch-iana && gnode scripts/fetch-nginx", + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", + "update": "npm run fetch && npm run build" + }, + "version": "1.26.0" +} diff --git a/node_modules/mime-types/HISTORY.md b/node_modules/mime-types/HISTORY.md new file mode 100644 index 0000000..85b59f0 --- /dev/null +++ b/node_modules/mime-types/HISTORY.md @@ -0,0 +1,216 @@ +2.1.14 / 2017-01-14 +=================== + + * deps: mime-db@~1.26.0 + - Add new mime types + +2.1.13 / 2016-11-18 +=================== + + * deps: mime-db@~1.25.0 + - Add new mime types + +2.1.12 / 2016-09-18 +=================== + + * deps: mime-db@~1.24.0 + - Add new mime types + - Add `audio/mp3` + +2.1.11 / 2016-05-01 +=================== + + * deps: mime-db@~1.23.0 + - Add new mime types + +2.1.10 / 2016-02-15 +=================== + + * deps: mime-db@~1.22.0 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +2.1.9 / 2016-01-06 +================== + + * deps: mime-db@~1.21.0 + - Add new mime types + +2.1.8 / 2015-11-30 +================== + + * deps: mime-db@~1.20.0 + - Add new mime types + +2.1.7 / 2015-09-20 +================== + + * deps: mime-db@~1.19.0 + - Add new mime types + +2.1.6 / 2015-09-03 +================== + + * deps: mime-db@~1.18.0 + - Add new mime types + +2.1.5 / 2015-08-20 +================== + + * deps: mime-db@~1.17.0 + - Add new mime types + +2.1.4 / 2015-07-30 +================== + + * deps: mime-db@~1.16.0 + - Add new mime types + +2.1.3 / 2015-07-13 +================== + + * deps: mime-db@~1.15.0 + - Add new mime types + +2.1.2 / 2015-06-25 +================== + + * deps: mime-db@~1.14.0 + - Add new mime types + +2.1.1 / 2015-06-08 +================== + + * perf: fix deopt during mapping + +2.1.0 / 2015-06-07 +================== + + * Fix incorrectly treating extension-less file name as extension + - i.e. `'path/to/json'` will no longer return `application/json` + * Fix `.charset(type)` to accept parameters + * Fix `.charset(type)` to match case-insensitive + * Improve generation of extension to MIME mapping + * Refactor internals for readability and no argument reassignment + * Prefer `application/*` MIME types from the same source + * Prefer any type over `application/octet-stream` + * deps: mime-db@~1.13.0 + - Add nginx as a source + - Add new mime types + +2.0.14 / 2015-06-06 +=================== + + * deps: mime-db@~1.12.0 + - Add new mime types + +2.0.13 / 2015-05-31 +=================== + + * deps: mime-db@~1.11.0 + - Add new mime types + +2.0.12 / 2015-05-19 +=================== + + * deps: mime-db@~1.10.0 + - Add new mime types + +2.0.11 / 2015-05-05 +=================== + + * deps: mime-db@~1.9.1 + - Add new mime types + +2.0.10 / 2015-03-13 +=================== + + * deps: mime-db@~1.8.0 + - Add new mime types + +2.0.9 / 2015-02-09 +================== + + * deps: mime-db@~1.7.0 + - Add new mime types + - Community extensions ownership transferred from `node-mime` + +2.0.8 / 2015-01-29 +================== + + * deps: mime-db@~1.6.0 + - Add new mime types + +2.0.7 / 2014-12-30 +================== + + * deps: mime-db@~1.5.0 + - Add new mime types + - Fix various invalid MIME type entries + +2.0.6 / 2014-12-30 +================== + + * deps: mime-db@~1.4.0 + - Add new mime types + - Fix various invalid MIME type entries + - Remove example template MIME types + +2.0.5 / 2014-12-29 +================== + + * deps: mime-db@~1.3.1 + - Fix missing extensions + +2.0.4 / 2014-12-10 +================== + + * deps: mime-db@~1.3.0 + - Add new mime types + +2.0.3 / 2014-11-09 +================== + + * deps: mime-db@~1.2.0 + - Add new mime types + +2.0.2 / 2014-09-28 +================== + + * deps: mime-db@~1.1.0 + - Add new mime types + - Add additional compressible + - Update charsets + +2.0.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + +2.0.0 / 2014-09-02 +================== + + * Use `mime-db` + * Remove `.define()` + +1.0.2 / 2014-08-04 +================== + + * Set charset=utf-8 for `text/javascript` + +1.0.1 / 2014-06-24 +================== + + * Add `text/jsx` type + +1.0.0 / 2014-05-12 +================== + + * Return `false` for unknown types + * Set charset=utf-8 for `application/json` + +0.1.0 / 2014-05-02 +================== + + * Initial release diff --git a/node_modules/mime-types/LICENSE b/node_modules/mime-types/LICENSE new file mode 100644 index 0000000..0616607 --- /dev/null +++ b/node_modules/mime-types/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mime-types/README.md b/node_modules/mime-types/README.md new file mode 100644 index 0000000..e77d615 --- /dev/null +++ b/node_modules/mime-types/README.md @@ -0,0 +1,103 @@ +# mime-types + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [node-mime](https://github.com/broofa/node-mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`, + so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db) +- No `.define()` functionality + +Otherwise, the API is compatible. + +## Install + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://github.com/jshttp/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/x-markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('folder/.htaccess') // false + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/x-markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/mime-types.svg +[npm-url]: https://npmjs.org/package/mime-types +[node-version-image]: https://img.shields.io/node/v/mime-types.svg +[node-version-url]: https://nodejs.org/en/download/ +[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg +[travis-url]: https://travis-ci.org/jshttp/mime-types +[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types +[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg +[downloads-url]: https://npmjs.org/package/mime-types diff --git a/node_modules/mime-types/index.js b/node_modules/mime-types/index.js new file mode 100644 index 0000000..9226ca5 --- /dev/null +++ b/node_modules/mime-types/index.js @@ -0,0 +1,188 @@ +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var db = require('mime-db') +var extname = require('path').extname + +/** + * Module variables. + * @private + */ + +var extractTypeRegExp = /^\s*([^;\s]*)(?:;|\s|$)/ +var textTypeRegExp = /^text\//i + +/** + * Module exports. + * @public + */ + +exports.charset = charset +exports.charsets = { lookup: charset } +exports.contentType = contentType +exports.extension = extension +exports.extensions = Object.create(null) +exports.lookup = lookup +exports.types = Object.create(null) + +// Populate the extensions/types maps +populateMaps(exports.extensions, exports.types) + +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function charset (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = extractTypeRegExp.exec(type) + var mime = match && db[match[1].toLowerCase()] + + if (mime && mime.charset) { + return mime.charset + } + + // default text/* to utf-8 + if (match && textTypeRegExp.test(match[1])) { + return 'UTF-8' + } + + return false +} + +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ + +function contentType (str) { + // TODO: should this even be in this module? + if (!str || typeof str !== 'string') { + return false + } + + var mime = str.indexOf('/') === -1 + ? exports.lookup(str) + : str + + if (!mime) { + return false + } + + // TODO: use content-type or other module + if (mime.indexOf('charset') === -1) { + var charset = exports.charset(mime) + if (charset) mime += '; charset=' + charset.toLowerCase() + } + + return mime +} + +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function extension (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = extractTypeRegExp.exec(type) + + // get extensions + var exts = match && exports.extensions[match[1].toLowerCase()] + + if (!exts || !exts.length) { + return false + } + + return exts[0] +} + +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ + +function lookup (path) { + if (!path || typeof path !== 'string') { + return false + } + + // get the extension ("ext" or ".ext" or full path) + var extension = extname('x.' + path) + .toLowerCase() + .substr(1) + + if (!extension) { + return false + } + + return exports.types[extension] || false +} + +/** + * Populate the extensions and types maps. + * @private + */ + +function populateMaps (extensions, types) { + // source preference (least -> most) + var preference = ['nginx', 'apache', undefined, 'iana'] + + Object.keys(db).forEach(function forEachMimeType (type) { + var mime = db[type] + var exts = mime.extensions + + if (!exts || !exts.length) { + return + } + + // mime -> extensions + extensions[type] = exts + + // extension -> mime + for (var i = 0; i < exts.length; i++) { + var extension = exts[i] + + if (types[extension]) { + var from = preference.indexOf(db[types[extension]].source) + var to = preference.indexOf(mime.source) + + if (types[extension] !== 'application/octet-stream' && + from > to || (from === to && types[extension].substr(0, 12) === 'application/')) { + // skip the remapping + continue + } + } + + // set the extension -> mime + types[extension] = type + } + }) +} diff --git a/node_modules/mime-types/package.json b/node_modules/mime-types/package.json new file mode 100644 index 0000000..0f6ab93 --- /dev/null +++ b/node_modules/mime-types/package.json @@ -0,0 +1,127 @@ +{ + "_args": [ + [ + { + "raw": "mime-types@^2.1.3", + "scope": null, + "escapedName": "mime-types", + "name": "mime-types", + "rawSpec": "^2.1.3", + "spec": ">=2.1.3 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/form-data" + ] + ], + "_from": "mime-types@>=2.1.3 <3.0.0", + "_id": "mime-types@2.1.14", + "_inCache": true, + "_location": "/mime-types", + "_nodeVersion": "4.6.1", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/mime-types-2.1.14.tgz_1484458141358_0.7563668976072222" + }, + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "2.15.9", + "_phantomChildren": {}, + "_requested": { + "raw": "mime-types@^2.1.3", + "scope": null, + "escapedName": "mime-types", + "name": "mime-types", + "rawSpec": "^2.1.3", + "spec": ">=2.1.3 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/form-data" + ], + "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz", + "_shasum": "f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee", + "_shrinkwrap": null, + "_spec": "mime-types@^2.1.3", + "_where": "/home/burchettm/statsbot/node_modules/form-data", + "bugs": { + "url": "https://github.com/jshttp/mime-types/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": "https://searchbeam.jit.su" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "mime-db": "~1.26.0" + }, + "description": "The ultimate javascript content-type utility.", + "devDependencies": { + "eslint": "3.13.1", + "eslint-config-standard": "6.2.1", + "eslint-plugin-promise": "3.4.0", + "eslint-plugin-standard": "2.0.1", + "istanbul": "0.4.5", + "mocha": "1.21.5" + }, + "directories": {}, + "dist": { + "shasum": "f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee", + "tarball": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "gitHead": "d7d15e50fe6b3a2da79d855015d25efa50e9f157", + "homepage": "https://github.com/jshttp/mime-types#readme", + "keywords": [ + "mime", + "types" + ], + "license": "MIT", + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "fishrock123", + "email": "fishrock123@rocketmail.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + } + ], + "name": "mime-types", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/mime-types.git" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec test/test.js", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js" + }, + "version": "2.1.14" +} diff --git a/node_modules/mime/.npmignore b/node_modules/mime/.npmignore new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/mime/LICENSE b/node_modules/mime/LICENSE new file mode 100644 index 0000000..451fc45 --- /dev/null +++ b/node_modules/mime/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010 Benjamin Thomas, Robert Kieffer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/mime/README.md b/node_modules/mime/README.md new file mode 100644 index 0000000..506fbe5 --- /dev/null +++ b/node_modules/mime/README.md @@ -0,0 +1,90 @@ +# mime + +Comprehensive MIME type mapping API based on mime-db module. + +## Install + +Install with [npm](http://github.com/isaacs/npm): + + npm install mime + +## Contributing / Testing + + npm run test + +## Command Line + + mime [path_string] + +E.g. + + > mime scripts/jquery.js + application/javascript + +## API - Queries + +### mime.lookup(path) +Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. + +```js +var mime = require('mime'); + +mime.lookup('/path/to/file.txt'); // => 'text/plain' +mime.lookup('file.txt'); // => 'text/plain' +mime.lookup('.TXT'); // => 'text/plain' +mime.lookup('htm'); // => 'text/html' +``` + +### mime.default_type +Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) + +### mime.extension(type) +Get the default extension for `type` + +```js +mime.extension('text/html'); // => 'html' +mime.extension('application/octet-stream'); // => 'bin' +``` + +### mime.charsets.lookup() + +Map mime-type to charset + +```js +mime.charsets.lookup('text/plain'); // => 'UTF-8' +``` + +(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) + +## API - Defining Custom Types + +Custom type mappings can be added on a per-project basis via the following APIs. + +### mime.define() + +Add custom mime/extension mappings + +```js +mime.define({ + 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], + 'application/x-my-type': ['x-mt', 'x-mtt'], + // etc ... +}); + +mime.lookup('x-sft'); // => 'text/x-some-format' +``` + +The first entry in the extensions array is returned by `mime.extension()`. E.g. + +```js +mime.extension('text/x-some-format'); // => 'x-sf' +``` + +### mime.load(filepath) + +Load mappings from an Apache ".types" format file + +```js +mime.load('./my_project.types'); +``` +The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/mime/build/build.js b/node_modules/mime/build/build.js new file mode 100644 index 0000000..ed5313e --- /dev/null +++ b/node_modules/mime/build/build.js @@ -0,0 +1,11 @@ +var db = require('mime-db'); + +var mapByType = {}; +Object.keys(db).forEach(function(key) { + var extensions = db[key].extensions; + if (extensions) { + mapByType[key] = extensions; + } +}); + +console.log(JSON.stringify(mapByType)); diff --git a/node_modules/mime/build/test.js b/node_modules/mime/build/test.js new file mode 100644 index 0000000..58b9ba7 --- /dev/null +++ b/node_modules/mime/build/test.js @@ -0,0 +1,57 @@ +/** + * Usage: node test.js + */ + +var mime = require('../mime'); +var assert = require('assert'); +var path = require('path'); + +// +// Test mime lookups +// + +assert.equal('text/plain', mime.lookup('text.txt')); // normal file +assert.equal('text/plain', mime.lookup('TEXT.TXT')); // uppercase +assert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file +assert.equal('text/plain', mime.lookup('.text.txt')); // hidden file +assert.equal('text/plain', mime.lookup('.txt')); // nameless +assert.equal('text/plain', mime.lookup('txt')); // extension-only +assert.equal('text/plain', mime.lookup('/txt')); // extension-less () +assert.equal('text/plain', mime.lookup('\\txt')); // Windows, extension-less +assert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized +assert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default + +// +// Test extensions +// + +assert.equal('txt', mime.extension(mime.types.text)); +assert.equal('html', mime.extension(mime.types.htm)); +assert.equal('bin', mime.extension('application/octet-stream')); +assert.equal('bin', mime.extension('application/octet-stream ')); +assert.equal('html', mime.extension(' text/html; charset=UTF-8')); +assert.equal('html', mime.extension('text/html; charset=UTF-8 ')); +assert.equal('html', mime.extension('text/html; charset=UTF-8')); +assert.equal('html', mime.extension('text/html ; charset=UTF-8')); +assert.equal('html', mime.extension('text/html;charset=UTF-8')); +assert.equal('html', mime.extension('text/Html;charset=UTF-8')); +assert.equal(undefined, mime.extension('unrecognized')); + +// +// Test node.types lookups +// + +assert.equal('application/font-woff', mime.lookup('file.woff')); +assert.equal('application/octet-stream', mime.lookup('file.buffer')); +assert.equal('audio/mp4', mime.lookup('file.m4a')); +assert.equal('font/opentype', mime.lookup('file.otf')); + +// +// Test charsets +// + +assert.equal('UTF-8', mime.charsets.lookup('text/plain')); +assert.equal(undefined, mime.charsets.lookup(mime.types.js)); +assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); + +console.log('\nAll tests passed'); diff --git a/node_modules/mime/cli.js b/node_modules/mime/cli.js new file mode 100755 index 0000000..20b1ffe --- /dev/null +++ b/node_modules/mime/cli.js @@ -0,0 +1,8 @@ +#!/usr/bin/env node + +var mime = require('./mime.js'); +var file = process.argv[2]; +var type = mime.lookup(file); + +process.stdout.write(type + '\n'); + diff --git a/node_modules/mime/mime.js b/node_modules/mime/mime.js new file mode 100644 index 0000000..341b6a5 --- /dev/null +++ b/node_modules/mime/mime.js @@ -0,0 +1,108 @@ +var path = require('path'); +var fs = require('fs'); + +function Mime() { + // Map of extension -> mime type + this.types = Object.create(null); + + // Map of mime type -> extension + this.extensions = Object.create(null); +} + +/** + * Define mimetype -> extension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * @param map (Object) type definitions + */ +Mime.prototype.define = function (map) { + for (var type in map) { + var exts = map[type]; + for (var i = 0; i < exts.length; i++) { + if (process.env.DEBUG_MIME && this.types[exts]) { + console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + + this.types[exts] + ' to ' + type); + } + + this.types[exts[i]] = type; + } + + // Default extension is the first one we encounter + if (!this.extensions[type]) { + this.extensions[type] = exts[0]; + } + } +}; + +/** + * Load an Apache2-style ".types" file + * + * This may be called multiple times (it's expected). Where files declare + * overlapping types/extensions, the last file wins. + * + * @param file (String) path of file to load. + */ +Mime.prototype.load = function(file) { + this._loading = file; + // Read file and split into lines + var map = {}, + content = fs.readFileSync(file, 'ascii'), + lines = content.split(/[\r\n]+/); + + lines.forEach(function(line) { + // Clean up whitespace/comments, and split into fields + var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); + map[fields.shift()] = fields; + }); + + this.define(map); + + this._loading = null; +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.lookup = function(path, fallback) { + var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); + + return this.types[ext] || fallback || this.default_type; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.extension = function(mimeType) { + var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); + return this.extensions[type]; +}; + +// Default instance +var mime = new Mime(); + +// Define built-in types +mime.define(require('./types.json')); + +// Default type +mime.default_type = mime.lookup('bin'); + +// +// Additional API specific to the default instance +// + +mime.Mime = Mime; + +/** + * Lookup a charset based on mime type. + */ +mime.charsets = { + lookup: function(mimeType, fallback) { + // Assume text types are utf8 + return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; + } +}; + +module.exports = mime; diff --git a/node_modules/mime/package.json b/node_modules/mime/package.json new file mode 100644 index 0000000..cfd63c4 --- /dev/null +++ b/node_modules/mime/package.json @@ -0,0 +1,106 @@ +{ + "_args": [ + [ + { + "raw": "mime@1.3.4", + "scope": null, + "escapedName": "mime", + "name": "mime", + "rawSpec": "1.3.4", + "spec": "1.3.4", + "type": "version" + }, + "/home/burchettm/statsbot/node_modules/superagent" + ] + ], + "_from": "mime@1.3.4", + "_id": "mime@1.3.4", + "_inCache": true, + "_location": "/mime", + "_npmUser": { + "name": "broofa", + "email": "robert@broofa.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "mime@1.3.4", + "scope": null, + "escapedName": "mime", + "name": "mime", + "rawSpec": "1.3.4", + "spec": "1.3.4", + "type": "version" + }, + "_requiredBy": [ + "/superagent" + ], + "_resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "_shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53", + "_shrinkwrap": null, + "_spec": "mime@1.3.4", + "_where": "/home/burchettm/statsbot/node_modules/superagent", + "author": { + "name": "Robert Kieffer", + "email": "robert@broofa.com", + "url": "http://github.com/broofa" + }, + "bin": { + "mime": "cli.js" + }, + "bugs": { + "url": "https://github.com/broofa/node-mime/issues" + }, + "contributors": [ + { + "name": "Benjamin Thomas", + "email": "benjamin@benjaminthomas.org", + "url": "http://github.com/bentomas" + } + ], + "dependencies": {}, + "description": "A comprehensive library for mime-type mapping", + "devDependencies": { + "mime-db": "^1.2.0" + }, + "directories": {}, + "dist": { + "shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53", + "tarball": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz" + }, + "gitHead": "1628f6e0187095009dcef4805c3a49706f137974", + "homepage": "https://github.com/broofa/node-mime", + "keywords": [ + "util", + "mime" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/broofa/node-mime/master/LICENSE" + } + ], + "main": "mime.js", + "maintainers": [ + { + "name": "broofa", + "email": "robert@broofa.com" + }, + { + "name": "bentomas", + "email": "benjamin@benjaminthomas.org" + } + ], + "name": "mime", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "url": "git+https://github.com/broofa/node-mime.git", + "type": "git" + }, + "scripts": { + "prepublish": "node build/build.js > types.json", + "test": "node build/test.js" + }, + "version": "1.3.4" +} diff --git a/node_modules/mime/types.json b/node_modules/mime/types.json new file mode 100644 index 0000000..c674b1c --- /dev/null +++ b/node_modules/mime/types.json @@ -0,0 +1 @@ +{"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mdp"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":["woff"],"application/font-woff2":["woff2"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["dmg"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-otf":["otf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-ttf":["ttf","ttc"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["iso"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdownload":["exe","dll","com","bat","msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","wmz","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-nzb":["nzb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-research-info-systems":["ris"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp4":["mp4a","m4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-wav":["wav"],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/opentype":["otf"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jpeg":["jpeg","jpg","jpe"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-mrsid-image":["sid"],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/sgml":["sgml","sgm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["markdown","md","mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-pascal":["p","pas"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]} diff --git a/node_modules/minimist/.travis.yml b/node_modules/minimist/.travis.yml new file mode 100644 index 0000000..74c57bf --- /dev/null +++ b/node_modules/minimist/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff --git a/node_modules/minimist/LICENSE b/node_modules/minimist/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/minimist/example/parse.js b/node_modules/minimist/example/parse.js new file mode 100644 index 0000000..abff3e8 --- /dev/null +++ b/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.dir(argv); diff --git a/node_modules/minimist/index.js b/node_modules/minimist/index.js new file mode 100644 index 0000000..6a0559d --- /dev/null +++ b/node_modules/minimist/index.js @@ -0,0 +1,236 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {}, unknownFn: null }; + + if (typeof opts['unknown'] === 'function') { + flags.unknownFn = opts['unknown']; + } + + if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { + flags.allBools = true; + } else { + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + flags.strings[aliases[key]] = true; + } + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function argDefined(key, arg) { + return (flags.allBools && /^--[^=]+$/.test(arg)) || + flags.strings[key] || flags.bools[key] || aliases[key]; + } + + function setArg (key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) return; + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + function setKey (obj, keys, value) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + if (o[key] === undefined) o[key] = {}; + o = o[key]; + }); + + var key = keys[keys.length - 1]; + if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } + } + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + var key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, next, arg); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next, arg) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { + setArg(letters[j], next.split('=')[1], arg); + broken = true; + break; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2), arg); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, args[i+1], arg); + i++; + } + else if (args[i+1] && /true|false/.test(args[i+1])) { + setArg(key, args[i+1] === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } + else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + if (opts['--']) { + argv['--'] = new Array(); + notFlags.forEach(function(key) { + argv['--'].push(key); + }); + } + else { + notFlags.forEach(function(key) { + argv._.push(key); + }); + } + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + diff --git a/node_modules/minimist/package.json b/node_modules/minimist/package.json new file mode 100644 index 0000000..832ca1f --- /dev/null +++ b/node_modules/minimist/package.json @@ -0,0 +1,105 @@ +{ + "_args": [ + [ + { + "raw": "minimist@^1.1.3", + "scope": null, + "escapedName": "minimist", + "name": "minimist", + "rawSpec": "^1.1.3", + "spec": ">=1.1.3 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/meow" + ] + ], + "_from": "minimist@>=1.1.3 <2.0.0", + "_id": "minimist@1.2.0", + "_inCache": true, + "_location": "/minimist", + "_nodeVersion": "2.4.0", + "_npmUser": { + "name": "substack", + "email": "substack@gmail.com" + }, + "_npmVersion": "3.2.2", + "_phantomChildren": {}, + "_requested": { + "raw": "minimist@^1.1.3", + "scope": null, + "escapedName": "minimist", + "name": "minimist", + "rawSpec": "^1.1.3", + "spec": ">=1.1.3 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/meow" + ], + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "_shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", + "_shrinkwrap": null, + "_spec": "minimist@^1.1.3", + "_where": "/home/burchettm/statsbot/node_modules/meow", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "dependencies": {}, + "description": "parse argument options", + "devDependencies": { + "covert": "^1.0.0", + "tap": "~0.4.0", + "tape": "^3.5.0" + }, + "directories": {}, + "dist": { + "shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", + "tarball": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + }, + "gitHead": "dc624482fcfec5bc669c68cdb861f00573ed4e64", + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "name": "minimist", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "scripts": { + "coverage": "covert test/*.js", + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "version": "1.2.0" +} diff --git a/node_modules/minimist/readme.markdown b/node_modules/minimist/readme.markdown new file mode 100644 index 0000000..30a74cf --- /dev/null +++ b/node_modules/minimist/readme.markdown @@ -0,0 +1,91 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) + +[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.dir(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +``` +> require('./')('one two three -- four five --six'.split(' '), { '--': true }) +{ _: [ 'one', 'two', 'three' ], + '--': [ 'four', 'five', '--six' ] } +``` + +Note that with `opts['--']` set, parsing for arguments still stops after the +`--`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/node_modules/minimist/test/all_bool.js b/node_modules/minimist/test/all_bool.js new file mode 100644 index 0000000..ac83548 --- /dev/null +++ b/node_modules/minimist/test/all_bool.js @@ -0,0 +1,32 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/node_modules/minimist/test/bool.js b/node_modules/minimist/test/bool.js new file mode 100644 index 0000000..14b0717 --- /dev/null +++ b/node_modules/minimist/test/bool.js @@ -0,0 +1,166 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var alt = [ '--harp', 'derp' ]; + var opts = { + alias: { 'h': ['herp', 'harp'] }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, false); + t.end(); +}); diff --git a/node_modules/minimist/test/dash.js b/node_modules/minimist/test/dash.js new file mode 100644 index 0000000..5a4fa5b --- /dev/null +++ b/node_modules/minimist/test/dash.js @@ -0,0 +1,31 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); + +test('move arguments after the -- into their own `--` array', function(t) { + t.plan(1); + t.deepEqual( + parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }), + { name: 'John', _: [ 'before' ], '--': [ 'after' ] }); +}); diff --git a/node_modules/minimist/test/default_bool.js b/node_modules/minimist/test/default_bool.js new file mode 100644 index 0000000..780a311 --- /dev/null +++ b/node_modules/minimist/test/default_bool.js @@ -0,0 +1,35 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, null); + var argv = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, true); + t.end(); + +}) diff --git a/node_modules/minimist/test/dotted.js b/node_modules/minimist/test/dotted.js new file mode 100644 index 0000000..d8b3e85 --- /dev/null +++ b/node_modules/minimist/test/dotted.js @@ -0,0 +1,22 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', {default: {'a.b': 11}}); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/node_modules/minimist/test/kv_short.js b/node_modules/minimist/test/kv_short.js new file mode 100644 index 0000000..f813b30 --- /dev/null +++ b/node_modules/minimist/test/kv_short.js @@ -0,0 +1,16 @@ +var parse = require('../'); +var test = require('tape'); + +test('short -k=v' , function (t) { + t.plan(1); + + var argv = parse([ '-b=123' ]); + t.deepEqual(argv, { b: 123, _: [] }); +}); + +test('multi short -k=v' , function (t) { + t.plan(1); + + var argv = parse([ '-a=whatever', '-b=robots' ]); + t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); +}); diff --git a/node_modules/minimist/test/long.js b/node_modules/minimist/test/long.js new file mode 100644 index 0000000..5d3a1e0 --- /dev/null +++ b/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/minimist/test/num.js b/node_modules/minimist/test/num.js new file mode 100644 index 0000000..2cc77f4 --- /dev/null +++ b/node_modules/minimist/test/num.js @@ -0,0 +1,36 @@ +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse([ '-x', 1234, 789 ]); + t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/node_modules/minimist/test/parse.js b/node_modules/minimist/test/parse.js new file mode 100644 index 0000000..7b4a2a1 --- /dev/null +++ b/node_modules/minimist/test/parse.js @@ -0,0 +1,197 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('string and alias', function(t) { + var x = parse([ '--str', '000123' ], { + string: 's', + alias: { s: 'str' } + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse([ '-s', '000123' ], { + string: 'str', + alias: { str: 's' } + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); diff --git a/node_modules/minimist/test/parse_modified.js b/node_modules/minimist/test/parse_modified.js new file mode 100644 index 0000000..ab620dc --- /dev/null +++ b/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff --git a/node_modules/minimist/test/short.js b/node_modules/minimist/test/short.js new file mode 100644 index 0000000..d513a1c --- /dev/null +++ b/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff --git a/node_modules/minimist/test/stop_early.js b/node_modules/minimist/test/stop_early.js new file mode 100644 index 0000000..bdf9fbc --- /dev/null +++ b/node_modules/minimist/test/stop_early.js @@ -0,0 +1,15 @@ +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'] + }); + + t.end(); +}); diff --git a/node_modules/minimist/test/unknown.js b/node_modules/minimist/test/unknown.js new file mode 100644 index 0000000..462a36b --- /dev/null +++ b/node_modules/minimist/test/unknown.js @@ -0,0 +1,102 @@ +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'true', '--derp', 'true' ]; + var regular = [ '--herp', 'true', '-d', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [] + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello', '--derp', 'goodbye' ]; + var regular = [ '--herp', 'hello', '-d', 'moon' ]; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello' ]; + var regular = [ '--herp', 'hello' ]; + var opts = { + default: { 'h': 'bar' }, + alias: { 'h': 'herp' }, + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '--bad', '--', 'good', 'arg' ]; + var opts = { + '--': true, + unknown: unknownFn + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + '_': [] + }) + t.end(); +}); diff --git a/node_modules/minimist/test/whitespace.js b/node_modules/minimist/test/whitespace.js new file mode 100644 index 0000000..8a52a58 --- /dev/null +++ b/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/mkdirp/.travis.yml b/node_modules/mkdirp/.travis.yml new file mode 100644 index 0000000..74c57bf --- /dev/null +++ b/node_modules/mkdirp/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff --git a/node_modules/mkdirp/LICENSE b/node_modules/mkdirp/LICENSE new file mode 100644 index 0000000..432d1ae --- /dev/null +++ b/node_modules/mkdirp/LICENSE @@ -0,0 +1,21 @@ +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/mkdirp/bin/cmd.js b/node_modules/mkdirp/bin/cmd.js new file mode 100755 index 0000000..d95de15 --- /dev/null +++ b/node_modules/mkdirp/bin/cmd.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node + +var mkdirp = require('../'); +var minimist = require('minimist'); +var fs = require('fs'); + +var argv = minimist(process.argv.slice(2), { + alias: { m: 'mode', h: 'help' }, + string: [ 'mode' ] +}); +if (argv.help) { + fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); + return; +} + +var paths = argv._.slice(); +var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; + +(function next () { + if (paths.length === 0) return; + var p = paths.shift(); + + if (mode === undefined) mkdirp(p, cb) + else mkdirp(p, mode, cb) + + function cb (err) { + if (err) { + console.error(err.message); + process.exit(1); + } + else next(); + } +})(); diff --git a/node_modules/mkdirp/bin/usage.txt b/node_modules/mkdirp/bin/usage.txt new file mode 100644 index 0000000..f952aa2 --- /dev/null +++ b/node_modules/mkdirp/bin/usage.txt @@ -0,0 +1,12 @@ +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + diff --git a/node_modules/mkdirp/examples/pow.js b/node_modules/mkdirp/examples/pow.js new file mode 100644 index 0000000..e692421 --- /dev/null +++ b/node_modules/mkdirp/examples/pow.js @@ -0,0 +1,6 @@ +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); diff --git a/node_modules/mkdirp/index.js b/node_modules/mkdirp/index.js new file mode 100644 index 0000000..6ce241b --- /dev/null +++ b/node_modules/mkdirp/index.js @@ -0,0 +1,98 @@ +var path = require('path'); +var fs = require('fs'); +var _0777 = parseInt('0777', 8); + +module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; + +function mkdirP (p, opts, f, made) { + if (typeof opts === 'function') { + f = opts; + opts = {}; + } + else if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 & (~process.umask()); + } + if (!made) made = null; + + var cb = f || function () {}; + p = path.resolve(p); + + xfs.mkdir(p, mode, function (er) { + if (!er) { + made = made || p; + return cb(null, made); + } + switch (er.code) { + case 'ENOENT': + mkdirP(path.dirname(p), opts, function (er, made) { + if (er) cb(er, made); + else mkdirP(p, opts, cb, made); + }); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + xfs.stat(p, function (er2, stat) { + // if the stat fails, then that's super weird. + // let the original error be the failure reason. + if (er2 || !stat.isDirectory()) cb(er, made) + else cb(null, made); + }); + break; + } + }); +} + +mkdirP.sync = function sync (p, opts, made) { + if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 & (~process.umask()); + } + if (!made) made = null; + + p = path.resolve(p); + + try { + xfs.mkdirSync(p, mode); + made = made || p; + } + catch (err0) { + switch (err0.code) { + case 'ENOENT' : + made = sync(path.dirname(p), opts, made); + sync(p, opts, made); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + var stat; + try { + stat = xfs.statSync(p); + } + catch (err1) { + throw err0; + } + if (!stat.isDirectory()) throw err0; + break; + } + } + + return made; +}; diff --git a/node_modules/mkdirp/node_modules/minimist/.travis.yml b/node_modules/mkdirp/node_modules/minimist/.travis.yml new file mode 100644 index 0000000..cc4dba2 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/mkdirp/node_modules/minimist/LICENSE b/node_modules/mkdirp/node_modules/minimist/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mkdirp/node_modules/minimist/example/parse.js b/node_modules/mkdirp/node_modules/minimist/example/parse.js new file mode 100644 index 0000000..abff3e8 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.dir(argv); diff --git a/node_modules/mkdirp/node_modules/minimist/index.js b/node_modules/mkdirp/node_modules/minimist/index.js new file mode 100644 index 0000000..584f551 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/index.js @@ -0,0 +1,187 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {} }; + + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + }); + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function setArg (key, val) { + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + setArg(m[1], m[2]); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, next); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true'); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2)); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, args[i+1]); + i++; + } + else if (args[i+1] && /true|false/.test(args[i+1])) { + setArg(key, args[i+1] === 'true'); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true); + } + } + } + else { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + notFlags.forEach(function(key) { + argv._.push(key); + }); + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function setKey (obj, keys, value) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + if (o[key] === undefined) o[key] = {}; + o = o[key]; + }); + + var key = keys[keys.length - 1]; + if (o[key] === undefined || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + +function longest (xs) { + return Math.max.apply(null, xs.map(function (x) { return x.length })); +} diff --git a/node_modules/mkdirp/node_modules/minimist/package.json b/node_modules/mkdirp/node_modules/minimist/package.json new file mode 100644 index 0000000..2669d63 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/package.json @@ -0,0 +1,101 @@ +{ + "_args": [ + [ + { + "raw": "minimist@0.0.8", + "scope": null, + "escapedName": "minimist", + "name": "minimist", + "rawSpec": "0.0.8", + "spec": "0.0.8", + "type": "version" + }, + "/home/burchettm/statsbot/node_modules/mkdirp" + ] + ], + "_from": "minimist@0.0.8", + "_id": "minimist@0.0.8", + "_inCache": true, + "_location": "/mkdirp/minimist", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "_npmVersion": "1.4.3", + "_phantomChildren": {}, + "_requested": { + "raw": "minimist@0.0.8", + "scope": null, + "escapedName": "minimist", + "name": "minimist", + "rawSpec": "0.0.8", + "spec": "0.0.8", + "type": "version" + }, + "_requiredBy": [ + "/mkdirp" + ], + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", + "_shrinkwrap": null, + "_spec": "minimist@0.0.8", + "_where": "/home/burchettm/statsbot/node_modules/mkdirp", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "dependencies": {}, + "description": "parse argument options", + "devDependencies": { + "tap": "~0.4.0", + "tape": "~1.0.4" + }, + "directories": {}, + "dist": { + "shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", + "tarball": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "name": "minimist", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "version": "0.0.8" +} diff --git a/node_modules/mkdirp/node_modules/minimist/readme.markdown b/node_modules/mkdirp/node_modules/minimist/readme.markdown new file mode 100644 index 0000000..c256353 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/readme.markdown @@ -0,0 +1,73 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) + +[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.dir(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a string or array of strings to always treat as booleans +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/node_modules/mkdirp/node_modules/minimist/test/dash.js b/node_modules/mkdirp/node_modules/minimist/test/dash.js new file mode 100644 index 0000000..8b034b9 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/dash.js @@ -0,0 +1,24 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/default_bool.js b/node_modules/mkdirp/node_modules/minimist/test/default_bool.js new file mode 100644 index 0000000..f0041ee --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/default_bool.js @@ -0,0 +1,20 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/dotted.js b/node_modules/mkdirp/node_modules/minimist/test/dotted.js new file mode 100644 index 0000000..ef0ae34 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/dotted.js @@ -0,0 +1,16 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/long.js b/node_modules/mkdirp/node_modules/minimist/test/long.js new file mode 100644 index 0000000..5d3a1e0 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/parse.js b/node_modules/mkdirp/node_modules/minimist/test/parse.js new file mode 100644 index 0000000..8a90646 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/parse.js @@ -0,0 +1,318 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); + +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js b/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js new file mode 100644 index 0000000..21851b0 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: ['123'] }); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/short.js b/node_modules/mkdirp/node_modules/minimist/test/short.js new file mode 100644 index 0000000..d513a1c --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/whitespace.js b/node_modules/mkdirp/node_modules/minimist/test/whitespace.js new file mode 100644 index 0000000..8a52a58 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/mkdirp/package.json b/node_modules/mkdirp/package.json new file mode 100644 index 0000000..b554358 --- /dev/null +++ b/node_modules/mkdirp/package.json @@ -0,0 +1,93 @@ +{ + "_args": [ + [ + { + "raw": "mkdirp@^0.5.1", + "scope": null, + "escapedName": "mkdirp", + "name": "mkdirp", + "rawSpec": "^0.5.1", + "spec": ">=0.5.1 <0.6.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/streamroller" + ] + ], + "_from": "mkdirp@>=0.5.1 <0.6.0", + "_id": "mkdirp@0.5.1", + "_inCache": true, + "_location": "/mkdirp", + "_nodeVersion": "2.0.0", + "_npmUser": { + "name": "substack", + "email": "substack@gmail.com" + }, + "_npmVersion": "2.9.0", + "_phantomChildren": {}, + "_requested": { + "raw": "mkdirp@^0.5.1", + "scope": null, + "escapedName": "mkdirp", + "name": "mkdirp", + "rawSpec": "^0.5.1", + "spec": ">=0.5.1 <0.6.0", + "type": "range" + }, + "_requiredBy": [ + "/streamroller" + ], + "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "_shasum": "30057438eac6cf7f8c4767f38648d6697d75c903", + "_shrinkwrap": null, + "_spec": "mkdirp@^0.5.1", + "_where": "/home/burchettm/statsbot/node_modules/streamroller", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "bugs": { + "url": "https://github.com/substack/node-mkdirp/issues" + }, + "dependencies": { + "minimist": "0.0.8" + }, + "description": "Recursively mkdir, like `mkdir -p`", + "devDependencies": { + "mock-fs": "2 >=2.7.0", + "tap": "1" + }, + "directories": {}, + "dist": { + "shasum": "30057438eac6cf7f8c4767f38648d6697d75c903", + "tarball": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + }, + "gitHead": "d4eff0f06093aed4f387e88e9fc301cb76beedc7", + "homepage": "https://github.com/substack/node-mkdirp#readme", + "keywords": [ + "mkdir", + "directory" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "name": "mkdirp", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/substack/node-mkdirp.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "0.5.1" +} diff --git a/node_modules/mkdirp/readme.markdown b/node_modules/mkdirp/readme.markdown new file mode 100644 index 0000000..3cc1315 --- /dev/null +++ b/node_modules/mkdirp/readme.markdown @@ -0,0 +1,100 @@ +# mkdirp + +Like `mkdir -p`, but in node.js! + +[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) + +# example + +## pow.js + +```js +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); +``` + +Output + +``` +pow! +``` + +And now /tmp/foo/bar/baz exists, huzzah! + +# methods + +```js +var mkdirp = require('mkdirp'); +``` + +## mkdirp(dir, opts, cb) + +Create a new directory and any necessary subdirectories at `dir` with octal +permission string `opts.mode`. If `opts` is a non-object, it will be treated as +the `opts.mode`. + +If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. + +`cb(err, made)` fires with the error or the first directory `made` +that had to be created, if any. + +You can optionally pass in an alternate `fs` implementation by passing in +`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and +`opts.fs.stat(path, cb)`. + +## mkdirp.sync(dir, opts) + +Synchronously create a new directory and any necessary subdirectories at `dir` +with octal permission string `opts.mode`. If `opts` is a non-object, it will be +treated as the `opts.mode`. + +If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. + +Returns the first directory that had to be created, if any. + +You can optionally pass in an alternate `fs` implementation by passing in +`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and +`opts.fs.statSync(path)`. + +# usage + +This package also ships with a `mkdirp` command. + +``` +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + +``` + +# install + +With [npm](http://npmjs.org) do: + +``` +npm install mkdirp +``` + +to get the library, or + +``` +npm install -g mkdirp +``` + +to get the command. + +# license + +MIT diff --git a/node_modules/mkdirp/test/chmod.js b/node_modules/mkdirp/test/chmod.js new file mode 100644 index 0000000..6a404b9 --- /dev/null +++ b/node_modules/mkdirp/test/chmod.js @@ -0,0 +1,41 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); +var _0744 = parseInt('0744', 8); + +var ps = [ '', 'tmp' ]; + +for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); +} + +var file = ps.join('/'); + +test('chmod-pre', function (t) { + var mode = _0744 + mkdirp(file, mode, function (er) { + t.ifError(er, 'should not error'); + fs.stat(file, function (er, stat) { + t.ifError(er, 'should exist'); + t.ok(stat && stat.isDirectory(), 'should be directory'); + t.equal(stat && stat.mode & _0777, mode, 'should be 0744'); + t.end(); + }); + }); +}); + +test('chmod', function (t) { + var mode = _0755 + mkdirp(file, mode, function (er) { + t.ifError(er, 'should not error'); + fs.stat(file, function (er, stat) { + t.ifError(er, 'should exist'); + t.ok(stat && stat.isDirectory(), 'should be directory'); + t.end(); + }); + }); +}); diff --git a/node_modules/mkdirp/test/clobber.js b/node_modules/mkdirp/test/clobber.js new file mode 100644 index 0000000..2433b9a --- /dev/null +++ b/node_modules/mkdirp/test/clobber.js @@ -0,0 +1,38 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0755 = parseInt('0755', 8); + +var ps = [ '', 'tmp' ]; + +for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); +} + +var file = ps.join('/'); + +// a file in the way +var itw = ps.slice(0, 3).join('/'); + + +test('clobber-pre', function (t) { + console.error("about to write to "+itw) + fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); + + fs.stat(itw, function (er, stat) { + t.ifError(er) + t.ok(stat && stat.isFile(), 'should be file') + t.end() + }) +}) + +test('clobber', function (t) { + t.plan(2); + mkdirp(file, _0755, function (err) { + t.ok(err); + t.equal(err.code, 'ENOTDIR'); + t.end(); + }); +}); diff --git a/node_modules/mkdirp/test/mkdirp.js b/node_modules/mkdirp/test/mkdirp.js new file mode 100644 index 0000000..eaa8921 --- /dev/null +++ b/node_modules/mkdirp/test/mkdirp.js @@ -0,0 +1,28 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('woo', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); diff --git a/node_modules/mkdirp/test/opts_fs.js b/node_modules/mkdirp/test/opts_fs.js new file mode 100644 index 0000000..97186b6 --- /dev/null +++ b/node_modules/mkdirp/test/opts_fs.js @@ -0,0 +1,29 @@ +var mkdirp = require('../'); +var path = require('path'); +var test = require('tap').test; +var mockfs = require('mock-fs'); +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('opts.fs', function (t) { + t.plan(5); + + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/beep/boop/' + [x,y,z].join('/'); + var xfs = mockfs.fs(); + + mkdirp(file, { fs: xfs, mode: _0755 }, function (err) { + t.ifError(err); + xfs.exists(file, function (ex) { + t.ok(ex, 'created file'); + xfs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); + }); +}); diff --git a/node_modules/mkdirp/test/opts_fs_sync.js b/node_modules/mkdirp/test/opts_fs_sync.js new file mode 100644 index 0000000..6c370aa --- /dev/null +++ b/node_modules/mkdirp/test/opts_fs_sync.js @@ -0,0 +1,27 @@ +var mkdirp = require('../'); +var path = require('path'); +var test = require('tap').test; +var mockfs = require('mock-fs'); +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('opts.fs sync', function (t) { + t.plan(4); + + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/beep/boop/' + [x,y,z].join('/'); + var xfs = mockfs.fs(); + + mkdirp.sync(file, { fs: xfs, mode: _0755 }); + xfs.exists(file, function (ex) { + t.ok(ex, 'created file'); + xfs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/node_modules/mkdirp/test/perm.js b/node_modules/mkdirp/test/perm.js new file mode 100644 index 0000000..fbce44b --- /dev/null +++ b/node_modules/mkdirp/test/perm.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('async perm', function (t) { + t.plan(5); + var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); + +test('async root perm', function (t) { + mkdirp('/tmp', _0755, function (err) { + if (err) t.fail(err); + t.end(); + }); + t.end(); +}); diff --git a/node_modules/mkdirp/test/perm_sync.js b/node_modules/mkdirp/test/perm_sync.js new file mode 100644 index 0000000..398229f --- /dev/null +++ b/node_modules/mkdirp/test/perm_sync.js @@ -0,0 +1,36 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('sync perm', function (t) { + t.plan(4); + var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; + + mkdirp.sync(file, _0755); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); + +test('sync root perm', function (t) { + t.plan(3); + + var file = '/tmp'; + mkdirp.sync(file, _0755); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }); +}); diff --git a/node_modules/mkdirp/test/race.js b/node_modules/mkdirp/test/race.js new file mode 100644 index 0000000..b0b9e18 --- /dev/null +++ b/node_modules/mkdirp/test/race.js @@ -0,0 +1,37 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('race', function (t) { + t.plan(10); + var ps = [ '', 'tmp' ]; + + for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); + } + var file = ps.join('/'); + + var res = 2; + mk(file); + + mk(file); + + function mk (file, cb) { + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }) + }); + } +}); diff --git a/node_modules/mkdirp/test/rel.js b/node_modules/mkdirp/test/rel.js new file mode 100644 index 0000000..4ddb342 --- /dev/null +++ b/node_modules/mkdirp/test/rel.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('rel', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var cwd = process.cwd(); + process.chdir('/tmp'); + + var file = [x,y,z].join('/'); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + process.chdir(cwd); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); diff --git a/node_modules/mkdirp/test/return.js b/node_modules/mkdirp/test/return.js new file mode 100644 index 0000000..bce68e5 --- /dev/null +++ b/node_modules/mkdirp/test/return.js @@ -0,0 +1,25 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('return value', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + // should return the first dir created. + // By this point, it would be profoundly surprising if /tmp didn't + // already exist, since every other test makes things in there. + mkdirp(file, function (err, made) { + t.ifError(err); + t.equal(made, '/tmp/' + x); + mkdirp(file, function (err, made) { + t.ifError(err); + t.equal(made, null); + }); + }); +}); diff --git a/node_modules/mkdirp/test/return_sync.js b/node_modules/mkdirp/test/return_sync.js new file mode 100644 index 0000000..7c222d3 --- /dev/null +++ b/node_modules/mkdirp/test/return_sync.js @@ -0,0 +1,24 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('return value', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + // should return the first dir created. + // By this point, it would be profoundly surprising if /tmp didn't + // already exist, since every other test makes things in there. + // Note that this will throw on failure, which will fail the test. + var made = mkdirp.sync(file); + t.equal(made, '/tmp/' + x); + + // making the same file again should have no effect. + made = mkdirp.sync(file); + t.equal(made, null); +}); diff --git a/node_modules/mkdirp/test/root.js b/node_modules/mkdirp/test/root.js new file mode 100644 index 0000000..9e7d079 --- /dev/null +++ b/node_modules/mkdirp/test/root.js @@ -0,0 +1,19 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0755 = parseInt('0755', 8); + +test('root', function (t) { + // '/' on unix, 'c:/' on windows. + var file = path.resolve('/'); + + mkdirp(file, _0755, function (err) { + if (err) throw err + fs.stat(file, function (er, stat) { + if (er) throw er + t.ok(stat.isDirectory(), 'target is a directory'); + t.end(); + }) + }); +}); diff --git a/node_modules/mkdirp/test/sync.js b/node_modules/mkdirp/test/sync.js new file mode 100644 index 0000000..8c8dc93 --- /dev/null +++ b/node_modules/mkdirp/test/sync.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('sync', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + try { + mkdirp.sync(file, _0755); + } catch (err) { + t.fail(err); + return t.end(); + } + + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/node_modules/mkdirp/test/umask.js b/node_modules/mkdirp/test/umask.js new file mode 100644 index 0000000..2033c63 --- /dev/null +++ b/node_modules/mkdirp/test/umask.js @@ -0,0 +1,28 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('implicit mode from umask', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + mkdirp(file, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0777 & (~process.umask())); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }) + }); +}); diff --git a/node_modules/mkdirp/test/umask_sync.js b/node_modules/mkdirp/test/umask_sync.js new file mode 100644 index 0000000..11a7614 --- /dev/null +++ b/node_modules/mkdirp/test/umask_sync.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('umask sync modes', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + try { + mkdirp.sync(file); + } catch (err) { + t.fail(err); + return t.end(); + } + + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, (_0777 & (~process.umask()))); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/node_modules/moment-timezone/.npmignore b/node_modules/moment-timezone/.npmignore new file mode 100644 index 0000000..14874c0 --- /dev/null +++ b/node_modules/moment-timezone/.npmignore @@ -0,0 +1,19 @@ +temp +tests + +Gruntfile.js +tasks + +contributing.md + +.travis.yml +.jshintrc + +bower.json + +data/unpacked/*.json +!data/unpacked/latest.json +data/packed/*.json +!data/packed/latest.json +data/meta/*.json +!data/meta/latest.json diff --git a/node_modules/moment-timezone/LICENSE b/node_modules/moment-timezone/LICENSE new file mode 100644 index 0000000..f0bb3b4 --- /dev/null +++ b/node_modules/moment-timezone/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/moment-timezone/README.md b/node_modules/moment-timezone/README.md new file mode 100644 index 0000000..06b2681 --- /dev/null +++ b/node_modules/moment-timezone/README.md @@ -0,0 +1,36 @@ +# [Moment Timezone](http://momentjs.com/timezone) + +[![Join the chat at https://gitter.im/moment/moment-timezone](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/moment/moment-timezone?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +[![NPM version][npm-version-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![MIT License][license-image]][license-url] [![Build Status][travis-image]][travis-url] + +IANA Time Zone Database + [Moment.js](http://momentjs.com). + +```js +var june = moment("2014-06-01T12:00:00Z"); +june.tz('America/Los_Angeles').format('ha z'); // 5am PDT +june.tz('America/New_York').format('ha z'); // 8am EDT +june.tz('Asia/Tokyo').format('ha z'); // 9pm JST +june.tz('Australia/Sydney').format('ha z'); // 10pm EST + +var dec = moment("2014-12-01T12:00:00Z"); +dec.tz('America/Los_Angeles').format('ha z'); // 4am PST +dec.tz('America/New_York').format('ha z'); // 7am EST +dec.tz('Asia/Tokyo').format('ha z'); // 9pm JST +dec.tz('Australia/Sydney').format('ha z'); // 11pm EST +``` + +#### [Contribute code or compile time zone data](contributing.md) + +#### [Read the changelog](changelog.md) + + +[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat +[license-url]: LICENSE + +[npm-url]: https://npmjs.org/package/moment-timezone +[npm-version-image]: http://img.shields.io/npm/v/moment-timezone.svg?style=flat +[npm-downloads-image]: http://img.shields.io/npm/dm/moment-timezone.svg?style=flat + +[travis-url]: http://travis-ci.org/moment/moment-timezone +[travis-image]: http://img.shields.io/travis/moment/moment-timezone/develop.svg?style=flat diff --git a/node_modules/moment-timezone/builds/moment-timezone-with-data-2010-2020.js b/node_modules/moment-timezone/builds/moment-timezone-with-data-2010-2020.js new file mode 100644 index 0000000..e4f5694 --- /dev/null +++ b/node_modules/moment-timezone/builds/moment-timezone-with-data-2010-2020.js @@ -0,0 +1,1200 @@ +//! moment-timezone.js +//! version : 0.5.11 +//! Copyright (c) JS Foundation and other contributors +//! license : MIT +//! github.com/moment/moment-timezone + +(function (root, factory) { + "use strict"; + + /*global define*/ + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof module === 'object' && module.exports) { + module.exports = factory(require('moment')); // Node + } else { + factory(root.moment); // Browser + } +}(this, function (moment) { + "use strict"; + + // Do not load moment-timezone a second time. + // if (moment.tz !== undefined) { + // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); + // return moment; + // } + + var VERSION = "0.5.11", + zones = {}, + links = {}, + names = {}, + guesses = {}, + cachedGuess, + + momentVersion = moment.version.split('.'), + major = +momentVersion[0], + minor = +momentVersion[1]; + + // Moment.js version check + if (major < 2 || (major === 2 && minor < 6)) { + logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); + } + + /************************************ + Unpacking + ************************************/ + + function charCodeToInt(charCode) { + if (charCode > 96) { + return charCode - 87; + } else if (charCode > 64) { + return charCode - 29; + } + return charCode - 48; + } + + function unpackBase60(string) { + var i = 0, + parts = string.split('.'), + whole = parts[0], + fractional = parts[1] || '', + multiplier = 1, + num, + out = 0, + sign = 1; + + // handle negative numbers + if (string.charCodeAt(0) === 45) { + i = 1; + sign = -1; + } + + // handle digits before the decimal + for (i; i < whole.length; i++) { + num = charCodeToInt(whole.charCodeAt(i)); + out = 60 * out + num; + } + + // handle digits after the decimal + for (i = 0; i < fractional.length; i++) { + multiplier = multiplier / 60; + num = charCodeToInt(fractional.charCodeAt(i)); + out += num * multiplier; + } + + return out * sign; + } + + function arrayToInt (array) { + for (var i = 0; i < array.length; i++) { + array[i] = unpackBase60(array[i]); + } + } + + function intToUntil (array, length) { + for (var i = 0; i < length; i++) { + array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds + } + + array[length - 1] = Infinity; + } + + function mapIndices (source, indices) { + var out = [], i; + + for (i = 0; i < indices.length; i++) { + out[i] = source[indices[i]]; + } + + return out; + } + + function unpack (string) { + var data = string.split('|'), + offsets = data[2].split(' '), + indices = data[3].split(''), + untils = data[4].split(' '); + + arrayToInt(offsets); + arrayToInt(indices); + arrayToInt(untils); + + intToUntil(untils, indices.length); + + return { + name : data[0], + abbrs : mapIndices(data[1].split(' '), indices), + offsets : mapIndices(offsets, indices), + untils : untils, + population : data[5] | 0 + }; + } + + /************************************ + Zone object + ************************************/ + + function Zone (packedString) { + if (packedString) { + this._set(unpack(packedString)); + } + } + + Zone.prototype = { + _set : function (unpacked) { + this.name = unpacked.name; + this.abbrs = unpacked.abbrs; + this.untils = unpacked.untils; + this.offsets = unpacked.offsets; + this.population = unpacked.population; + }, + + _index : function (timestamp) { + var target = +timestamp, + untils = this.untils, + i; + + for (i = 0; i < untils.length; i++) { + if (target < untils[i]) { + return i; + } + } + }, + + parse : function (timestamp) { + var target = +timestamp, + offsets = this.offsets, + untils = this.untils, + max = untils.length - 1, + offset, offsetNext, offsetPrev, i; + + for (i = 0; i < max; i++) { + offset = offsets[i]; + offsetNext = offsets[i + 1]; + offsetPrev = offsets[i ? i - 1 : i]; + + if (offset < offsetNext && tz.moveAmbiguousForward) { + offset = offsetNext; + } else if (offset > offsetPrev && tz.moveInvalidForward) { + offset = offsetPrev; + } + + if (target < untils[i] - (offset * 60000)) { + return offsets[i]; + } + } + + return offsets[max]; + }, + + abbr : function (mom) { + return this.abbrs[this._index(mom)]; + }, + + offset : function (mom) { + return this.offsets[this._index(mom)]; + } + }; + + /************************************ + Current Timezone + ************************************/ + + function OffsetAt(at) { + var timeString = at.toTimeString(); + var abbr = timeString.match(/\([a-z ]+\)/i); + if (abbr && abbr[0]) { + // 17:56:31 GMT-0600 (CST) + // 17:56:31 GMT-0600 (Central Standard Time) + abbr = abbr[0].match(/[A-Z]/g); + abbr = abbr ? abbr.join('') : undefined; + } else { + // 17:56:31 CST + // 17:56:31 GMT+0800 (台北標準時間) + abbr = timeString.match(/[A-Z]{3,5}/g); + abbr = abbr ? abbr[0] : undefined; + } + + if (abbr === 'GMT') { + abbr = undefined; + } + + this.at = +at; + this.abbr = abbr; + this.offset = at.getTimezoneOffset(); + } + + function ZoneScore(zone) { + this.zone = zone; + this.offsetScore = 0; + this.abbrScore = 0; + } + + ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { + this.offsetScore += Math.abs(this.zone.offset(offsetAt.at) - offsetAt.offset); + if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { + this.abbrScore++; + } + }; + + function findChange(low, high) { + var mid, diff; + + while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { + mid = new OffsetAt(new Date(low.at + diff)); + if (mid.offset === low.offset) { + low = mid; + } else { + high = mid; + } + } + + return low; + } + + function userOffsets() { + var startYear = new Date().getFullYear() - 2, + last = new OffsetAt(new Date(startYear, 0, 1)), + offsets = [last], + change, next, i; + + for (i = 1; i < 48; i++) { + next = new OffsetAt(new Date(startYear, i, 1)); + if (next.offset !== last.offset) { + change = findChange(last, next); + offsets.push(change); + offsets.push(new OffsetAt(new Date(change.at + 6e4))); + } + last = next; + } + + for (i = 0; i < 4; i++) { + offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); + offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); + } + + return offsets; + } + + function sortZoneScores (a, b) { + if (a.offsetScore !== b.offsetScore) { + return a.offsetScore - b.offsetScore; + } + if (a.abbrScore !== b.abbrScore) { + return a.abbrScore - b.abbrScore; + } + return b.zone.population - a.zone.population; + } + + function addToGuesses (name, offsets) { + var i, offset; + arrayToInt(offsets); + for (i = 0; i < offsets.length; i++) { + offset = offsets[i]; + guesses[offset] = guesses[offset] || {}; + guesses[offset][name] = true; + } + } + + function guessesForUserOffsets (offsets) { + var offsetsLength = offsets.length, + filteredGuesses = {}, + out = [], + i, j, guessesOffset; + + for (i = 0; i < offsetsLength; i++) { + guessesOffset = guesses[offsets[i].offset] || {}; + for (j in guessesOffset) { + if (guessesOffset.hasOwnProperty(j)) { + filteredGuesses[j] = true; + } + } + } + + for (i in filteredGuesses) { + if (filteredGuesses.hasOwnProperty(i)) { + out.push(names[i]); + } + } + + return out; + } + + function rebuildGuess () { + + // use Intl API when available and returning valid time zone + try { + var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; + if (intlName){ + var name = names[normalizeName(intlName)]; + if (name) { + return name; + } + logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); + } + } catch (e) { + // Intl unavailable, fall back to manual guessing. + } + + var offsets = userOffsets(), + offsetsLength = offsets.length, + guesses = guessesForUserOffsets(offsets), + zoneScores = [], + zoneScore, i, j; + + for (i = 0; i < guesses.length; i++) { + zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); + for (j = 0; j < offsetsLength; j++) { + zoneScore.scoreOffsetAt(offsets[j]); + } + zoneScores.push(zoneScore); + } + + zoneScores.sort(sortZoneScores); + + return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; + } + + function guess (ignoreCache) { + if (!cachedGuess || ignoreCache) { + cachedGuess = rebuildGuess(); + } + return cachedGuess; + } + + /************************************ + Global Methods + ************************************/ + + function normalizeName (name) { + return (name || '').toLowerCase().replace(/\//g, '_'); + } + + function addZone (packed) { + var i, name, split, normalized; + + if (typeof packed === "string") { + packed = [packed]; + } + + for (i = 0; i < packed.length; i++) { + split = packed[i].split('|'); + name = split[0]; + normalized = normalizeName(name); + zones[normalized] = packed[i]; + names[normalized] = name; + if (split[5]) { + addToGuesses(normalized, split[2].split(' ')); + } + } + } + + function getZone (name, caller) { + name = normalizeName(name); + + var zone = zones[name]; + var link; + + if (zone instanceof Zone) { + return zone; + } + + if (typeof zone === 'string') { + zone = new Zone(zone); + zones[name] = zone; + return zone; + } + + // Pass getZone to prevent recursion more than 1 level deep + if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { + zone = zones[name] = new Zone(); + zone._set(link); + zone.name = names[name]; + return zone; + } + + return null; + } + + function getNames () { + var i, out = []; + + for (i in names) { + if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { + out.push(names[i]); + } + } + + return out.sort(); + } + + function addLink (aliases) { + var i, alias, normal0, normal1; + + if (typeof aliases === "string") { + aliases = [aliases]; + } + + for (i = 0; i < aliases.length; i++) { + alias = aliases[i].split('|'); + + normal0 = normalizeName(alias[0]); + normal1 = normalizeName(alias[1]); + + links[normal0] = normal1; + names[normal0] = alias[0]; + + links[normal1] = normal0; + names[normal1] = alias[1]; + } + } + + function loadData (data) { + addZone(data.zones); + addLink(data.links); + tz.dataVersion = data.version; + } + + function zoneExists (name) { + if (!zoneExists.didShowError) { + zoneExists.didShowError = true; + logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); + } + return !!getZone(name); + } + + function needsOffset (m) { + return !!(m._a && (m._tzm === undefined)); + } + + function logError (message) { + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + } + + /************************************ + moment.tz namespace + ************************************/ + + function tz (input) { + var args = Array.prototype.slice.call(arguments, 0, -1), + name = arguments[arguments.length - 1], + zone = getZone(name), + out = moment.utc.apply(null, args); + + if (zone && !moment.isMoment(input) && needsOffset(out)) { + out.add(zone.parse(out), 'minutes'); + } + + out.tz(name); + + return out; + } + + tz.version = VERSION; + tz.dataVersion = ''; + tz._zones = zones; + tz._links = links; + tz._names = names; + tz.add = addZone; + tz.link = addLink; + tz.load = loadData; + tz.zone = getZone; + tz.zoneExists = zoneExists; // deprecated in 0.1.0 + tz.guess = guess; + tz.names = getNames; + tz.Zone = Zone; + tz.unpack = unpack; + tz.unpackBase60 = unpackBase60; + tz.needsOffset = needsOffset; + tz.moveInvalidForward = true; + tz.moveAmbiguousForward = false; + + /************************************ + Interface with Moment.js + ************************************/ + + var fn = moment.fn; + + moment.tz = tz; + + moment.defaultZone = null; + + moment.updateOffset = function (mom, keepTime) { + var zone = moment.defaultZone, + offset; + + if (mom._z === undefined) { + if (zone && needsOffset(mom) && !mom._isUTC) { + mom._d = moment.utc(mom._a)._d; + mom.utc().add(zone.parse(mom), 'minutes'); + } + mom._z = zone; + } + if (mom._z) { + offset = mom._z.offset(mom); + if (Math.abs(offset) < 16) { + offset = offset / 60; + } + if (mom.utcOffset !== undefined) { + mom.utcOffset(-offset, keepTime); + } else { + mom.zone(offset, keepTime); + } + } + }; + + fn.tz = function (name) { + if (name) { + this._z = getZone(name); + if (this._z) { + moment.updateOffset(this); + } else { + logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); + } + return this; + } + if (this._z) { return this._z.name; } + }; + + function abbrWrap (old) { + return function () { + if (this._z) { return this._z.abbr(this); } + return old.call(this); + }; + } + + function resetZoneWrap (old) { + return function () { + this._z = null; + return old.apply(this, arguments); + }; + } + + fn.zoneName = abbrWrap(fn.zoneName); + fn.zoneAbbr = abbrWrap(fn.zoneAbbr); + fn.utc = resetZoneWrap(fn.utc); + + moment.tz.setDefault = function(name) { + if (major < 2 || (major === 2 && minor < 9)) { + logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); + } + moment.defaultZone = name ? getZone(name) : null; + return moment; + }; + + // Cloning a moment should include the _z property. + var momentProperties = moment.momentProperties; + if (Object.prototype.toString.call(momentProperties) === '[object Array]') { + // moment 2.8.1+ + momentProperties.push('_z'); + momentProperties.push('_a'); + } else if (momentProperties) { + // moment 2.7.0 + momentProperties._z = null; + } + + loadData({ + "version": "2016j", + "zones": [ + "Africa/Abidjan|GMT|0|0||48e5", + "Africa/Khartoum|EAT|-30|0||51e5", + "Africa/Algiers|CET|-10|0||26e5", + "Africa/Lagos|WAT|-10|0||17e6", + "Africa/Maputo|CAT|-20|0||26e5", + "Africa/Cairo|EET EEST|-20 -30|010101010|1Cby0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6", + "Africa/Casablanca|WET WEST|0 -10|01010101010101010101010101010101010101010|1Cco0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0|32e5", + "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6", + "Africa/Johannesburg|SAST|-20|0||84e5", + "Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5", + "Africa/Windhoek|WAST WAT|-20 -10|01010101010101010101010|1C1c0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0|32e4", + "America/Adak|HST HDT|a0 90|01010101010101010101010|1BR00 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", + "America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1BQX0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", + "America/Santo_Domingo|AST|40|0||29e5", + "America/Araguaina|BRT BRST|30 20|010|1IdD0 Lz0|14e4", + "America/Argentina/Buenos_Aires|ART|30|0|", + "America/Asuncion|PYST PYT|30 40|01010101010101010101010|1C430 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5", + "America/Panama|EST|50|0||15e5", + "America/Bahia|BRT BRST|30 20|010|1FJf0 Rb0|27e5", + "America/Bahia_Banderas|MST CDT CST|70 50 60|01212121212121212121212|1C1l0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3", + "America/Fortaleza|BRT|30|0||34e5", + "America/Managua|CST|60|0||22e5", + "America/Manaus|AMT|40|0||19e5", + "America/Bogota|COT|50|0||90e5", + "America/Denver|MST MDT|70 60|01010101010101010101010|1BQV0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", + "America/Campo_Grande|AMST AMT|30 40|01010101010101010101010|1BIr0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|77e4", + "America/Cancun|CST CDT EST|60 50 50|010101010102|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", + "America/Caracas|VET VET|4u 40|01|1QMT0|29e5", + "America/Cayenne|GFT|30|0||58e3", + "America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", + "America/Chihuahua|MST MDT|70 60|01010101010101010101010|1C1l0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4", + "America/Phoenix|MST|70|0||42e5", + "America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", + "America/New_York|EST EDT|50 40|01010101010101010101010|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", + "America/Rio_Branco|AMT ACT|40 50|01|1KLE0|31e4", + "America/Fort_Nelson|PST PDT MST|80 70 70|010101010102|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", + "America/Halifax|AST ADT|40 30|01010101010101010101010|1BQS0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", + "America/Godthab|WGT WGST|30 20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3", + "America/Goose_Bay|AST ADT|40 30|01010101010101010101010|1BQQ1 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2", + "America/Grand_Turk|EST EDT AST|50 40 40|0101010101012|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", + "America/Guayaquil|ECT|50|0||27e5", + "America/Guyana|GYT|40|0||80e4", + "America/Havana|CST CDT|50 40|01010101010101010101010|1BQR0 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", + "America/La_Paz|BOT|40|0||19e5", + "America/Lima|PET|50|0||11e6", + "America/Mexico_City|CST CDT|60 50|01010101010101010101010|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6", + "America/Metlakatla|PST AKST AKDT|80 90 80|012121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", + "America/Miquelon|PMST PMDT|30 20|01010101010101010101010|1BQR0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", + "America/Montevideo|UYST UYT|20 30|010101010101|1BQQ0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5", + "America/Noronha|FNT|20|0||30e2", + "America/North_Dakota/Beulah|MST MDT CST CDT|70 60 60 50|01232323232323232323232|1BQV0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Paramaribo|SRT|30|0||24e4", + "America/Port-au-Prince|EST EDT|50 40|010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", + "America/Santiago|CLST CLT|30 40|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5", + "America/Sao_Paulo|BRST BRT|20 30|01010101010101010101010|1BIq0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|20e6", + "America/Scoresbysund|EGT EGST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452", + "America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1BQPv 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", + "Antarctica/Casey|+11 +08|-b0 -80|01010|1BN30 40P0 KL0 blz0|10", + "Antarctica/Davis|+05 +07|-50 -70|0101|1BPw0 3Wn0 KN0|70", + "Antarctica/DumontDUrville|+10|-a0|0||80", + "Antarctica/Macquarie|AEDT MIST|-b0 -b0|01|1C140|1", + "Asia/Tashkent|+05|-50|0||23e5", + "Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5", + "Antarctica/Rothera|-03|30|0||130", + "Antarctica/Syowa|+03|-30|0||20", + "Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40", + "Asia/Almaty|+06|-60|0||15e5", + "Asia/Baghdad|AST|-30|0||66e5", + "Asia/Amman|EET EEST|-20 -30|010101010101010101010|1BVy0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0|25e5", + "Asia/Kamchatka|+12 +11|-c0 -b0|010|1Dp30 WM0|18e4", + "Asia/Baku|+04 +05|-40 -50|0101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", + "Asia/Bangkok|ICT|-70|0||15e6", + "Asia/Barnaul|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3rd0", + "Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1BWm0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5", + "Asia/Brunei|BNT|-80|0||42e4", + "Asia/Kolkata|IST|-5u|0||15e6", + "Asia/Chita|+09 +10 +08|-90 -a0 -80|010120|1BWh0 1qM0 WM0 8Hz0 3re0|33e4", + "Asia/Choibalsan|CHOT CHOST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3", + "Asia/Shanghai|CST|-80|0||23e6", + "Asia/Colombo|+0530|-5u|0||22e5", + "Asia/Dhaka|BDT|-60|0||16e6", + "Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1C0m0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0|26e5", + "Asia/Dili|TLT|-90|0||19e4", + "Asia/Dubai|GST|-40|0||39e5", + "Asia/Famagusta|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0", + "Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1BVW1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5", + "Asia/Hebron|EET EEST|-20 -30|0101010101010101010101010|1BVy0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4", + "Asia/Hong_Kong|HKT|-80|0||73e5", + "Asia/Hovd|HOVT HOVST|-70 -80|0101010101010|1O8H0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3", + "Asia/Irkutsk|+08 +09|-80 -90|01010|1BWi0 1qM0 WM0 8Hz0|60e4", + "Europe/Istanbul|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", + "Asia/Jakarta|WIB|-70|0||31e6", + "Asia/Jayapura|WIT|-90|0||26e4", + "Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1BVA0 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4", + "Asia/Kabul|AFT|-4u|0||46e5", + "Asia/Karachi|PKT|-50|0||24e6", + "Asia/Urumqi|XJT|-60|0||32e5", + "Asia/Kathmandu|NPT|-5J|0||12e5", + "Asia/Khandyga|+10 +11 +09|-a0 -b0 -90|010102|1BWg0 1qM0 WM0 17V0 7zD0|66e2", + "Asia/Krasnoyarsk|+07 +08|-70 -80|01010|1BWj0 1qM0 WM0 8Hz0|10e5", + "Asia/Kuala_Lumpur|MYT|-80|0||71e5", + "Asia/Magadan|+11 +12 +10|-b0 -c0 -a0|010120|1BWf0 1qM0 WM0 8Hz0 3Cq0|95e3", + "Asia/Makassar|WITA|-80|0||15e5", + "Asia/Manila|PHT|-80|0||24e6", + "Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5", + "Asia/Novokuznetsk|+07 +06|-70 -60|010|1Dp80 WM0|55e4", + "Asia/Novosibirsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 4eN0|15e5", + "Asia/Omsk|+06 +07|-60 -70|01010|1BWk0 1qM0 WM0 8Hz0|12e5", + "Asia/Pyongyang|KST KST|-90 -8u|01|1P4D0|29e5", + "Asia/Rangoon|MMT|-6u|0||48e5", + "Asia/Sakhalin|+10 +11|-a0 -b0|010101|1BWg0 1qM0 WM0 8Hz0 3rd0|58e4", + "Asia/Seoul|KST|-90|0||23e6", + "Asia/Singapore|SGT|-80|0||56e5", + "Asia/Srednekolymsk|+11 +12|-b0 -c0|01010|1BWf0 1qM0 WM0 8Hz0|35e2", + "Asia/Tbilisi|+04|-40|0||11e5", + "Asia/Tehran|IRST IRDT|-3u -4u|01010101010101010101010|1BTUu 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6", + "Asia/Thimphu|BTT|-60|0||79e3", + "Asia/Tokyo|JST|-90|0||38e6", + "Asia/Tomsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3Qp0|10e5", + "Asia/Ulaanbaatar|ULAT ULAST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5", + "Asia/Ust-Nera|+11 +12 +10|-b0 -c0 -a0|010102|1BWf0 1qM0 WM0 17V0 7zD0|65e2", + "Asia/Vladivostok|+10 +11|-a0 -b0|01010|1BWg0 1qM0 WM0 8Hz0|60e4", + "Asia/Yakutsk|+09 +10|-90 -a0|01010|1BWh0 1qM0 WM0 8Hz0|28e4", + "Asia/Yekaterinburg|+05 +06|-50 -60|01010|1BWl0 1qM0 WM0 8Hz0|14e5", + "Asia/Yerevan|+04 +05|-40 -50|01010|1BWm0 1qM0 WM0 1qM0|13e5", + "Atlantic/Azores|AZOT AZOST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", + "Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5", + "Atlantic/Cape_Verde|CVT|10|0||50e4", + "Atlantic/South_Georgia|GST|20|0||30", + "Atlantic/Stanley|FKST FKT|30 40|010|1C6R0 U10|21e2", + "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1C140 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5", + "Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1C14u 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5", + "Australia/Brisbane|AEST|-a0|0||20e5", + "Australia/Darwin|ACST|-9u|0||12e4", + "Australia/Eucla|ACWST|-8J|0||368", + "Australia/Lord_Howe|LHDT LHST|-b0 -au|01010101010101010101010|1C130 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347", + "Australia/Perth|AWST|-80|0||18e5", + "Pacific/Easter|EASST EAST|50 60|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2", + "Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Etc/GMT+1|-01|10|0|", + "Etc/GMT+10|-10|a0|0|", + "Etc/GMT+11|-11|b0|0|", + "Etc/GMT+12|-12|c0|0|", + "Etc/GMT+2|-02|20|0|", + "Etc/GMT+4|-04|40|0|", + "Etc/GMT+5|-05|50|0|", + "Etc/GMT+6|-06|60|0|", + "Etc/GMT+7|-07|70|0|", + "Etc/GMT+8|-08|80|0|", + "Etc/GMT+9|-09|90|0|", + "Etc/GMT-1|+01|-10|0|", + "Etc/GMT-11|+11|-b0|0|", + "Etc/GMT-12|+12|-c0|0|", + "Etc/GMT-13|+13|-d0|0|", + "Etc/GMT-14|+14|-e0|0|", + "Etc/GMT-2|+02|-20|0|", + "Etc/GMT-7|+07|-70|0|", + "Etc/GMT-8|+08|-80|0|", + "Etc/GMT-9|+09|-90|0|", + "Etc/UCT|UCT|0|0|", + "Etc/UTC|UTC|0|0|", + "Europe/Astrakhan|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 3rd0", + "Europe/London|GMT BST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6", + "Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4", + "Europe/Kaliningrad|EET EEST +03|-20 -30 -30|01020|1BWo0 1qM0 WM0 8Hz0|44e4", + "Europe/Volgograd|+03 +04|-30 -40|01010|1BWn0 1qM0 WM0 8Hz0|10e5", + "Europe/Minsk|EET EEST +03|-20 -30 -30|0102|1BWo0 1qM0 WM0|19e5", + "Europe/Moscow|MSK MSD MSK|-30 -40 -40|01020|1BWn0 1qM0 WM0 8Hz0|16e6", + "Europe/Samara|+04 +03|-40 -30|010|1Dpb0 WM0|12e5", + "Europe/Saratov|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 5810", + "Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|01010101023|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4", + "Pacific/Honolulu|HST|a0|0||37e4", + "Indian/Chagos|IOT|-60|0||30e2", + "Indian/Christmas|CXT|-70|0||21e2", + "Indian/Cocos|CCT|-6u|0||596", + "Indian/Mahe|SCT|-40|0||79e3", + "Indian/Maldives|MVT|-50|0||35e4", + "Indian/Mauritius|MUT|-40|0||15e4", + "Indian/Reunion|RET|-40|0||84e4", + "Pacific/Majuro|MHT|-c0|0||28e3", + "MET|MET MEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Pacific/Chatham|CHADT CHAST|-dJ -cJ|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600", + "Pacific/Apia|SST SDT WSDT WSST|b0 a0 -e0 -d0|01012323232323232323232|1Dbn0 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3", + "Pacific/Bougainville|PGT BST|-a0 -b0|01|1NwE0|18e4", + "Pacific/Chuuk|CHUT|-a0|0||49e3", + "Pacific/Efate|VUT|-b0|0||66e3", + "Pacific/Enderbury|PHOT|-d0|0||1", + "Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483", + "Pacific/Fiji|FJST FJT|-d0 -c0|01010101010101010101010|1BWe0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|88e4", + "Pacific/Funafuti|TVT|-c0|0||45e2", + "Pacific/Galapagos|GALT|60|0||25e3", + "Pacific/Gambier|GAMT|90|0||125", + "Pacific/Guadalcanal|SBT|-b0|0||11e4", + "Pacific/Guam|ChST|-a0|0||17e4", + "Pacific/Kiritimati|LINT|-e0|0||51e2", + "Pacific/Kosrae|KOST|-b0|0||66e2", + "Pacific/Marquesas|MART|9u|0||86e2", + "Pacific/Pago_Pago|SST|b0|0||37e2", + "Pacific/Nauru|NRT|-c0|0||10e3", + "Pacific/Niue|NUT|b0|0||12e2", + "Pacific/Norfolk|NFT NFT|-bu -b0|01|1PoCu|25e4", + "Pacific/Noumea|NCT|-b0|0||98e3", + "Pacific/Palau|PWT|-90|0||21e3", + "Pacific/Pitcairn|PST|80|0||56", + "Pacific/Pohnpei|PONT|-b0|0||34e3", + "Pacific/Port_Moresby|PGT|-a0|0||25e4", + "Pacific/Rarotonga|CKT|a0|0||13e3", + "Pacific/Tahiti|TAHT|a0|0||18e4", + "Pacific/Tarawa|GILT|-c0|0||29e3", + "Pacific/Tongatapu|+13 +14|-d0 -e0|0101010101|1S4d0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|75e3", + "Pacific/Wake|WAKT|-c0|0||16e3", + "Pacific/Wallis|WFT|-c0|0||94" + ], + "links": [ + "Africa/Abidjan|Africa/Accra", + "Africa/Abidjan|Africa/Bamako", + "Africa/Abidjan|Africa/Banjul", + "Africa/Abidjan|Africa/Bissau", + "Africa/Abidjan|Africa/Conakry", + "Africa/Abidjan|Africa/Dakar", + "Africa/Abidjan|Africa/Freetown", + "Africa/Abidjan|Africa/Lome", + "Africa/Abidjan|Africa/Monrovia", + "Africa/Abidjan|Africa/Nouakchott", + "Africa/Abidjan|Africa/Ouagadougou", + "Africa/Abidjan|Africa/Sao_Tome", + "Africa/Abidjan|Africa/Timbuktu", + "Africa/Abidjan|America/Danmarkshavn", + "Africa/Abidjan|Atlantic/Reykjavik", + "Africa/Abidjan|Atlantic/St_Helena", + "Africa/Abidjan|Etc/GMT", + "Africa/Abidjan|Etc/GMT+0", + "Africa/Abidjan|Etc/GMT-0", + "Africa/Abidjan|Etc/GMT0", + "Africa/Abidjan|Etc/Greenwich", + "Africa/Abidjan|GMT", + "Africa/Abidjan|GMT+0", + "Africa/Abidjan|GMT-0", + "Africa/Abidjan|GMT0", + "Africa/Abidjan|Greenwich", + "Africa/Abidjan|Iceland", + "Africa/Algiers|Africa/Tunis", + "Africa/Cairo|Egypt", + "Africa/Casablanca|Africa/El_Aaiun", + "Africa/Johannesburg|Africa/Maseru", + "Africa/Johannesburg|Africa/Mbabane", + "Africa/Khartoum|Africa/Addis_Ababa", + "Africa/Khartoum|Africa/Asmara", + "Africa/Khartoum|Africa/Asmera", + "Africa/Khartoum|Africa/Dar_es_Salaam", + "Africa/Khartoum|Africa/Djibouti", + "Africa/Khartoum|Africa/Juba", + "Africa/Khartoum|Africa/Kampala", + "Africa/Khartoum|Africa/Mogadishu", + "Africa/Khartoum|Africa/Nairobi", + "Africa/Khartoum|Indian/Antananarivo", + "Africa/Khartoum|Indian/Comoro", + "Africa/Khartoum|Indian/Mayotte", + "Africa/Lagos|Africa/Bangui", + "Africa/Lagos|Africa/Brazzaville", + "Africa/Lagos|Africa/Douala", + "Africa/Lagos|Africa/Kinshasa", + "Africa/Lagos|Africa/Libreville", + "Africa/Lagos|Africa/Luanda", + "Africa/Lagos|Africa/Malabo", + "Africa/Lagos|Africa/Ndjamena", + "Africa/Lagos|Africa/Niamey", + "Africa/Lagos|Africa/Porto-Novo", + "Africa/Maputo|Africa/Blantyre", + "Africa/Maputo|Africa/Bujumbura", + "Africa/Maputo|Africa/Gaborone", + "Africa/Maputo|Africa/Harare", + "Africa/Maputo|Africa/Kigali", + "Africa/Maputo|Africa/Lubumbashi", + "Africa/Maputo|Africa/Lusaka", + "Africa/Tripoli|Libya", + "America/Adak|America/Atka", + "America/Adak|US/Aleutian", + "America/Anchorage|America/Juneau", + "America/Anchorage|America/Nome", + "America/Anchorage|America/Sitka", + "America/Anchorage|America/Yakutat", + "America/Anchorage|US/Alaska", + "America/Argentina/Buenos_Aires|America/Argentina/Catamarca", + "America/Argentina/Buenos_Aires|America/Argentina/ComodRivadavia", + "America/Argentina/Buenos_Aires|America/Argentina/Cordoba", + "America/Argentina/Buenos_Aires|America/Argentina/Jujuy", + "America/Argentina/Buenos_Aires|America/Argentina/La_Rioja", + "America/Argentina/Buenos_Aires|America/Argentina/Mendoza", + "America/Argentina/Buenos_Aires|America/Argentina/Rio_Gallegos", + "America/Argentina/Buenos_Aires|America/Argentina/Salta", + "America/Argentina/Buenos_Aires|America/Argentina/San_Juan", + "America/Argentina/Buenos_Aires|America/Argentina/San_Luis", + "America/Argentina/Buenos_Aires|America/Argentina/Tucuman", + "America/Argentina/Buenos_Aires|America/Argentina/Ushuaia", + "America/Argentina/Buenos_Aires|America/Buenos_Aires", + "America/Argentina/Buenos_Aires|America/Catamarca", + "America/Argentina/Buenos_Aires|America/Cordoba", + "America/Argentina/Buenos_Aires|America/Jujuy", + "America/Argentina/Buenos_Aires|America/Mendoza", + "America/Argentina/Buenos_Aires|America/Rosario", + "America/Campo_Grande|America/Cuiaba", + "America/Chicago|America/Indiana/Knox", + "America/Chicago|America/Indiana/Tell_City", + "America/Chicago|America/Knox_IN", + "America/Chicago|America/Matamoros", + "America/Chicago|America/Menominee", + "America/Chicago|America/North_Dakota/Center", + "America/Chicago|America/North_Dakota/New_Salem", + "America/Chicago|America/Rainy_River", + "America/Chicago|America/Rankin_Inlet", + "America/Chicago|America/Resolute", + "America/Chicago|America/Winnipeg", + "America/Chicago|CST6CDT", + "America/Chicago|Canada/Central", + "America/Chicago|US/Central", + "America/Chicago|US/Indiana-Starke", + "America/Chihuahua|America/Mazatlan", + "America/Chihuahua|Mexico/BajaSur", + "America/Denver|America/Boise", + "America/Denver|America/Cambridge_Bay", + "America/Denver|America/Edmonton", + "America/Denver|America/Inuvik", + "America/Denver|America/Ojinaga", + "America/Denver|America/Shiprock", + "America/Denver|America/Yellowknife", + "America/Denver|Canada/Mountain", + "America/Denver|MST7MDT", + "America/Denver|Navajo", + "America/Denver|US/Mountain", + "America/Fortaleza|America/Belem", + "America/Fortaleza|America/Maceio", + "America/Fortaleza|America/Recife", + "America/Fortaleza|America/Santarem", + "America/Halifax|America/Glace_Bay", + "America/Halifax|America/Moncton", + "America/Halifax|America/Thule", + "America/Halifax|Atlantic/Bermuda", + "America/Halifax|Canada/Atlantic", + "America/Havana|Cuba", + "America/Los_Angeles|America/Dawson", + "America/Los_Angeles|America/Ensenada", + "America/Los_Angeles|America/Santa_Isabel", + "America/Los_Angeles|America/Tijuana", + "America/Los_Angeles|America/Vancouver", + "America/Los_Angeles|America/Whitehorse", + "America/Los_Angeles|Canada/Pacific", + "America/Los_Angeles|Canada/Yukon", + "America/Los_Angeles|Mexico/BajaNorte", + "America/Los_Angeles|PST8PDT", + "America/Los_Angeles|US/Pacific", + "America/Los_Angeles|US/Pacific-New", + "America/Managua|America/Belize", + "America/Managua|America/Costa_Rica", + "America/Managua|America/El_Salvador", + "America/Managua|America/Guatemala", + "America/Managua|America/Regina", + "America/Managua|America/Swift_Current", + "America/Managua|America/Tegucigalpa", + "America/Managua|Canada/East-Saskatchewan", + "America/Managua|Canada/Saskatchewan", + "America/Manaus|America/Boa_Vista", + "America/Manaus|America/Porto_Velho", + "America/Manaus|Brazil/West", + "America/Mexico_City|America/Merida", + "America/Mexico_City|America/Monterrey", + "America/Mexico_City|Mexico/General", + "America/New_York|America/Detroit", + "America/New_York|America/Fort_Wayne", + "America/New_York|America/Indiana/Indianapolis", + "America/New_York|America/Indiana/Marengo", + "America/New_York|America/Indiana/Petersburg", + "America/New_York|America/Indiana/Vevay", + "America/New_York|America/Indiana/Vincennes", + "America/New_York|America/Indiana/Winamac", + "America/New_York|America/Indianapolis", + "America/New_York|America/Iqaluit", + "America/New_York|America/Kentucky/Louisville", + "America/New_York|America/Kentucky/Monticello", + "America/New_York|America/Louisville", + "America/New_York|America/Montreal", + "America/New_York|America/Nassau", + "America/New_York|America/Nipigon", + "America/New_York|America/Pangnirtung", + "America/New_York|America/Thunder_Bay", + "America/New_York|America/Toronto", + "America/New_York|Canada/Eastern", + "America/New_York|EST5EDT", + "America/New_York|US/East-Indiana", + "America/New_York|US/Eastern", + "America/New_York|US/Michigan", + "America/Noronha|Brazil/DeNoronha", + "America/Panama|America/Atikokan", + "America/Panama|America/Cayman", + "America/Panama|America/Coral_Harbour", + "America/Panama|America/Jamaica", + "America/Panama|EST", + "America/Panama|Jamaica", + "America/Phoenix|America/Creston", + "America/Phoenix|America/Dawson_Creek", + "America/Phoenix|America/Hermosillo", + "America/Phoenix|MST", + "America/Phoenix|US/Arizona", + "America/Rio_Branco|America/Eirunepe", + "America/Rio_Branco|America/Porto_Acre", + "America/Rio_Branco|Brazil/Acre", + "America/Santiago|Antarctica/Palmer", + "America/Santiago|Chile/Continental", + "America/Santo_Domingo|America/Anguilla", + "America/Santo_Domingo|America/Antigua", + "America/Santo_Domingo|America/Aruba", + "America/Santo_Domingo|America/Barbados", + "America/Santo_Domingo|America/Blanc-Sablon", + "America/Santo_Domingo|America/Curacao", + "America/Santo_Domingo|America/Dominica", + "America/Santo_Domingo|America/Grenada", + "America/Santo_Domingo|America/Guadeloupe", + "America/Santo_Domingo|America/Kralendijk", + "America/Santo_Domingo|America/Lower_Princes", + "America/Santo_Domingo|America/Marigot", + "America/Santo_Domingo|America/Martinique", + "America/Santo_Domingo|America/Montserrat", + "America/Santo_Domingo|America/Port_of_Spain", + "America/Santo_Domingo|America/Puerto_Rico", + "America/Santo_Domingo|America/St_Barthelemy", + "America/Santo_Domingo|America/St_Kitts", + "America/Santo_Domingo|America/St_Lucia", + "America/Santo_Domingo|America/St_Thomas", + "America/Santo_Domingo|America/St_Vincent", + "America/Santo_Domingo|America/Tortola", + "America/Santo_Domingo|America/Virgin", + "America/Sao_Paulo|Brazil/East", + "America/St_Johns|Canada/Newfoundland", + "Antarctica/DumontDUrville|Etc/GMT-10", + "Antarctica/Rothera|Etc/GMT+3", + "Antarctica/Syowa|Etc/GMT-3", + "Asia/Almaty|Antarctica/Vostok", + "Asia/Almaty|Asia/Bishkek", + "Asia/Almaty|Asia/Qyzylorda", + "Asia/Almaty|Etc/GMT-6", + "Asia/Baghdad|Asia/Aden", + "Asia/Baghdad|Asia/Bahrain", + "Asia/Baghdad|Asia/Kuwait", + "Asia/Baghdad|Asia/Qatar", + "Asia/Baghdad|Asia/Riyadh", + "Asia/Bangkok|Asia/Ho_Chi_Minh", + "Asia/Bangkok|Asia/Phnom_Penh", + "Asia/Bangkok|Asia/Saigon", + "Asia/Bangkok|Asia/Vientiane", + "Asia/Dhaka|Asia/Dacca", + "Asia/Dubai|Asia/Muscat", + "Asia/Hong_Kong|Hongkong", + "Asia/Jakarta|Asia/Pontianak", + "Asia/Jerusalem|Asia/Tel_Aviv", + "Asia/Jerusalem|Israel", + "Asia/Kamchatka|Asia/Anadyr", + "Asia/Kathmandu|Asia/Katmandu", + "Asia/Kolkata|Asia/Calcutta", + "Asia/Kuala_Lumpur|Asia/Kuching", + "Asia/Makassar|Asia/Ujung_Pandang", + "Asia/Rangoon|Asia/Yangon", + "Asia/Seoul|ROK", + "Asia/Shanghai|Asia/Chongqing", + "Asia/Shanghai|Asia/Chungking", + "Asia/Shanghai|Asia/Harbin", + "Asia/Shanghai|Asia/Macao", + "Asia/Shanghai|Asia/Macau", + "Asia/Shanghai|Asia/Taipei", + "Asia/Shanghai|PRC", + "Asia/Shanghai|ROC", + "Asia/Singapore|Singapore", + "Asia/Tashkent|Antarctica/Mawson", + "Asia/Tashkent|Asia/Aqtau", + "Asia/Tashkent|Asia/Aqtobe", + "Asia/Tashkent|Asia/Ashgabat", + "Asia/Tashkent|Asia/Ashkhabad", + "Asia/Tashkent|Asia/Atyrau", + "Asia/Tashkent|Asia/Dushanbe", + "Asia/Tashkent|Asia/Oral", + "Asia/Tashkent|Asia/Samarkand", + "Asia/Tashkent|Etc/GMT-5", + "Asia/Tashkent|Indian/Kerguelen", + "Asia/Tbilisi|Etc/GMT-4", + "Asia/Tehran|Iran", + "Asia/Thimphu|Asia/Thimbu", + "Asia/Tokyo|Japan", + "Asia/Ulaanbaatar|Asia/Ulan_Bator", + "Asia/Urumqi|Asia/Kashgar", + "Australia/Adelaide|Australia/Broken_Hill", + "Australia/Adelaide|Australia/South", + "Australia/Adelaide|Australia/Yancowinna", + "Australia/Brisbane|Australia/Lindeman", + "Australia/Brisbane|Australia/Queensland", + "Australia/Darwin|Australia/North", + "Australia/Lord_Howe|Australia/LHI", + "Australia/Perth|Australia/West", + "Australia/Sydney|Australia/ACT", + "Australia/Sydney|Australia/Canberra", + "Australia/Sydney|Australia/Currie", + "Australia/Sydney|Australia/Hobart", + "Australia/Sydney|Australia/Melbourne", + "Australia/Sydney|Australia/NSW", + "Australia/Sydney|Australia/Tasmania", + "Australia/Sydney|Australia/Victoria", + "Etc/UCT|UCT", + "Etc/UTC|Etc/Universal", + "Etc/UTC|Etc/Zulu", + "Etc/UTC|UTC", + "Etc/UTC|Universal", + "Etc/UTC|Zulu", + "Europe/Astrakhan|Europe/Ulyanovsk", + "Europe/Athens|Asia/Nicosia", + "Europe/Athens|EET", + "Europe/Athens|Europe/Bucharest", + "Europe/Athens|Europe/Helsinki", + "Europe/Athens|Europe/Kiev", + "Europe/Athens|Europe/Mariehamn", + "Europe/Athens|Europe/Nicosia", + "Europe/Athens|Europe/Riga", + "Europe/Athens|Europe/Sofia", + "Europe/Athens|Europe/Tallinn", + "Europe/Athens|Europe/Uzhgorod", + "Europe/Athens|Europe/Vilnius", + "Europe/Athens|Europe/Zaporozhye", + "Europe/Chisinau|Europe/Tiraspol", + "Europe/Dublin|Eire", + "Europe/Istanbul|Asia/Istanbul", + "Europe/Istanbul|Turkey", + "Europe/Lisbon|Atlantic/Canary", + "Europe/Lisbon|Atlantic/Faeroe", + "Europe/Lisbon|Atlantic/Faroe", + "Europe/Lisbon|Atlantic/Madeira", + "Europe/Lisbon|Portugal", + "Europe/Lisbon|WET", + "Europe/London|Europe/Belfast", + "Europe/London|Europe/Guernsey", + "Europe/London|Europe/Isle_of_Man", + "Europe/London|Europe/Jersey", + "Europe/London|GB", + "Europe/London|GB-Eire", + "Europe/Moscow|W-SU", + "Europe/Paris|Africa/Ceuta", + "Europe/Paris|Arctic/Longyearbyen", + "Europe/Paris|Atlantic/Jan_Mayen", + "Europe/Paris|CET", + "Europe/Paris|Europe/Amsterdam", + "Europe/Paris|Europe/Andorra", + "Europe/Paris|Europe/Belgrade", + "Europe/Paris|Europe/Berlin", + "Europe/Paris|Europe/Bratislava", + "Europe/Paris|Europe/Brussels", + "Europe/Paris|Europe/Budapest", + "Europe/Paris|Europe/Busingen", + "Europe/Paris|Europe/Copenhagen", + "Europe/Paris|Europe/Gibraltar", + "Europe/Paris|Europe/Ljubljana", + "Europe/Paris|Europe/Luxembourg", + "Europe/Paris|Europe/Madrid", + "Europe/Paris|Europe/Malta", + "Europe/Paris|Europe/Monaco", + "Europe/Paris|Europe/Oslo", + "Europe/Paris|Europe/Podgorica", + "Europe/Paris|Europe/Prague", + "Europe/Paris|Europe/Rome", + "Europe/Paris|Europe/San_Marino", + "Europe/Paris|Europe/Sarajevo", + "Europe/Paris|Europe/Skopje", + "Europe/Paris|Europe/Stockholm", + "Europe/Paris|Europe/Tirane", + "Europe/Paris|Europe/Vaduz", + "Europe/Paris|Europe/Vatican", + "Europe/Paris|Europe/Vienna", + "Europe/Paris|Europe/Warsaw", + "Europe/Paris|Europe/Zagreb", + "Europe/Paris|Europe/Zurich", + "Europe/Paris|Poland", + "Europe/Volgograd|Europe/Kirov", + "Pacific/Auckland|Antarctica/McMurdo", + "Pacific/Auckland|Antarctica/South_Pole", + "Pacific/Auckland|NZ", + "Pacific/Chatham|NZ-CHAT", + "Pacific/Chuuk|Pacific/Truk", + "Pacific/Chuuk|Pacific/Yap", + "Pacific/Easter|Chile/EasterIsland", + "Pacific/Guam|Pacific/Saipan", + "Pacific/Honolulu|HST", + "Pacific/Honolulu|Pacific/Johnston", + "Pacific/Honolulu|US/Hawaii", + "Pacific/Majuro|Kwajalein", + "Pacific/Majuro|Pacific/Kwajalein", + "Pacific/Pago_Pago|Pacific/Midway", + "Pacific/Pago_Pago|Pacific/Samoa", + "Pacific/Pago_Pago|US/Samoa", + "Pacific/Pohnpei|Pacific/Ponape" + ] + }); + + + return moment; +})); diff --git a/node_modules/moment-timezone/builds/moment-timezone-with-data-2010-2020.min.js b/node_modules/moment-timezone/builds/moment-timezone-with-data-2010-2020.min.js new file mode 100644 index 0000000..e4bc425 --- /dev/null +++ b/node_modules/moment-timezone/builds/moment-timezone-with-data-2010-2020.min.js @@ -0,0 +1,7 @@ +//! moment-timezone.js +//! version : 0.5.11 +//! Copyright (c) JS Foundation and other contributors +//! license : MIT +//! github.com/moment/moment-timezone +!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["moment"],b):"object"==typeof module&&module.exports?module.exports=b(require("moment")):b(a.moment)}(this,function(a){"use strict";function b(a){return a>96?a-87:a>64?a-29:a-48}function c(a){var c,d=0,e=a.split("."),f=e[0],g=e[1]||"",h=1,i=0,j=1;for(45===a.charCodeAt(0)&&(d=1,j=-1),d;d0?k[0].zone.name:void 0}function q(a){return D&&!a||(D=p()),D}function r(a){return(a||"").toLowerCase().replace(/\//g,"_")}function s(a){var b,c,d,e;for("string"==typeof a&&(a=[a]),b=0;b= 2.6.0. You are using Moment.js "+a.version+". See momentjs.com"),h.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var b,c=+a,d=this.untils;for(b=0;bd&&A.moveInvalidForward&&(b=d),f= 2.9.0. You are using Moment.js "+a.version+"."),a.defaultZone=b?t(b):null,a};var N=a.momentProperties;return"[object Array]"===Object.prototype.toString.call(N)?(N.push("_z"),N.push("_a")):N&&(N._z=null),w({version:"2016j",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Khartoum|EAT|-30|0||51e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|010101010|1Cby0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|WET WEST|0 -10|01010101010101010101010101010101010101010|1Cco0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|WAST WAT|-20 -10|01010101010101010101010|1C1c0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1BR00 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1BQX0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|BRT BRST|30 20|010|1IdD0 Lz0|14e4","America/Argentina/Buenos_Aires|ART|30|0|","America/Asuncion|PYST PYT|30 40|01010101010101010101010|1C430 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Panama|EST|50|0||15e5","America/Bahia|BRT BRST|30 20|010|1FJf0 Rb0|27e5","America/Bahia_Banderas|MST CDT CST|70 50 60|01212121212121212121212|1C1l0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3","America/Fortaleza|BRT|30|0||34e5","America/Managua|CST|60|0||22e5","America/Manaus|AMT|40|0||19e5","America/Bogota|COT|50|0||90e5","America/Denver|MST MDT|70 60|01010101010101010101010|1BQV0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|AMST AMT|30 40|01010101010101010101010|1BIr0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|77e4","America/Cancun|CST CDT EST|60 50 50|010101010102|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|VET VET|4u 40|01|1QMT0|29e5","America/Cayenne|GFT|30|0||58e3","America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1C1l0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4","America/Phoenix|MST|70|0||42e5","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/New_York|EST EDT|50 40|01010101010101010101010|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|AMT ACT|40 50|01|1KLE0|31e4","America/Fort_Nelson|PST PDT MST|80 70 70|010101010102|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1BQS0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Godthab|WGT WGST|30 20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|AST ADT|40 30|01010101010101010101010|1BQQ1 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|EST EDT AST|50 40 40|0101010101012|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guayaquil|ECT|50|0||27e5","America/Guyana|GYT|40|0||80e4","America/Havana|CST CDT|50 40|01010101010101010101010|1BQR0 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/La_Paz|BOT|40|0||19e5","America/Lima|PET|50|0||11e6","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6","America/Metlakatla|PST AKST AKDT|80 90 80|012121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Miquelon|PMST PMDT|30 20|01010101010101010101010|1BQR0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Montevideo|UYST UYT|20 30|010101010101|1BQQ0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|FNT|20|0||30e2","America/North_Dakota/Beulah|MST MDT CST CDT|70 60 60 50|01232323232323232323232|1BQV0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Paramaribo|SRT|30|0||24e4","America/Port-au-Prince|EST EDT|50 40|010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Santiago|CLST CLT|30 40|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5","America/Sao_Paulo|BRST BRT|20 30|01010101010101010101010|1BIq0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|20e6","America/Scoresbysund|EGT EGST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1BQPv 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|01010|1BN30 40P0 KL0 blz0|10","Antarctica/Davis|+05 +07|-50 -70|0101|1BPw0 3Wn0 KN0|70","Antarctica/DumontDUrville|+10|-a0|0||80","Antarctica/Macquarie|AEDT MIST|-b0 -b0|01|1C140|1","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Rothera|-03|30|0||130","Antarctica/Syowa|+03|-30|0||20","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40","Asia/Almaty|+06|-60|0||15e5","Asia/Baghdad|AST|-30|0||66e5","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1BVy0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0|25e5","Asia/Kamchatka|+12 +11|-c0 -b0|010|1Dp30 WM0|18e4","Asia/Baku|+04 +05|-40 -50|0101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|ICT|-70|0||15e6","Asia/Barnaul|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3rd0","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1BWm0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5","Asia/Brunei|BNT|-80|0||42e4","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+09 +10 +08|-90 -a0 -80|010120|1BWh0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|CHOT CHOST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Dhaka|BDT|-60|0||16e6","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1C0m0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0|26e5","Asia/Dili|TLT|-90|0||19e4","Asia/Dubai|GST|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1BVW1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5","Asia/Hebron|EET EEST|-20 -30|0101010101010101010101010|1BVy0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|HOVT HOVST|-70 -80|0101010101010|1O8H0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+08 +09|-80 -90|01010|1BWi0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1BVA0 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|AFT|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Urumqi|XJT|-60|0||32e5","Asia/Kathmandu|NPT|-5J|0||12e5","Asia/Khandyga|+10 +11 +09|-a0 -b0 -90|010102|1BWg0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|+07 +08|-70 -80|01010|1BWj0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|MYT|-80|0||71e5","Asia/Magadan|+11 +12 +10|-b0 -c0 -a0|010120|1BWf0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PHT|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5","Asia/Novokuznetsk|+07 +06|-70 -60|010|1Dp80 WM0|55e4","Asia/Novosibirsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|+06 +07|-60 -70|01010|1BWk0 1qM0 WM0 8Hz0|12e5","Asia/Pyongyang|KST KST|-90 -8u|01|1P4D0|29e5","Asia/Rangoon|MMT|-6u|0||48e5","Asia/Sakhalin|+10 +11|-a0 -b0|010101|1BWg0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Singapore|SGT|-80|0||56e5","Asia/Srednekolymsk|+11 +12|-b0 -c0|01010|1BWf0 1qM0 WM0 8Hz0|35e2","Asia/Tbilisi|+04|-40|0||11e5","Asia/Tehran|IRST IRDT|-3u -4u|01010101010101010101010|1BTUu 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|BTT|-60|0||79e3","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|ULAT ULAST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|+11 +12 +10|-b0 -c0 -a0|010102|1BWf0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|+10 +11|-a0 -b0|01010|1BWg0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|+09 +10|-90 -a0|01010|1BWh0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|+05 +06|-50 -60|01010|1BWl0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|+04 +05|-40 -50|01010|1BWm0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|AZOT AZOST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5","Atlantic/Cape_Verde|CVT|10|0||50e4","Atlantic/South_Georgia|GST|20|0||30","Atlantic/Stanley|FKST FKT|30 40|010|1C6R0 U10|21e2","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1C140 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1C14u 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|ACWST|-8J|0||368","Australia/Lord_Howe|LHDT LHST|-b0 -au|01010101010101010101010|1C130 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|EASST EAST|50 60|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Etc/GMT+1|-01|10|0|","Etc/GMT+10|-10|a0|0|","Etc/GMT+11|-11|b0|0|","Etc/GMT+12|-12|c0|0|","Etc/GMT+2|-02|20|0|","Etc/GMT+4|-04|40|0|","Etc/GMT+5|-05|50|0|","Etc/GMT+6|-06|60|0|","Etc/GMT+7|-07|70|0|","Etc/GMT+8|-08|80|0|","Etc/GMT+9|-09|90|0|","Etc/GMT-1|+01|-10|0|","Etc/GMT-11|+11|-b0|0|","Etc/GMT-12|+12|-c0|0|","Etc/GMT-13|+13|-d0|0|","Etc/GMT-14|+14|-e0|0|","Etc/GMT-2|+02|-20|0|","Etc/GMT-7|+07|-70|0|","Etc/GMT-8|+08|-80|0|","Etc/GMT-9|+09|-90|0|","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Astrakhan|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 3rd0","Europe/London|GMT BST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4","Europe/Kaliningrad|EET EEST +03|-20 -30 -30|01020|1BWo0 1qM0 WM0 8Hz0|44e4","Europe/Volgograd|+03 +04|-30 -40|01010|1BWn0 1qM0 WM0 8Hz0|10e5","Europe/Minsk|EET EEST +03|-20 -30 -30|0102|1BWo0 1qM0 WM0|19e5","Europe/Moscow|MSK MSD MSK|-30 -40 -40|01020|1BWn0 1qM0 WM0 8Hz0|16e6","Europe/Samara|+04 +03|-40 -30|010|1Dpb0 WM0|12e5","Europe/Saratov|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 5810","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|01010101023|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Pacific/Honolulu|HST|a0|0||37e4","Indian/Chagos|IOT|-60|0||30e2","Indian/Christmas|CXT|-70|0||21e2","Indian/Cocos|CCT|-6u|0||596","Indian/Mahe|SCT|-40|0||79e3","Indian/Maldives|MVT|-50|0||35e4","Indian/Mauritius|MUT|-40|0||15e4","Indian/Reunion|RET|-40|0||84e4","Pacific/Majuro|MHT|-c0|0||28e3","MET|MET MEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Pacific/Chatham|CHADT CHAST|-dJ -cJ|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|SST SDT WSDT WSST|b0 a0 -e0 -d0|01012323232323232323232|1Dbn0 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|PGT BST|-a0 -b0|01|1NwE0|18e4","Pacific/Chuuk|CHUT|-a0|0||49e3","Pacific/Efate|VUT|-b0|0||66e3","Pacific/Enderbury|PHOT|-d0|0||1","Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483","Pacific/Fiji|FJST FJT|-d0 -c0|01010101010101010101010|1BWe0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|88e4","Pacific/Funafuti|TVT|-c0|0||45e2","Pacific/Galapagos|GALT|60|0||25e3","Pacific/Gambier|GAMT|90|0||125","Pacific/Guadalcanal|SBT|-b0|0||11e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Kiritimati|LINT|-e0|0||51e2","Pacific/Kosrae|KOST|-b0|0||66e2","Pacific/Marquesas|MART|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Nauru|NRT|-c0|0||10e3","Pacific/Niue|NUT|b0|0||12e2","Pacific/Norfolk|NFT NFT|-bu -b0|01|1PoCu|25e4","Pacific/Noumea|NCT|-b0|0||98e3","Pacific/Palau|PWT|-90|0||21e3","Pacific/Pitcairn|PST|80|0||56","Pacific/Pohnpei|PONT|-b0|0||34e3","Pacific/Port_Moresby|PGT|-a0|0||25e4","Pacific/Rarotonga|CKT|a0|0||13e3","Pacific/Tahiti|TAHT|a0|0||18e4","Pacific/Tarawa|GILT|-c0|0||29e3","Pacific/Tongatapu|+13 +14|-d0 -e0|0101010101|1S4d0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|75e3","Pacific/Wake|WAKT|-c0|0||16e3","Pacific/Wallis|WFT|-c0|0||94"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Sao_Tome","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Khartoum|Africa/Addis_Ababa","Africa/Khartoum|Africa/Asmara","Africa/Khartoum|Africa/Asmera","Africa/Khartoum|Africa/Dar_es_Salaam","Africa/Khartoum|Africa/Djibouti","Africa/Khartoum|Africa/Juba","Africa/Khartoum|Africa/Kampala","Africa/Khartoum|Africa/Mogadishu","Africa/Khartoum|Africa/Nairobi","Africa/Khartoum|Indian/Antananarivo","Africa/Khartoum|Indian/Comoro","Africa/Khartoum|Indian/Mayotte","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Argentina/Catamarca","America/Argentina/Buenos_Aires|America/Argentina/ComodRivadavia","America/Argentina/Buenos_Aires|America/Argentina/Cordoba","America/Argentina/Buenos_Aires|America/Argentina/Jujuy","America/Argentina/Buenos_Aires|America/Argentina/La_Rioja","America/Argentina/Buenos_Aires|America/Argentina/Mendoza","America/Argentina/Buenos_Aires|America/Argentina/Rio_Gallegos","America/Argentina/Buenos_Aires|America/Argentina/Salta","America/Argentina/Buenos_Aires|America/Argentina/San_Juan","America/Argentina/Buenos_Aires|America/Argentina/San_Luis","America/Argentina/Buenos_Aires|America/Argentina/Tucuman","America/Argentina/Buenos_Aires|America/Argentina/Ushuaia","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Buenos_Aires|America/Catamarca","America/Argentina/Buenos_Aires|America/Cordoba","America/Argentina/Buenos_Aires|America/Jujuy","America/Argentina/Buenos_Aires|America/Mendoza","America/Argentina/Buenos_Aires|America/Rosario","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Belem","America/Fortaleza|America/Maceio","America/Fortaleza|America/Recife","America/Fortaleza|America/Santarem","America/Halifax|America/Glace_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Los_Angeles|America/Dawson","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|America/Whitehorse","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Canada/Yukon","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/East-Saskatchewan","America/Managua|Canada/Saskatchewan","America/Manaus|America/Boa_Vista","America/Manaus|America/Porto_Velho","America/Manaus|Brazil/West","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Antarctica/Palmer","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","Antarctica/DumontDUrville|Etc/GMT-10","Antarctica/Rothera|Etc/GMT+3","Antarctica/Syowa|Etc/GMT-3","Asia/Almaty|Antarctica/Vostok","Asia/Almaty|Asia/Bishkek","Asia/Almaty|Asia/Qyzylorda","Asia/Almaty|Etc/GMT-6","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Singapore|Singapore","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tbilisi|Etc/GMT-4","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Astrakhan|Europe/Ulyanovsk","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Volgograd|Europe/Kirov","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Chuuk|Pacific/Truk","Pacific/Chuuk|Pacific/Yap","Pacific/Easter|Chile/EasterIsland","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Majuro|Kwajalein","Pacific/Majuro|Pacific/Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pohnpei|Pacific/Ponape"] +}),a}); \ No newline at end of file diff --git a/node_modules/moment-timezone/builds/moment-timezone-with-data.js b/node_modules/moment-timezone/builds/moment-timezone-with-data.js new file mode 100644 index 0000000..16945de --- /dev/null +++ b/node_modules/moment-timezone/builds/moment-timezone-with-data.js @@ -0,0 +1,1200 @@ +//! moment-timezone.js +//! version : 0.5.11 +//! Copyright (c) JS Foundation and other contributors +//! license : MIT +//! github.com/moment/moment-timezone + +(function (root, factory) { + "use strict"; + + /*global define*/ + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof module === 'object' && module.exports) { + module.exports = factory(require('moment')); // Node + } else { + factory(root.moment); // Browser + } +}(this, function (moment) { + "use strict"; + + // Do not load moment-timezone a second time. + // if (moment.tz !== undefined) { + // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); + // return moment; + // } + + var VERSION = "0.5.11", + zones = {}, + links = {}, + names = {}, + guesses = {}, + cachedGuess, + + momentVersion = moment.version.split('.'), + major = +momentVersion[0], + minor = +momentVersion[1]; + + // Moment.js version check + if (major < 2 || (major === 2 && minor < 6)) { + logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); + } + + /************************************ + Unpacking + ************************************/ + + function charCodeToInt(charCode) { + if (charCode > 96) { + return charCode - 87; + } else if (charCode > 64) { + return charCode - 29; + } + return charCode - 48; + } + + function unpackBase60(string) { + var i = 0, + parts = string.split('.'), + whole = parts[0], + fractional = parts[1] || '', + multiplier = 1, + num, + out = 0, + sign = 1; + + // handle negative numbers + if (string.charCodeAt(0) === 45) { + i = 1; + sign = -1; + } + + // handle digits before the decimal + for (i; i < whole.length; i++) { + num = charCodeToInt(whole.charCodeAt(i)); + out = 60 * out + num; + } + + // handle digits after the decimal + for (i = 0; i < fractional.length; i++) { + multiplier = multiplier / 60; + num = charCodeToInt(fractional.charCodeAt(i)); + out += num * multiplier; + } + + return out * sign; + } + + function arrayToInt (array) { + for (var i = 0; i < array.length; i++) { + array[i] = unpackBase60(array[i]); + } + } + + function intToUntil (array, length) { + for (var i = 0; i < length; i++) { + array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds + } + + array[length - 1] = Infinity; + } + + function mapIndices (source, indices) { + var out = [], i; + + for (i = 0; i < indices.length; i++) { + out[i] = source[indices[i]]; + } + + return out; + } + + function unpack (string) { + var data = string.split('|'), + offsets = data[2].split(' '), + indices = data[3].split(''), + untils = data[4].split(' '); + + arrayToInt(offsets); + arrayToInt(indices); + arrayToInt(untils); + + intToUntil(untils, indices.length); + + return { + name : data[0], + abbrs : mapIndices(data[1].split(' '), indices), + offsets : mapIndices(offsets, indices), + untils : untils, + population : data[5] | 0 + }; + } + + /************************************ + Zone object + ************************************/ + + function Zone (packedString) { + if (packedString) { + this._set(unpack(packedString)); + } + } + + Zone.prototype = { + _set : function (unpacked) { + this.name = unpacked.name; + this.abbrs = unpacked.abbrs; + this.untils = unpacked.untils; + this.offsets = unpacked.offsets; + this.population = unpacked.population; + }, + + _index : function (timestamp) { + var target = +timestamp, + untils = this.untils, + i; + + for (i = 0; i < untils.length; i++) { + if (target < untils[i]) { + return i; + } + } + }, + + parse : function (timestamp) { + var target = +timestamp, + offsets = this.offsets, + untils = this.untils, + max = untils.length - 1, + offset, offsetNext, offsetPrev, i; + + for (i = 0; i < max; i++) { + offset = offsets[i]; + offsetNext = offsets[i + 1]; + offsetPrev = offsets[i ? i - 1 : i]; + + if (offset < offsetNext && tz.moveAmbiguousForward) { + offset = offsetNext; + } else if (offset > offsetPrev && tz.moveInvalidForward) { + offset = offsetPrev; + } + + if (target < untils[i] - (offset * 60000)) { + return offsets[i]; + } + } + + return offsets[max]; + }, + + abbr : function (mom) { + return this.abbrs[this._index(mom)]; + }, + + offset : function (mom) { + return this.offsets[this._index(mom)]; + } + }; + + /************************************ + Current Timezone + ************************************/ + + function OffsetAt(at) { + var timeString = at.toTimeString(); + var abbr = timeString.match(/\([a-z ]+\)/i); + if (abbr && abbr[0]) { + // 17:56:31 GMT-0600 (CST) + // 17:56:31 GMT-0600 (Central Standard Time) + abbr = abbr[0].match(/[A-Z]/g); + abbr = abbr ? abbr.join('') : undefined; + } else { + // 17:56:31 CST + // 17:56:31 GMT+0800 (台北標準時間) + abbr = timeString.match(/[A-Z]{3,5}/g); + abbr = abbr ? abbr[0] : undefined; + } + + if (abbr === 'GMT') { + abbr = undefined; + } + + this.at = +at; + this.abbr = abbr; + this.offset = at.getTimezoneOffset(); + } + + function ZoneScore(zone) { + this.zone = zone; + this.offsetScore = 0; + this.abbrScore = 0; + } + + ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { + this.offsetScore += Math.abs(this.zone.offset(offsetAt.at) - offsetAt.offset); + if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { + this.abbrScore++; + } + }; + + function findChange(low, high) { + var mid, diff; + + while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { + mid = new OffsetAt(new Date(low.at + diff)); + if (mid.offset === low.offset) { + low = mid; + } else { + high = mid; + } + } + + return low; + } + + function userOffsets() { + var startYear = new Date().getFullYear() - 2, + last = new OffsetAt(new Date(startYear, 0, 1)), + offsets = [last], + change, next, i; + + for (i = 1; i < 48; i++) { + next = new OffsetAt(new Date(startYear, i, 1)); + if (next.offset !== last.offset) { + change = findChange(last, next); + offsets.push(change); + offsets.push(new OffsetAt(new Date(change.at + 6e4))); + } + last = next; + } + + for (i = 0; i < 4; i++) { + offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); + offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); + } + + return offsets; + } + + function sortZoneScores (a, b) { + if (a.offsetScore !== b.offsetScore) { + return a.offsetScore - b.offsetScore; + } + if (a.abbrScore !== b.abbrScore) { + return a.abbrScore - b.abbrScore; + } + return b.zone.population - a.zone.population; + } + + function addToGuesses (name, offsets) { + var i, offset; + arrayToInt(offsets); + for (i = 0; i < offsets.length; i++) { + offset = offsets[i]; + guesses[offset] = guesses[offset] || {}; + guesses[offset][name] = true; + } + } + + function guessesForUserOffsets (offsets) { + var offsetsLength = offsets.length, + filteredGuesses = {}, + out = [], + i, j, guessesOffset; + + for (i = 0; i < offsetsLength; i++) { + guessesOffset = guesses[offsets[i].offset] || {}; + for (j in guessesOffset) { + if (guessesOffset.hasOwnProperty(j)) { + filteredGuesses[j] = true; + } + } + } + + for (i in filteredGuesses) { + if (filteredGuesses.hasOwnProperty(i)) { + out.push(names[i]); + } + } + + return out; + } + + function rebuildGuess () { + + // use Intl API when available and returning valid time zone + try { + var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; + if (intlName){ + var name = names[normalizeName(intlName)]; + if (name) { + return name; + } + logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); + } + } catch (e) { + // Intl unavailable, fall back to manual guessing. + } + + var offsets = userOffsets(), + offsetsLength = offsets.length, + guesses = guessesForUserOffsets(offsets), + zoneScores = [], + zoneScore, i, j; + + for (i = 0; i < guesses.length; i++) { + zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); + for (j = 0; j < offsetsLength; j++) { + zoneScore.scoreOffsetAt(offsets[j]); + } + zoneScores.push(zoneScore); + } + + zoneScores.sort(sortZoneScores); + + return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; + } + + function guess (ignoreCache) { + if (!cachedGuess || ignoreCache) { + cachedGuess = rebuildGuess(); + } + return cachedGuess; + } + + /************************************ + Global Methods + ************************************/ + + function normalizeName (name) { + return (name || '').toLowerCase().replace(/\//g, '_'); + } + + function addZone (packed) { + var i, name, split, normalized; + + if (typeof packed === "string") { + packed = [packed]; + } + + for (i = 0; i < packed.length; i++) { + split = packed[i].split('|'); + name = split[0]; + normalized = normalizeName(name); + zones[normalized] = packed[i]; + names[normalized] = name; + if (split[5]) { + addToGuesses(normalized, split[2].split(' ')); + } + } + } + + function getZone (name, caller) { + name = normalizeName(name); + + var zone = zones[name]; + var link; + + if (zone instanceof Zone) { + return zone; + } + + if (typeof zone === 'string') { + zone = new Zone(zone); + zones[name] = zone; + return zone; + } + + // Pass getZone to prevent recursion more than 1 level deep + if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { + zone = zones[name] = new Zone(); + zone._set(link); + zone.name = names[name]; + return zone; + } + + return null; + } + + function getNames () { + var i, out = []; + + for (i in names) { + if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { + out.push(names[i]); + } + } + + return out.sort(); + } + + function addLink (aliases) { + var i, alias, normal0, normal1; + + if (typeof aliases === "string") { + aliases = [aliases]; + } + + for (i = 0; i < aliases.length; i++) { + alias = aliases[i].split('|'); + + normal0 = normalizeName(alias[0]); + normal1 = normalizeName(alias[1]); + + links[normal0] = normal1; + names[normal0] = alias[0]; + + links[normal1] = normal0; + names[normal1] = alias[1]; + } + } + + function loadData (data) { + addZone(data.zones); + addLink(data.links); + tz.dataVersion = data.version; + } + + function zoneExists (name) { + if (!zoneExists.didShowError) { + zoneExists.didShowError = true; + logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); + } + return !!getZone(name); + } + + function needsOffset (m) { + return !!(m._a && (m._tzm === undefined)); + } + + function logError (message) { + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + } + + /************************************ + moment.tz namespace + ************************************/ + + function tz (input) { + var args = Array.prototype.slice.call(arguments, 0, -1), + name = arguments[arguments.length - 1], + zone = getZone(name), + out = moment.utc.apply(null, args); + + if (zone && !moment.isMoment(input) && needsOffset(out)) { + out.add(zone.parse(out), 'minutes'); + } + + out.tz(name); + + return out; + } + + tz.version = VERSION; + tz.dataVersion = ''; + tz._zones = zones; + tz._links = links; + tz._names = names; + tz.add = addZone; + tz.link = addLink; + tz.load = loadData; + tz.zone = getZone; + tz.zoneExists = zoneExists; // deprecated in 0.1.0 + tz.guess = guess; + tz.names = getNames; + tz.Zone = Zone; + tz.unpack = unpack; + tz.unpackBase60 = unpackBase60; + tz.needsOffset = needsOffset; + tz.moveInvalidForward = true; + tz.moveAmbiguousForward = false; + + /************************************ + Interface with Moment.js + ************************************/ + + var fn = moment.fn; + + moment.tz = tz; + + moment.defaultZone = null; + + moment.updateOffset = function (mom, keepTime) { + var zone = moment.defaultZone, + offset; + + if (mom._z === undefined) { + if (zone && needsOffset(mom) && !mom._isUTC) { + mom._d = moment.utc(mom._a)._d; + mom.utc().add(zone.parse(mom), 'minutes'); + } + mom._z = zone; + } + if (mom._z) { + offset = mom._z.offset(mom); + if (Math.abs(offset) < 16) { + offset = offset / 60; + } + if (mom.utcOffset !== undefined) { + mom.utcOffset(-offset, keepTime); + } else { + mom.zone(offset, keepTime); + } + } + }; + + fn.tz = function (name) { + if (name) { + this._z = getZone(name); + if (this._z) { + moment.updateOffset(this); + } else { + logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); + } + return this; + } + if (this._z) { return this._z.name; } + }; + + function abbrWrap (old) { + return function () { + if (this._z) { return this._z.abbr(this); } + return old.call(this); + }; + } + + function resetZoneWrap (old) { + return function () { + this._z = null; + return old.apply(this, arguments); + }; + } + + fn.zoneName = abbrWrap(fn.zoneName); + fn.zoneAbbr = abbrWrap(fn.zoneAbbr); + fn.utc = resetZoneWrap(fn.utc); + + moment.tz.setDefault = function(name) { + if (major < 2 || (major === 2 && minor < 9)) { + logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); + } + moment.defaultZone = name ? getZone(name) : null; + return moment; + }; + + // Cloning a moment should include the _z property. + var momentProperties = moment.momentProperties; + if (Object.prototype.toString.call(momentProperties) === '[object Array]') { + // moment 2.8.1+ + momentProperties.push('_z'); + momentProperties.push('_a'); + } else if (momentProperties) { + // moment 2.7.0 + momentProperties._z = null; + } + + loadData({ + "version": "2016j", + "zones": [ + "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5", + "Africa/Accra|LMT GMT GHST|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5", + "Africa/Nairobi|LMT EAT BEAT BEAUT|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5", + "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5", + "Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6", + "Africa/Bissau|LMT WAT GMT|12.k 10 0|012|-2ldWV.E 2xonV.E|39e4", + "Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5", + "Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6", + "Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5", + "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1y7p0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3", + "Africa/El_Aaiun|LMT WAT WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4", + "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5", + "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|01212121212121212121212121212121213|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|51e5", + "Africa/Monrovia|MMT LRT GMT|H.8 I.u 0|012|-23Lzg.Q 29s01.m|11e5", + "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5", + "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5", + "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5", + "Africa/Windhoek|SWAT SAST SAST CAT WAT WAST|-1u -20 -30 -20 -10 -20|012134545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2GJdu 1Ajdu 1cL0 1SqL0 9NA0 11D0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0|32e4", + "America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", + "America/Anchorage|CAT CAWT CAPT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", + "America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3", + "America/Araguaina|LMT BRT BRST|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4", + "America/Argentina/Buenos_Aires|CMT ART ARST ART ARST|4g.M 40 30 30 20|0121212121212121212121212121212121212121213434343434343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0", + "America/Argentina/Catamarca|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Cordoba|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0", + "America/Argentina/Jujuy|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 g0p0 10M0 j3c0 uL0", + "America/Argentina/La_Rioja|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Mendoza|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|0121212121212121212121212121212121212121213434345656543235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 g0p0 10M0 agM0 Op0 7TX0 uL0", + "America/Argentina/Rio_Gallegos|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Salta|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0", + "America/Argentina/San_Juan|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ak00 m10 8lb0 uL0", + "America/Argentina/San_Luis|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456536353465653|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 kin0 10M0 ak00 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0", + "America/Argentina/Tucuman|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|012121212121212121212121212121212121212121343434345434323534343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 4N0 8BX0 uL0 1qN0 WL0", + "America/Argentina/Ushuaia|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ajA0 8p0 8zb0 uL0", + "America/Curacao|LMT ANT AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4", + "America/Asuncion|AMT PYT PYT PYST|3O.E 40 30 30|012131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5", + "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2", + "America/Bahia|LMT BRT BRST|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5", + "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3", + "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4", + "America/Belem|LMT BRT BRST|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5", + "America/Belize|LMT CST CHDT CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3", + "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2", + "America/Boa_Vista|LMT AMT AMST|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2", + "America/Bogota|BMT COT COST|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5", + "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4", + "America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2", + "America/Campo_Grande|LMT AMT AMST|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|77e4", + "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", + "America/Caracas|CMT VET VET|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5", + "America/Cayenne|LMT GFT GFT|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3", + "America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5", + "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", + "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4", + "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5", + "America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2", + "America/Cuiaba|LMT AMT AMST|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|54e4", + "America/Danmarkshavn|LMT WGT WGST GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8", + "America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2", + "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3", + "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", + "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 Jy10 SL0 dnB0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5", + "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5", + "America/Eirunepe|LMT ACT ACST AMT|4D.s 50 40 40|0121212121212121212121212121212131|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3", + "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5", + "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5", + "America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", + "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Fortaleza|LMT BRT BRST|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5", + "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", + "America/Godthab|LMT WGT WGST|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3", + "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2", + "America/Grand_Turk|KMT EST EDT AST|57.b 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212123|-2l1uQ.N 2HHBQ.N 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", + "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5", + "America/Guayaquil|QMT ECT|5e 50|01|-1yVSK|27e5", + "America/Guyana|LMT GBGT GYT GYT GYT|3Q.E 3J 3J 30 40|01234|-2dvU7.k 24JzQ.k mlc0 Bxbf|80e4", + "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", + "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", + "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4", + "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2", + "America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2", + "America/Jamaica|KMT EST EDT|57.b 50 40|0121212121212121212121|-2l1uQ.N 2uM1Q.N 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4", + "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3", + "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/La_Paz|CMT BOST BOT|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5", + "America/Lima|LMT PET PEST|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6", + "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", + "America/Maceio|LMT BRT BRST|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4", + "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5", + "America/Manaus|LMT AMT AMST|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5", + "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4", + "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4", + "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4", + "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2", + "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5", + "America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", + "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6", + "America/Miquelon|LMT AST PMST PMDT|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", + "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3", + "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5", + "America/Montevideo|MMT UYT UYHST UYST UYT UYHST|3I.I 3u 30 20 30 2u|012121212121212121212121213434343434345454543453434343434343434343434343434343434343434|-20UIf.g 8jzJ.g 1cLu 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1qMu WLu 1qMu 11zu 1o0u 11zu NAu 11bu 2iMu zWu Dq10 19X0 pd0 jz0 cm10 19X0 1fB0 1on0 11d0 1oL0 1nB0 1fzu 1aou 1fzu 1aou 1fzu 3nAu Jb0 3MN0 1SLu 4jzu 2PB0 Lb0 3Dd0 1pb0 ixd0 An0 1MN0 An0 1wp0 On0 1wp0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5", + "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5", + "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4", + "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", + "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2", + "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2", + "America/Noronha|LMT FNT FNST|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2", + "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", + "America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", + "America/Paramaribo|LMT PMT PMT NEGT SRT SRT|3E.E 3E.Q 3E.A 3u 3u 30|012345|-2nDUj.k Wqo0.c qanX.I 1dmLN.o lzc0|24e4", + "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5", + "America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", + "America/Rio_Branco|LMT ACT ACST AMT|4v.c 50 40 40|01212121212121212121212121212131|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4", + "America/Porto_Velho|LMT AMT AMST|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4", + "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5", + "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842", + "America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2", + "America/Recife|LMT BRT BRST|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5", + "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4", + "America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229", + "America/Santarem|LMT AMT AMST BRT|3C.M 40 30 30|0121212121212121212121212121213|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4", + "America/Santiago|SMT CLT CLT CLST CLST|4G.K 50 40 40 30|010203131313131212421242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5", + "America/Santo_Domingo|SDMT EST EDT EHDT AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5", + "America/Sao_Paulo|LMT BRT BRST|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|20e6", + "America/Scoresbysund|LMT CGT CGST EGST EGT|1r.Q 20 10 0 10|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452", + "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2", + "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", + "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3", + "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5", + "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656", + "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", + "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", + "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", + "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4", + "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642", + "America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", + "Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212|-2q00 1DjS0 T90 40P0 KL0 blz0|10", + "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70", + "Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80", + "Antarctica/Macquarie|AEST AEDT -00 MIST|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1", + "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60", + "Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5", + "Antarctica/Palmer|-00 ARST ART ART ARST CLT CLST|0 30 40 30 20 40 30|0121212121234356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|40", + "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130", + "Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20", + "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40", + "Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25", + "Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4", + "Asia/Riyadh|LMT AST|-36.Q -30|01|-TvD6.Q|57e5", + "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5", + "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5", + "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3", + "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4", + "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4", + "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4", + "Asia/Atyrau|LMT +04 +05 +06|-3r.I -40 -50 -60|01232323232323232323212323232323232321212121212|-1Pc3r.I eUnr.I 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0", + "Asia/Baghdad|BMT AST ADT|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5", + "Asia/Qatar|LMT GST AST|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4", + "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", + "Asia/Bangkok|BMT ICT|-6G.4 -70|01|-218SG.4|15e6", + "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", + "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5", + "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4", + "Asia/Brunei|LMT BNT BNT|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4", + "Asia/Kolkata|HMT BURT IST IST|-5R.k -6u -5u -6u|01232|-18LFR.k 1unn.k HB0 7zX0|15e6", + "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4", + "Asia/Choibalsan|LMT ULAT ULAT CHOST CHOT CHOT CHOST|-7C -70 -80 -a0 -90 -80 -90|0123434343434343434343434343434343434343434343456565656565656565656565656565656565656565656565|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3", + "Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6", + "Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5", + "Asia/Dhaka|HMT BURT IST DACT BDT BDST|-5R.k -6u -5u -60 -60 -70|01213454|-18LFR.k 1unn.k HB0 m6n0 LqMu 1x6n0 1i00|16e6", + "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5", + "Asia/Dili|LMT TLT JST TLT WITA|-8m.k -80 -90 -90 -80|012343|-2le8m.k 1dnXm.k 8HA0 1ew00 Xld0|19e4", + "Asia/Dubai|LMT GST|-3F.c -40|01|-21JfF.c|39e5", + "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4", + "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0", + "Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5", + "Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4", + "Asia/Ho_Chi_Minh|LMT PLMT ICT IDT JST|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5", + "Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5", + "Asia/Hovd|LMT HOVT HOVT HOVST|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3", + "Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", + "Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", + "Asia/Jakarta|BMT JAVT WIB JST WIB WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6", + "Asia/Jayapura|LMT WIT ACST|-9m.M -90 -9u|0121|-1uu9m.M sMMm.M L4nu|26e4", + "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4", + "Asia/Kabul|AFT AFT|-40 -4u|01|-10Qs0|46e5", + "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4", + "Asia/Karachi|LMT IST IST KART PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6", + "Asia/Urumqi|LMT XJT|-5O.k -60|01|-1GgtO.k|32e5", + "Asia/Kathmandu|LMT IST NPT|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5", + "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2", + "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", + "Asia/Kuala_Lumpur|SMT MALT MALST MALT MALT JST MYT|-6T.p -70 -7k -7k -7u -90 -80|01234546|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu 1so1u|71e5", + "Asia/Kuching|LMT BORT BORT BORTST JST MYT|-7l.k -7u -80 -8k -90 -80|01232323232323232425|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0 1so10|13e4", + "Asia/Macau|LMT MOT MOST CST|-7y.k -80 -90 -80|0121212121212121212121212121212121212121213|-2le7y.k 1XO34.k 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0 KEp0|57e4", + "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3", + "Asia/Makassar|LMT MMT WITA JST|-7V.A -7V.A -80 -90|01232|-21JjV.A vfc0 myLV.A 8ML0|15e5", + "Asia/Manila|PHT PHST JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6", + "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4", + "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4", + "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5", + "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5", + "Asia/Oral|LMT +04 +05 +06|-3p.o -40 -50 -60|01232323232323232121212121212121212121212121212|-1Pc3p.o eUnp.o 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4", + "Asia/Pontianak|LMT PMT WIB JST WIB WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4", + "Asia/Pyongyang|LMT KST JCST JST KST|-8n -8u -90 -90 -90|012341|-2um8n 97XR 12FXu jdA0 2Onc0|29e5", + "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4", + "Asia/Rangoon|RMT BURT JST MMT|-6o.E -6u -90 -6u|0123|-21Jio.E SmnS.E 7j9u|48e5", + "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4", + "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4", + "Asia/Seoul|LMT KST JCST JST KST KDT KDT|-8r.Q -8u -90 -90 -90 -9u -a0|01234151515151515146464|-2um8r.Q 97XV.Q 12FXu jjA0 kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6", + "Asia/Singapore|SMT MALT MALST MALT MALT JST SGT SGT|-6T.p -70 -7k -7k -7u -90 -7u -80|012345467|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu Mspu DTA0|56e5", + "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2", + "Asia/Taipei|JWST JST CST CDT|-80 -90 -80 -90|01232323232323232323232323232323232323232|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5", + "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5", + "Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5", + "Asia/Tehran|LMT TMT IRST IRST IRDT IRDT|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6", + "Asia/Thimphu|LMT IST BTT|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3", + "Asia/Tokyo|JCST JST JDT|-90 -90 -a0|0121212121|-1iw90 pKq0 QL0 1lB0 13X0 1zB0 NX0 1zB0 NX0|38e6", + "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5", + "Asia/Ulaanbaatar|LMT ULAT ULAT ULAST|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5", + "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2", + "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", + "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4", + "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5", + "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5", + "Atlantic/Azores|HMT AZOT AZOST AZOMT AZOT AZOST WET|1S.w 20 10 0 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545456545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldW5.s aPX5.s Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", + "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3", + "Atlantic/Canary|LMT CANT WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", + "Atlantic/Cape_Verde|LMT CVT CVST CVT|1y.4 20 10 10|01213|-2xomp.U 1qOMp.U 7zX0 1djf0|50e4", + "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3", + "Atlantic/Madeira|FMT MADT MADST MADMT WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldWQ.o aPWQ.o Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4", + "Atlantic/Reykjavik|LMT IST ISST GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4", + "Atlantic/South_Georgia|GST|20|0||30", + "Atlantic/Stanley|SMT FKT FKST FKT FKST|3P.o 40 30 30 20|0121212121212134343212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 U10 1qM0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2", + "Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5", + "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5", + "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5", + "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3", + "Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746", + "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4", + "Australia/Eucla|ACWST ACWDT|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368", + "Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4", + "Australia/Lord_Howe|AEST LHST LHDT LHDT|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347", + "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10", + "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5", + "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5", + "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Pacific/Easter|EMT EAST EASST EAST EASST|7h.s 70 60 60 50|0121212121212121212121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2", + "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "EST|EST|50|0|", + "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g5X0 14p0 1wn0 17d0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Etc/GMT+0|GMT|0|0|", + "Etc/GMT+1|-01|10|0|", + "Etc/GMT+10|-10|a0|0|", + "Etc/GMT+11|-11|b0|0|", + "Etc/GMT+12|-12|c0|0|", + "Etc/GMT+2|-02|20|0|", + "Etc/GMT+3|-03|30|0|", + "Etc/GMT+4|-04|40|0|", + "Etc/GMT+5|-05|50|0|", + "Etc/GMT+6|-06|60|0|", + "Etc/GMT+7|-07|70|0|", + "Etc/GMT+8|-08|80|0|", + "Etc/GMT+9|-09|90|0|", + "Etc/GMT-1|+01|-10|0|", + "Etc/GMT-10|+10|-a0|0|", + "Etc/GMT-11|+11|-b0|0|", + "Etc/GMT-12|+12|-c0|0|", + "Etc/GMT-13|+13|-d0|0|", + "Etc/GMT-14|+14|-e0|0|", + "Etc/GMT-2|+02|-20|0|", + "Etc/GMT-3|+03|-30|0|", + "Etc/GMT-4|+04|-40|0|", + "Etc/GMT-5|+05|-50|0|", + "Etc/GMT-6|+06|-60|0|", + "Etc/GMT-7|+07|-70|0|", + "Etc/GMT-8|+08|-80|0|", + "Etc/GMT-9|+09|-90|0|", + "Etc/UCT|UCT|0|0|", + "Etc/UTC|UTC|0|0|", + "Europe/Amsterdam|AMT NST NEST NET CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5", + "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3", + "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", + "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5", + "Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6", + "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5", + "Europe/Prague|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 16M0 1lc0 1tA0 17A0 11c0 1io0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5", + "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5", + "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5", + "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", + "Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4", + "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4", + "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3", + "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4", + "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5", + "Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4", + "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ldXn.f aPWn.f Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5", + "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", + "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|01010101010101010101010121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-28dd0 11A0 1go0 19A0 1co0 1dA0 b1A0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 iyo0 Rc0 18o0 1hc0 1io0 1a00 14o0 5aL0 MM0 1vc0 17A0 1i00 1bc0 1eo0 17d0 1in0 17A0 6hA0 10N0 XIL0 1a10 1in0 17d0 19X0 1cN0 1fz0 1a10 1fX0 1cp0 1cO0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5", + "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", + "Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5", + "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3", + "Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6", + "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6", + "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4", + "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5", + "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5", + "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810", + "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4", + "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5", + "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4", + "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", + "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", + "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4", + "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5", + "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", + "Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", + "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", + "Europe/Zaporozhye|CUT EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4", + "HST|HST|a0|0|", + "Indian/Chagos|LMT IOT IOT|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2", + "Indian/Christmas|CXT|-70|0||21e2", + "Indian/Cocos|CCT|-6u|0||596", + "Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130", + "Indian/Mahe|LMT SCT|-3F.M -40|01|-2yO3F.M|79e3", + "Indian/Maldives|MMT MVT|-4S -50|01|-olgS|35e4", + "Indian/Mauritius|LMT MUT MUST|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4", + "Indian/Reunion|LMT RET|-3F.Q -40|01|-2mDDF.Q|84e4", + "Pacific/Kwajalein|MHT KWAT MHT|-b0 c0 -c0|012|-AX0 W9X0|14e3", + "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "MST|MST|70|0|", + "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Pacific/Chatham|CHAST CHAST CHADT|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600", + "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Pacific/Apia|LMT WSST SST SDT WSDT WSST|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3", + "Pacific/Bougainville|PGT JST BST|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4", + "Pacific/Chuuk|CHUT|-a0|0||49e3", + "Pacific/Efate|LMT VUT VUST|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3", + "Pacific/Enderbury|PHOT PHOT PHOT|c0 b0 -d0|012|nIc0 B8n0|1", + "Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483", + "Pacific/Fiji|LMT FJT FJST|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|88e4", + "Pacific/Funafuti|TVT|-c0|0||45e2", + "Pacific/Galapagos|LMT ECT GALT|5W.o 50 60|012|-1yVS1.A 2dTz1.A|25e3", + "Pacific/Gambier|LMT GAMT|8X.M 90|01|-2jof0.c|125", + "Pacific/Guadalcanal|LMT SBT|-aD.M -b0|01|-2joyD.M|11e4", + "Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4", + "Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4", + "Pacific/Kiritimati|LINT LINT LINT|aE a0 -e0|012|nIaE B8nk|51e2", + "Pacific/Kosrae|KOST KOST|-b0 -c0|010|-AX0 1bdz0|66e2", + "Pacific/Majuro|MHT MHT|-b0 -c0|01|-AX0|28e3", + "Pacific/Marquesas|LMT MART|9i 9u|01|-2joeG|86e2", + "Pacific/Pago_Pago|LMT NST BST SST|bm.M b0 b0 b0|0123|-2nDMB.c 2gVzB.c EyM0|37e2", + "Pacific/Nauru|LMT NRT JST NRT|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3", + "Pacific/Niue|NUT NUT NUT|bk bu b0|012|-KfME 17y0a|12e2", + "Pacific/Norfolk|NMT NFT NFST NFT|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4", + "Pacific/Noumea|LMT NCT NCST|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3", + "Pacific/Palau|PWT|-90|0||21e3", + "Pacific/Pitcairn|PNT PST|8u 80|01|18Vku|56", + "Pacific/Pohnpei|PONT|-b0|0||34e3", + "Pacific/Port_Moresby|PGT|-a0|0||25e4", + "Pacific/Rarotonga|CKT CKHST CKT|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3", + "Pacific/Tahiti|LMT TAHT|9W.g a0|01|-2joe1.I|18e4", + "Pacific/Tarawa|GILT|-c0|0||29e3", + "Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121212121212121212121212121212121212121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|75e3", + "Pacific/Wake|WAKT|-c0|0||16e3", + "Pacific/Wallis|WFT|-c0|0||94", + "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00" + ], + "links": [ + "Africa/Abidjan|Africa/Bamako", + "Africa/Abidjan|Africa/Banjul", + "Africa/Abidjan|Africa/Conakry", + "Africa/Abidjan|Africa/Dakar", + "Africa/Abidjan|Africa/Freetown", + "Africa/Abidjan|Africa/Lome", + "Africa/Abidjan|Africa/Nouakchott", + "Africa/Abidjan|Africa/Ouagadougou", + "Africa/Abidjan|Africa/Sao_Tome", + "Africa/Abidjan|Africa/Timbuktu", + "Africa/Abidjan|Atlantic/St_Helena", + "Africa/Cairo|Egypt", + "Africa/Johannesburg|Africa/Maseru", + "Africa/Johannesburg|Africa/Mbabane", + "Africa/Khartoum|Africa/Juba", + "Africa/Lagos|Africa/Bangui", + "Africa/Lagos|Africa/Brazzaville", + "Africa/Lagos|Africa/Douala", + "Africa/Lagos|Africa/Kinshasa", + "Africa/Lagos|Africa/Libreville", + "Africa/Lagos|Africa/Luanda", + "Africa/Lagos|Africa/Malabo", + "Africa/Lagos|Africa/Niamey", + "Africa/Lagos|Africa/Porto-Novo", + "Africa/Maputo|Africa/Blantyre", + "Africa/Maputo|Africa/Bujumbura", + "Africa/Maputo|Africa/Gaborone", + "Africa/Maputo|Africa/Harare", + "Africa/Maputo|Africa/Kigali", + "Africa/Maputo|Africa/Lubumbashi", + "Africa/Maputo|Africa/Lusaka", + "Africa/Nairobi|Africa/Addis_Ababa", + "Africa/Nairobi|Africa/Asmara", + "Africa/Nairobi|Africa/Asmera", + "Africa/Nairobi|Africa/Dar_es_Salaam", + "Africa/Nairobi|Africa/Djibouti", + "Africa/Nairobi|Africa/Kampala", + "Africa/Nairobi|Africa/Mogadishu", + "Africa/Nairobi|Indian/Antananarivo", + "Africa/Nairobi|Indian/Comoro", + "Africa/Nairobi|Indian/Mayotte", + "Africa/Tripoli|Libya", + "America/Adak|America/Atka", + "America/Adak|US/Aleutian", + "America/Anchorage|US/Alaska", + "America/Argentina/Buenos_Aires|America/Buenos_Aires", + "America/Argentina/Catamarca|America/Argentina/ComodRivadavia", + "America/Argentina/Catamarca|America/Catamarca", + "America/Argentina/Cordoba|America/Cordoba", + "America/Argentina/Cordoba|America/Rosario", + "America/Argentina/Jujuy|America/Jujuy", + "America/Argentina/Mendoza|America/Mendoza", + "America/Atikokan|America/Coral_Harbour", + "America/Chicago|US/Central", + "America/Curacao|America/Aruba", + "America/Curacao|America/Kralendijk", + "America/Curacao|America/Lower_Princes", + "America/Denver|America/Shiprock", + "America/Denver|Navajo", + "America/Denver|US/Mountain", + "America/Detroit|US/Michigan", + "America/Edmonton|Canada/Mountain", + "America/Fort_Wayne|America/Indiana/Indianapolis", + "America/Fort_Wayne|America/Indianapolis", + "America/Fort_Wayne|US/East-Indiana", + "America/Halifax|Canada/Atlantic", + "America/Havana|Cuba", + "America/Indiana/Knox|America/Knox_IN", + "America/Indiana/Knox|US/Indiana-Starke", + "America/Jamaica|Jamaica", + "America/Kentucky/Louisville|America/Louisville", + "America/Los_Angeles|US/Pacific", + "America/Los_Angeles|US/Pacific-New", + "America/Manaus|Brazil/West", + "America/Mazatlan|Mexico/BajaSur", + "America/Mexico_City|Mexico/General", + "America/New_York|US/Eastern", + "America/Noronha|Brazil/DeNoronha", + "America/Panama|America/Cayman", + "America/Phoenix|US/Arizona", + "America/Port_of_Spain|America/Anguilla", + "America/Port_of_Spain|America/Antigua", + "America/Port_of_Spain|America/Dominica", + "America/Port_of_Spain|America/Grenada", + "America/Port_of_Spain|America/Guadeloupe", + "America/Port_of_Spain|America/Marigot", + "America/Port_of_Spain|America/Montserrat", + "America/Port_of_Spain|America/St_Barthelemy", + "America/Port_of_Spain|America/St_Kitts", + "America/Port_of_Spain|America/St_Lucia", + "America/Port_of_Spain|America/St_Thomas", + "America/Port_of_Spain|America/St_Vincent", + "America/Port_of_Spain|America/Tortola", + "America/Port_of_Spain|America/Virgin", + "America/Regina|Canada/East-Saskatchewan", + "America/Regina|Canada/Saskatchewan", + "America/Rio_Branco|America/Porto_Acre", + "America/Rio_Branco|Brazil/Acre", + "America/Santiago|Chile/Continental", + "America/Sao_Paulo|Brazil/East", + "America/St_Johns|Canada/Newfoundland", + "America/Tijuana|America/Ensenada", + "America/Tijuana|America/Santa_Isabel", + "America/Tijuana|Mexico/BajaNorte", + "America/Toronto|America/Montreal", + "America/Toronto|Canada/Eastern", + "America/Vancouver|Canada/Pacific", + "America/Whitehorse|Canada/Yukon", + "America/Winnipeg|Canada/Central", + "Asia/Ashgabat|Asia/Ashkhabad", + "Asia/Bangkok|Asia/Phnom_Penh", + "Asia/Bangkok|Asia/Vientiane", + "Asia/Dhaka|Asia/Dacca", + "Asia/Dubai|Asia/Muscat", + "Asia/Ho_Chi_Minh|Asia/Saigon", + "Asia/Hong_Kong|Hongkong", + "Asia/Jerusalem|Asia/Tel_Aviv", + "Asia/Jerusalem|Israel", + "Asia/Kathmandu|Asia/Katmandu", + "Asia/Kolkata|Asia/Calcutta", + "Asia/Macau|Asia/Macao", + "Asia/Makassar|Asia/Ujung_Pandang", + "Asia/Nicosia|Europe/Nicosia", + "Asia/Qatar|Asia/Bahrain", + "Asia/Rangoon|Asia/Yangon", + "Asia/Riyadh|Asia/Aden", + "Asia/Riyadh|Asia/Kuwait", + "Asia/Seoul|ROK", + "Asia/Shanghai|Asia/Chongqing", + "Asia/Shanghai|Asia/Chungking", + "Asia/Shanghai|Asia/Harbin", + "Asia/Shanghai|PRC", + "Asia/Singapore|Singapore", + "Asia/Taipei|ROC", + "Asia/Tehran|Iran", + "Asia/Thimphu|Asia/Thimbu", + "Asia/Tokyo|Japan", + "Asia/Ulaanbaatar|Asia/Ulan_Bator", + "Asia/Urumqi|Asia/Kashgar", + "Atlantic/Faroe|Atlantic/Faeroe", + "Atlantic/Reykjavik|Iceland", + "Australia/Adelaide|Australia/South", + "Australia/Brisbane|Australia/Queensland", + "Australia/Broken_Hill|Australia/Yancowinna", + "Australia/Darwin|Australia/North", + "Australia/Hobart|Australia/Tasmania", + "Australia/Lord_Howe|Australia/LHI", + "Australia/Melbourne|Australia/Victoria", + "Australia/Perth|Australia/West", + "Australia/Sydney|Australia/ACT", + "Australia/Sydney|Australia/Canberra", + "Australia/Sydney|Australia/NSW", + "Etc/GMT+0|Etc/GMT", + "Etc/GMT+0|Etc/GMT-0", + "Etc/GMT+0|Etc/GMT0", + "Etc/GMT+0|Etc/Greenwich", + "Etc/GMT+0|GMT", + "Etc/GMT+0|GMT+0", + "Etc/GMT+0|GMT-0", + "Etc/GMT+0|GMT0", + "Etc/GMT+0|Greenwich", + "Etc/UCT|UCT", + "Etc/UTC|Etc/Universal", + "Etc/UTC|Etc/Zulu", + "Etc/UTC|UTC", + "Etc/UTC|Universal", + "Etc/UTC|Zulu", + "Europe/Belgrade|Europe/Ljubljana", + "Europe/Belgrade|Europe/Podgorica", + "Europe/Belgrade|Europe/Sarajevo", + "Europe/Belgrade|Europe/Skopje", + "Europe/Belgrade|Europe/Zagreb", + "Europe/Chisinau|Europe/Tiraspol", + "Europe/Dublin|Eire", + "Europe/Helsinki|Europe/Mariehamn", + "Europe/Istanbul|Asia/Istanbul", + "Europe/Istanbul|Turkey", + "Europe/Lisbon|Portugal", + "Europe/London|Europe/Belfast", + "Europe/London|Europe/Guernsey", + "Europe/London|Europe/Isle_of_Man", + "Europe/London|Europe/Jersey", + "Europe/London|GB", + "Europe/London|GB-Eire", + "Europe/Moscow|W-SU", + "Europe/Oslo|Arctic/Longyearbyen", + "Europe/Oslo|Atlantic/Jan_Mayen", + "Europe/Prague|Europe/Bratislava", + "Europe/Rome|Europe/San_Marino", + "Europe/Rome|Europe/Vatican", + "Europe/Warsaw|Poland", + "Europe/Zurich|Europe/Busingen", + "Europe/Zurich|Europe/Vaduz", + "Pacific/Auckland|Antarctica/McMurdo", + "Pacific/Auckland|Antarctica/South_Pole", + "Pacific/Auckland|NZ", + "Pacific/Chatham|NZ-CHAT", + "Pacific/Chuuk|Pacific/Truk", + "Pacific/Chuuk|Pacific/Yap", + "Pacific/Easter|Chile/EasterIsland", + "Pacific/Guam|Pacific/Saipan", + "Pacific/Honolulu|Pacific/Johnston", + "Pacific/Honolulu|US/Hawaii", + "Pacific/Kwajalein|Kwajalein", + "Pacific/Pago_Pago|Pacific/Midway", + "Pacific/Pago_Pago|Pacific/Samoa", + "Pacific/Pago_Pago|US/Samoa", + "Pacific/Pohnpei|Pacific/Ponape" + ] + }); + + + return moment; +})); diff --git a/node_modules/moment-timezone/builds/moment-timezone-with-data.min.js b/node_modules/moment-timezone/builds/moment-timezone-with-data.min.js new file mode 100644 index 0000000..851a89d --- /dev/null +++ b/node_modules/moment-timezone/builds/moment-timezone-with-data.min.js @@ -0,0 +1,7 @@ +//! moment-timezone.js +//! version : 0.5.11 +//! Copyright (c) JS Foundation and other contributors +//! license : MIT +//! github.com/moment/moment-timezone +!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["moment"],b):"object"==typeof module&&module.exports?module.exports=b(require("moment")):b(a.moment)}(this,function(a){"use strict";function b(a){return a>96?a-87:a>64?a-29:a-48}function c(a){var c,d=0,e=a.split("."),f=e[0],g=e[1]||"",h=1,i=0,j=1;for(45===a.charCodeAt(0)&&(d=1,j=-1),d;d0?k[0].zone.name:void 0}function q(a){return D&&!a||(D=p()),D}function r(a){return(a||"").toLowerCase().replace(/\//g,"_")}function s(a){var b,c,d,e;for("string"==typeof a&&(a=[a]),b=0;b= 2.6.0. You are using Moment.js "+a.version+". See momentjs.com"),h.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var b,c=+a,d=this.untils;for(b=0;bd&&A.moveInvalidForward&&(b=d),f= 2.9.0. You are using Moment.js "+a.version+"."),a.defaultZone=b?t(b):null,a};var N=a.momentProperties;return"[object Array]"===Object.prototype.toString.call(N)?(N.push("_z"),N.push("_a")):N&&(N._z=null),w({version:"2016j",zones:["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Accra|LMT GMT GHST|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5","Africa/Nairobi|LMT EAT BEAT BEAUT|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5","Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6","Africa/Bissau|LMT WAT GMT|12.k 10 0|012|-2ldWV.E 2xonV.E|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5","Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1y7p0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT WAT WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4","Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|01212121212121212121212121212121213|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|51e5","Africa/Monrovia|MMT LRT GMT|H.8 I.u 0|012|-23Lzg.Q 29s01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|SWAT SAST SAST CAT WAT WAST|-1u -20 -30 -20 -10 -20|012134545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2GJdu 1Ajdu 1cL0 1SqL0 9NA0 11D0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0|32e4","America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|CAT CAWT CAPT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3","America/Araguaina|LMT BRT BRST|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|CMT ART ARST ART ARST|4g.M 40 30 30 20|0121212121212121212121212121212121212121213434343434343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0","America/Argentina/Catamarca|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0","America/Argentina/Cordoba|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0","America/Argentina/Jujuy|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 g0p0 10M0 j3c0 uL0","America/Argentina/La_Rioja|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0","America/Argentina/Mendoza|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|0121212121212121212121212121212121212121213434345656543235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 g0p0 10M0 agM0 Op0 7TX0 uL0","America/Argentina/Rio_Gallegos|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0","America/Argentina/Salta|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0","America/Argentina/San_Juan|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ak00 m10 8lb0 uL0","America/Argentina/San_Luis|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456536353465653|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 kin0 10M0 ak00 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0","America/Argentina/Tucuman|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|012121212121212121212121212121212121212121343434345434323534343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 4N0 8BX0 uL0 1qN0 WL0","America/Argentina/Ushuaia|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ajA0 8p0 8zb0 uL0","America/Curacao|LMT ANT AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4","America/Asuncion|AMT PYT PYT PYST|3O.E 40 30 30|012131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2","America/Bahia|LMT BRT BRST|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3","America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT BRT BRST|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST CHDT CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3","America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2","America/Boa_Vista|LMT AMT AMST|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|BMT COT COST|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5","America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT AMT AMST|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|CMT VET VET|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT GFT GFT|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5","America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4","America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2","America/Cuiaba|LMT AMT AMST|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|54e4","America/Danmarkshavn|LMT WGT WGST GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2","America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 Jy10 SL0 dnB0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT ACT ACST AMT|4D.s 50 40 40|0121212121212121212121212121212131|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Fortaleza|LMT BRT BRST|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT WGT WGST|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|KMT EST EDT AST|57.b 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212123|-2l1uQ.N 2HHBQ.N 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|QMT ECT|5e 50|01|-1yVSK|27e5","America/Guyana|LMT GBGT GYT GYT GYT|3Q.E 3J 3J 30 40|01234|-2dvU7.k 24JzQ.k mlc0 Bxbf|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|KMT EST EDT|57.b 50 40|0121212121212121212121|-2l1uQ.N 2uM1Q.N 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/La_Paz|CMT BOST BOT|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5","America/Lima|LMT PET PEST|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT BRT BRST|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT AMT AMST|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4","America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5","America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6","America/Miquelon|LMT AST PMST PMDT|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5","America/Montevideo|MMT UYT UYHST UYST UYT UYHST|3I.I 3u 30 20 30 2u|012121212121212121212121213434343434345454543453434343434343434343434343434343434343434|-20UIf.g 8jzJ.g 1cLu 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1qMu WLu 1qMu 11zu 1o0u 11zu NAu 11bu 2iMu zWu Dq10 19X0 pd0 jz0 cm10 19X0 1fB0 1on0 11d0 1oL0 1nB0 1fzu 1aou 1fzu 1aou 1fzu 3nAu Jb0 3MN0 1SLu 4jzu 2PB0 Lb0 3Dd0 1pb0 ixd0 An0 1MN0 An0 1wp0 On0 1wp0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4","America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2","America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT FNT FNST|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Paramaribo|LMT PMT PMT NEGT SRT SRT|3E.E 3E.Q 3E.A 3u 3u 30|012345|-2nDUj.k Wqo0.c qanX.I 1dmLN.o lzc0|24e4","America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT ACT ACST AMT|4v.c 50 40 40|01212121212121212121212121212131|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT AMT AMST|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5","America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842","America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT BRT BRST|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT AMT AMST BRT|3C.M 40 30 30|0121212121212121212121212121213|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|SMT CLT CLT CLST CLST|4G.K 50 40 40 30|010203131313131212421242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5","America/Santo_Domingo|SDMT EST EDT EHDT AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT BRT BRST|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|20e6","America/Scoresbysund|LMT CGT CGST EGST EGT|1r.Q 20 10 0 10|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452","America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212|-2q00 1DjS0 T90 40P0 KL0 blz0|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80","Antarctica/Macquarie|AEST AEDT -00 MIST|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 ARST ART ART ARST CLT CLST|0 30 40 30 20 40 30|0121212121234356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25","Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4","Asia/Riyadh|LMT AST|-36.Q -30|01|-TvD6.Q|57e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5","Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +04 +05 +06|-3r.I -40 -50 -60|01232323232323232323212323232323232321212121212|-1Pc3r.I eUnr.I 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0","Asia/Baghdad|BMT AST ADT|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT GST AST|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|BMT ICT|-6G.4 -70|01|-218SG.4|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT BNT BNT|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4","Asia/Kolkata|HMT BURT IST IST|-5R.k -6u -5u -6u|01232|-18LFR.k 1unn.k HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT ULAT ULAT CHOST CHOT CHOT CHOST|-7C -70 -80 -a0 -90 -80 -90|0123434343434343434343434343434343434343434343456565656565656565656565656565656565656565656565|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|HMT BURT IST DACT BDT BDST|-5R.k -6u -5u -60 -60 -70|01213454|-18LFR.k 1unn.k HB0 m6n0 LqMu 1x6n0 1i00|16e6","Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT TLT JST TLT WITA|-8m.k -80 -90 -90 -80|012343|-2le8m.k 1dnXm.k 8HA0 1ew00 Xld0|19e4","Asia/Dubai|LMT GST|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0","Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5","Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4","Asia/Ho_Chi_Minh|LMT PLMT ICT IDT JST|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT HOVT HOVT HOVST|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|BMT JAVT WIB JST WIB WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT WIT ACST|-9m.M -90 -9u|0121|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|AFT AFT|-40 -4u|01|-10Qs0|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT IST IST KART PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT XJT|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT IST NPT|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|SMT MALT MALST MALT MALT JST MYT|-6T.p -70 -7k -7k -7u -90 -80|01234546|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu 1so1u|71e5","Asia/Kuching|LMT BORT BORT BORTST JST MYT|-7l.k -7u -80 -8k -90 -80|01232323232323232425|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0 1so10|13e4","Asia/Macau|LMT MOT MOST CST|-7y.k -80 -90 -80|0121212121212121212121212121212121212121213|-2le7y.k 1XO34.k 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0 KEp0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT WITA JST|-7V.A -7V.A -80 -90|01232|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|PHT PHST JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +04 +05 +06|-3p.o -40 -50 -60|01232323232323232121212121212121212121212121212|-1Pc3p.o eUnp.o 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT WIB JST WIB WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JCST JST KST|-8n -8u -90 -90 -90|012341|-2um8n 97XR 12FXu jdA0 2Onc0|29e5","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4","Asia/Rangoon|RMT BURT JST MMT|-6o.E -6u -90 -6u|0123|-21Jio.E SmnS.E 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JCST JST KST KDT KDT|-8r.Q -8u -90 -90 -90 -9u -a0|01234151515151515146464|-2um8r.Q 97XV.Q 12FXu jjA0 kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Singapore|SMT MALT MALST MALT MALT JST SGT SGT|-6T.p -70 -7k -7k -7u -90 -7u -80|012345467|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu Mspu DTA0|56e5","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|JWST JST CST CDT|-80 -90 -80 -90|01232323232323232323232323232323232323232|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT IRST IRST IRDT IRDT|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT IST BTT|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|JCST JST JDT|-90 -90 -a0|0121212121|-1iw90 pKq0 QL0 1lB0 13X0 1zB0 NX0 1zB0 NX0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT ULAT ULAT ULAST|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|HMT AZOT AZOST AZOMT AZOT AZOST WET|1S.w 20 10 0 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545456545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldW5.s aPX5.s Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT CANT WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT CVT CVST CVT|1y.4 20 10 10|01213|-2xomp.U 1qOMp.U 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|FMT MADT MADST MADMT WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldWQ.o aPWQ.o Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4","Atlantic/Reykjavik|LMT IST ISST GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4","Atlantic/South_Georgia|GST|20|0||30","Atlantic/Stanley|SMT FKT FKST FKT FKST|3P.o 40 30 30 20|0121212121212134343212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 U10 1qM0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746","Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4","Australia/Eucla|ACWST ACWDT|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Lord_Howe|AEST LHST LHDT LHDT|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Pacific/Easter|EMT EAST EASST EAST EASST|7h.s 70 60 60 50|0121212121212121212121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","EST|EST|50|0|","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g5X0 14p0 1wn0 17d0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Etc/GMT+0|GMT|0|0|","Etc/GMT+1|-01|10|0|","Etc/GMT+10|-10|a0|0|","Etc/GMT+11|-11|b0|0|","Etc/GMT+12|-12|c0|0|","Etc/GMT+2|-02|20|0|","Etc/GMT+3|-03|30|0|","Etc/GMT+4|-04|40|0|","Etc/GMT+5|-05|50|0|","Etc/GMT+6|-06|60|0|","Etc/GMT+7|-07|70|0|","Etc/GMT+8|-08|80|0|","Etc/GMT+9|-09|90|0|","Etc/GMT-1|+01|-10|0|","Etc/GMT-10|+10|-a0|0|","Etc/GMT-11|+11|-b0|0|","Etc/GMT-12|+12|-c0|0|","Etc/GMT-13|+13|-d0|0|","Etc/GMT-14|+14|-e0|0|","Etc/GMT-2|+02|-20|0|","Etc/GMT-3|+03|-30|0|","Etc/GMT-4|+04|-40|0|","Etc/GMT-5|+05|-50|0|","Etc/GMT-6|+06|-60|0|","Etc/GMT-7|+07|-70|0|","Etc/GMT-8|+08|-80|0|","Etc/GMT-9|+09|-90|0|","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Amsterdam|AMT NST NEST NET CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5","Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5","Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5","Europe/Prague|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 16M0 1lc0 1tA0 17A0 11c0 1io0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5","Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5","Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4","Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ldXn.f aPWn.f Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5","Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|01010101010101010101010121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-28dd0 11A0 1go0 19A0 1co0 1dA0 b1A0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 iyo0 Rc0 18o0 1hc0 1io0 1a00 14o0 5aL0 MM0 1vc0 17A0 1i00 1bc0 1eo0 17d0 1in0 17A0 6hA0 10N0 XIL0 1a10 1in0 17d0 19X0 1cN0 1fz0 1a10 1fX0 1cp0 1cO0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5","Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3","Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6","Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4","Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810","Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5","Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4","Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5","Europe/Zaporozhye|CUT EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4","HST|HST|a0|0|","Indian/Chagos|LMT IOT IOT|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Christmas|CXT|-70|0||21e2","Indian/Cocos|CCT|-6u|0||596","Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130","Indian/Mahe|LMT SCT|-3F.M -40|01|-2yO3F.M|79e3","Indian/Maldives|MMT MVT|-4S -50|01|-olgS|35e4","Indian/Mauritius|LMT MUT MUST|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Indian/Reunion|LMT RET|-3F.Q -40|01|-2mDDF.Q|84e4","Pacific/Kwajalein|MHT KWAT MHT|-b0 c0 -c0|012|-AX0 W9X0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","MST|MST|70|0|","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Pacific/Chatham|CHAST CHAST CHADT|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Pacific/Apia|LMT WSST SST SDT WSDT WSST|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|PGT JST BST|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4","Pacific/Chuuk|CHUT|-a0|0||49e3","Pacific/Efate|LMT VUT VUST|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|PHOT PHOT PHOT|c0 b0 -d0|012|nIc0 B8n0|1","Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483","Pacific/Fiji|LMT FJT FJST|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|88e4","Pacific/Funafuti|TVT|-c0|0||45e2","Pacific/Galapagos|LMT ECT GALT|5W.o 50 60|012|-1yVS1.A 2dTz1.A|25e3","Pacific/Gambier|LMT GAMT|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT SBT|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4","Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4","Pacific/Kiritimati|LINT LINT LINT|aE a0 -e0|012|nIaE B8nk|51e2","Pacific/Kosrae|KOST KOST|-b0 -c0|010|-AX0 1bdz0|66e2","Pacific/Majuro|MHT MHT|-b0 -c0|01|-AX0|28e3","Pacific/Marquesas|LMT MART|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT NST BST SST|bm.M b0 b0 b0|0123|-2nDMB.c 2gVzB.c EyM0|37e2","Pacific/Nauru|LMT NRT JST NRT|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3","Pacific/Niue|NUT NUT NUT|bk bu b0|012|-KfME 17y0a|12e2","Pacific/Norfolk|NMT NFT NFST NFT|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4","Pacific/Noumea|LMT NCT NCST|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|PWT|-90|0||21e3","Pacific/Pitcairn|PNT PST|8u 80|01|18Vku|56","Pacific/Pohnpei|PONT|-b0|0||34e3","Pacific/Port_Moresby|PGT|-a0|0||25e4","Pacific/Rarotonga|CKT CKHST CKT|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT TAHT|9W.g a0|01|-2joe1.I|18e4","Pacific/Tarawa|GILT|-c0|0||29e3","Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121212121212121212121212121212121212121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|75e3","Pacific/Wake|WAKT|-c0|0||16e3","Pacific/Wallis|WFT|-c0|0||94","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00"], +links:["Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Sao_Tome","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/St_Helena","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Khartoum|Africa/Juba","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Atikokan|America/Coral_Harbour","America/Chicago|US/Central","America/Curacao|America/Aruba","America/Curacao|America/Kralendijk","America/Curacao|America/Lower_Princes","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Cayman","America/Phoenix|US/Arizona","America/Port_of_Spain|America/Anguilla","America/Port_of_Spain|America/Antigua","America/Port_of_Spain|America/Dominica","America/Port_of_Spain|America/Grenada","America/Port_of_Spain|America/Guadeloupe","America/Port_of_Spain|America/Marigot","America/Port_of_Spain|America/Montserrat","America/Port_of_Spain|America/St_Barthelemy","America/Port_of_Spain|America/St_Kitts","America/Port_of_Spain|America/St_Lucia","America/Port_of_Spain|America/St_Thomas","America/Port_of_Spain|America/St_Vincent","America/Port_of_Spain|America/Tortola","America/Port_of_Spain|America/Virgin","America/Regina|Canada/East-Saskatchewan","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Singapore|Singapore","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Atlantic/Reykjavik|Iceland","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT+0|Etc/GMT","Etc/GMT+0|Etc/GMT-0","Etc/GMT+0|Etc/GMT0","Etc/GMT+0|Etc/Greenwich","Etc/GMT+0|GMT","Etc/GMT+0|GMT+0","Etc/GMT+0|GMT-0","Etc/GMT+0|GMT0","Etc/GMT+0|Greenwich","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Oslo|Arctic/Longyearbyen","Europe/Oslo|Atlantic/Jan_Mayen","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Chuuk|Pacific/Truk","Pacific/Chuuk|Pacific/Yap","Pacific/Easter|Chile/EasterIsland","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pohnpei|Pacific/Ponape"]}),a}); \ No newline at end of file diff --git a/node_modules/moment-timezone/builds/moment-timezone.min.js b/node_modules/moment-timezone/builds/moment-timezone.min.js new file mode 100644 index 0000000..5da5277 --- /dev/null +++ b/node_modules/moment-timezone/builds/moment-timezone.min.js @@ -0,0 +1,6 @@ +//! moment-timezone.js +//! version : 0.5.11 +//! Copyright (c) JS Foundation and other contributors +//! license : MIT +//! github.com/moment/moment-timezone +!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["moment"],b):"object"==typeof module&&module.exports?module.exports=b(require("moment")):b(a.moment)}(this,function(a){"use strict";function b(a){return a>96?a-87:a>64?a-29:a-48}function c(a){var c,d=0,e=a.split("."),f=e[0],g=e[1]||"",h=1,i=0,j=1;for(45===a.charCodeAt(0)&&(d=1,j=-1),d;d0?k[0].zone.name:void 0}function q(a){return D&&!a||(D=p()),D}function r(a){return(a||"").toLowerCase().replace(/\//g,"_")}function s(a){var b,c,d,e;for("string"==typeof a&&(a=[a]),b=0;b= 2.6.0. You are using Moment.js "+a.version+". See momentjs.com"),h.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var b,c=+a,d=this.untils;for(b=0;bd&&A.moveInvalidForward&&(b=d),f= 2.9.0. You are using Moment.js "+a.version+"."),a.defaultZone=b?t(b):null,a};var N=a.momentProperties;return"[object Array]"===Object.prototype.toString.call(N)?(N.push("_z"),N.push("_a")):N&&(N._z=null),a}); \ No newline at end of file diff --git a/node_modules/moment-timezone/changelog.md b/node_modules/moment-timezone/changelog.md new file mode 100644 index 0000000..fb35d2e --- /dev/null +++ b/node_modules/moment-timezone/changelog.md @@ -0,0 +1,131 @@ +### `0.5.11` _2016-12-23_ +* Remove log statement when data is loaded twice. [#352](https://github.com/moment/moment-timezone/pull/352) + +### `0.5.10` _2016-11-27_ +* Updated data to IANA TZDB `2016j`. [#422](https://github.com/moment/moment-timezone/pull/422) + +### `0.5.9` _2016-11-03_ +* Fixed the output of `moment.tz.version`. [#413](https://github.com/moment/moment-timezone/issues/413) + +### `0.5.8` _2016-11-03_ +* Updated data to IANA TZDB `2016i`. [#411](https://github.com/moment/moment-timezone/pull/411) + +### `0.5.7` _2016-10-21_ +* Updated data to IANA TZDB `2016h`. [#403](https://github.com/moment/moment-timezone/pull/403) + +### `0.5.6` _2016-10-08_ +* Updated data to IANA TZDB `2016g`. [#394](https://github.com/moment/moment-timezone/pull/394) + +### `0.5.5` _2016-07-24_ +* Updated data to IANA TZDB `2016f`. [#360](https://github.com/moment/moment-timezone/pull/360) + +### `0.5.4` _2016-05-03_ +* Updated data to IANA TZDB `2016d`. [#336](https://github.com/moment/moment-timezone/pull/336) +* Ignore the results from `Intl.DateTimeFormat().resolvedOptions().timeZone` if it is undefined. [#322](https://github.com/moment/moment-timezone/pull/322) + +### `0.5.3` _2016-03-24_ +* Updated data to IANA TZDB `2016c`. [#321](https://github.com/moment/moment-timezone/pull/321) + +### `0.5.2` _2016-03-15_ +* Updated data to IANA TZDB `2016b`. [#315](https://github.com/moment/moment-timezone/pull/315) + +### `0.5.1` _2016-03-01_ +* Updated data to IANA TZDB `2016a`. [#299](https://github.com/moment/moment-timezone/pull/299) +* Fixed bug when `Date#toTimeString` did not return a known format. [#302](https://github.com/moment/moment-timezone/pull/302) [#303](https://github.com/moment/moment-timezone/pull/303) +* Added lookup on `Intl.DateTimeFormat().resolvedOptions().timeZone` to `moment.tz.guess()`. [#304](https://github.com/moment/moment-timezone/pull/304) [#291](https://github.com/moment/moment-timezone/pull/291) + +### `0.5.0` _2015-12-28_ +* Added support for guessing the user's timezone via `moment.tz.guess()`. [#285](https://github.com/moment/moment-timezone/pull/285) +* Fixed UMD export issue when there was an html element with `id=exports`. [#275](https://github.com/moment/moment-timezone/pull/275) +* Removed jspm specific dependencies from `package.json`. [#284](https://github.com/moment/moment-timezone/pull/284) + +### `0.4.1` _2015-10-07_ +* Updated data to IANA TZDB `2015e`. [#253](https://github.com/moment/moment-timezone/pull/253) +* Updated data to IANA TZDB `2015f`. [#253](https://github.com/moment/moment-timezone/pull/253) +* Updated data to IANA TZDB `2015g`. [#255](https://github.com/moment/moment-timezone/pull/255) +* Added jspm dependencies for moment. [#234](https://github.com/moment/moment-timezone/pull/234) +* Included builds directory in npm. [#237](https://github.com/moment/moment-timezone/pull/237) +* Removed version field from bower.json. [#230](https://github.com/moment/moment-timezone/pull/230) + +### `0.4.0` _2015-05-30_ +* Updated data to IANA TZDB `2015b`. [#201](https://github.com/moment/moment-timezone/pull/201) +* Updated data to IANA TZDB `2015c`. [#214](https://github.com/moment/moment-timezone/pull/214) +* Updated data to IANA TZDB `2015d`. [#214](https://github.com/moment/moment-timezone/pull/214) +* Updated zone getter to allow lazy unpacking to improve initial page load times. [#216](https://github.com/moment/moment-timezone/pull/216) +* Added a `package.json` `jspm:main` entry point. [#194](https://github.com/moment/moment-timezone/pull/194) +* Added `composer.json`. [#222](https://github.com/moment/moment-timezone/pull/222) +* Added an error message when trying to load moment-timezone twice. [#212](https://github.com/moment/moment-timezone/pull/212) + +### `0.3.1` _2015-03-16_ +* Updated data to IANA TZDB `2015a`. [#183](https://github.com/moment/moment-timezone/pull/183) + +### `0.3.0` _2015-01-13_ + +* *Breaking:* Added country data to the `meta/*.json` files. Restructured the data to support multiple countries per zone. [#162](https://github.com/moment/moment-timezone/pull/162) +* Added the ability to set a default timezone for all new moments. [#152](https://github.com/moment/moment-timezone/pull/152) +* Fixed a bug when passing a moment with an offset to `moment.tz`. [#169](https://github.com/moment/moment-timezone/pull/169) +* Fixed a deprecation in moment core, changing `moment#zone` to `moment#utcOffset`. [#168](https://github.com/moment/moment-timezone/pull/168) + +### `0.2.5` _2014-11-12_ +* Updated data to IANA TZDB `2014j`. [#151](https://github.com/moment/moment-timezone/pull/151) + +### `0.2.4` _2014-10-20_ +* Updated data to IANA TZDB `2014i`. [#142](https://github.com/moment/moment-timezone/pull/142) + +### `0.2.3` _2014-10-20_ +* Updated data to IANA TZDB `2014h`. [#141](https://github.com/moment/moment-timezone/pull/141) + +### `0.2.2` _2014-09-04_ +* Updated data to IANA TZDB `2014g`. [#126](https://github.com/moment/moment-timezone/pull/126) +* Added a warning when using `moment-timezone` with `moment<2.6.0`. + +### `0.2.1` _2014-08-02_ +* Fixed support for `moment@2.8.1+`. + +### `0.2.0` _2014-07-21_ +* Added the ability to configure whether ambiguous or invalid input is rolled forward or backward. [#101](https://github.com/moment/moment-timezone/pull/101) +* Added `moment>=2.6.0` as a dependency in `bower.json`. [#107](https://github.com/moment/moment-timezone/issues/107) +* Fixed getting the name of a zone that was added as a linked zone. [#104](https://github.com/moment/moment-timezone/pull/104) +* Added an error message when a zone was not loaded. [#106](https://github.com/moment/moment-timezone/issues/106) + +### `0.1.0` _2014-06-23_ +* *Breaking:* Changed data format from Zones+Rules to just Zones. [#82](https://github.com/moment/moment-timezone/pull/82) +* *Breaking:* Removed `moment.tz.{addRule,addZone,zoneExists,zones}` as they are no longer relevant with the new data format. +* Made library 20x faster. [JSPerf results](http://jsperf.com/moment-timezone-0-1-0/2) +* Completely rewrote internals to support new data format. +* Updated the data collection process to get data directly from http://www.iana.org/time-zones. +* Updated data to IANA TZDB `2014e`. +* Updated `bower.json` to use a browser specific `main:` entry point. +* Added built files with included data. +* Added support for accurately parsing input around DST changes. [#93](https://github.com/moment/moment-timezone/pull/93) +* Added comprehensive documentation at [momentjs.com/timezone/docs/](http://momentjs.com/timezone/docs/). +* Added `moment.tz.link` for linking two identical zones. +* Added `moment.tz.zone` for getting a loaded zone. +* Added `moment.tz.load` for loading a bundled version of data from the IANA TZDB. +* Added `moment.tz.names` for getting the names of all the loaded timezones. +* Added `moment.tz.unpack` and `moment.tz.unpackBase60` for unpacking data. +* Added `moment-timezone-utils.js` for working with the packed and unpacked data. +* Fixed major memory leak. [#79](https://github.com/moment/moment-timezone/issues/79) +* Fixed global export to allow use in web workers. [#78](https://github.com/moment/moment-timezone/pull/78) +* Fixed global export in browser environments that define `window.module`. [#76](https://github.com/moment/moment-timezone/pull/76) + +### `0.0.6` _2014-04-20_ +* Fixed issue with preventing loading moment-timezone more than once. [#75](https://github.com/moment/moment-timezone/pull/75) + +### `0.0.5` _2014-04-17_ +* Improved performance with memoization. [#39](https://github.com/moment/moment-timezone/issues/39) +* Published only necessary files to npm. [#46](https://github.com/moment/moment-timezone/issues/46) +* Added better handling of timezones around DST. [#53](https://github.com/moment/moment-timezone/issues/53) [#61](https://github.com/moment/moment-timezone/issues/61) [#70](https://github.com/moment/moment-timezone/issues/70) +* Added Browserify support. [#41](https://github.com/moment/moment-timezone/issues/41) +* Added `moment.tz.zoneExists` [#73](https://github.com/moment/moment-timezone/issues/73) +* Fixed cloning moments with a timezone. [#71](https://github.com/moment/moment-timezone/issues/71) +* Prevent loading moment-timezone more than once. [#74](https://github.com/moment/moment-timezone/issues/74) + +### `0.0.3` _2013-10-10_ +* Added Bower support. +* Added support for newer versions of moment. +* Added support for constructing a moment with a string and zone. +* Added more links and timezone names in moment-timezone.json + +### `0.0.1` _2013-07-17_ +* Initial version. diff --git a/node_modules/moment-timezone/composer.json b/node_modules/moment-timezone/composer.json new file mode 100644 index 0000000..434b0dc --- /dev/null +++ b/node_modules/moment-timezone/composer.json @@ -0,0 +1,43 @@ +{ + "name": "moment/moment-timezone", + "description": "Parse and display dates in any timezone", + "version": "0.5.8", + "keywords": [ + "moment", + "date", + "time", + "timezone", + "olson", + "iana", + "zone", + "tz" + ], + "homepage": "http://momentjs.com/timezone/", + "license": "MIT", + "support": { + "issues": "https://github.com/moment/moment-timezone/issues", + "source": "https://github.com/moment/moment-timezone" + }, + "authors": [ + { + "name": "Tim Wood", + "email": "washwithcare@gmail.com", + "homepage": "http://timwoodcreates.com/" + } + ], + "type": "component", + "require": { + "robloach/component-installer": "*", + "moment/moment": ">=2.6.0" + }, + "extra": { + "component": { + "scripts": [ + "moment-timezone.js" + ], + "files": [ + "builds/*.js" + ] + } + } +} diff --git a/node_modules/moment-timezone/data/meta/latest.json b/node_modules/moment-timezone/data/meta/latest.json new file mode 100644 index 0000000..3eb6652 --- /dev/null +++ b/node_modules/moment-timezone/data/meta/latest.json @@ -0,0 +1,5092 @@ +{ + "countries": { + "AD": { + "name": "Andorra", + "abbr": "AD", + "zones": [ + "Europe/Andorra" + ] + }, + "AE": { + "name": "United Arab Emirates", + "abbr": "AE", + "zones": [ + "Asia/Dubai" + ] + }, + "AF": { + "name": "Afghanistan", + "abbr": "AF", + "zones": [ + "Asia/Kabul" + ] + }, + "AG": { + "name": "Antigua & Barbuda", + "abbr": "AG", + "zones": [ + "America/Port_of_Spain" + ] + }, + "AI": { + "name": "Anguilla", + "abbr": "AI", + "zones": [ + "America/Port_of_Spain" + ] + }, + "AL": { + "name": "Albania", + "abbr": "AL", + "zones": [ + "Europe/Tirane" + ] + }, + "AM": { + "name": "Armenia", + "abbr": "AM", + "zones": [ + "Asia/Yerevan" + ] + }, + "AO": { + "name": "Angola", + "abbr": "AO", + "zones": [ + "Africa/Lagos" + ] + }, + "AQ": { + "name": "Antarctica", + "abbr": "AQ", + "zones": [ + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Mawson", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Pacific/Auckland" + ] + }, + "AR": { + "name": "Argentina", + "abbr": "AR", + "zones": [ + "America/Argentina/Buenos_Aires", + "America/Argentina/Cordoba", + "America/Argentina/Salta", + "America/Argentina/Jujuy", + "America/Argentina/Tucuman", + "America/Argentina/Catamarca", + "America/Argentina/La_Rioja", + "America/Argentina/San_Juan", + "America/Argentina/Mendoza", + "America/Argentina/San_Luis", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Ushuaia" + ] + }, + "AS": { + "name": "Samoa (American)", + "abbr": "AS", + "zones": [ + "Pacific/Pago_Pago" + ] + }, + "AT": { + "name": "Austria", + "abbr": "AT", + "zones": [ + "Europe/Vienna" + ] + }, + "AU": { + "name": "Australia", + "abbr": "AU", + "zones": [ + "Australia/Lord_Howe", + "Antarctica/Macquarie", + "Australia/Hobart", + "Australia/Currie", + "Australia/Melbourne", + "Australia/Sydney", + "Australia/Broken_Hill", + "Australia/Brisbane", + "Australia/Lindeman", + "Australia/Adelaide", + "Australia/Darwin", + "Australia/Perth", + "Australia/Eucla" + ] + }, + "AW": { + "name": "Aruba", + "abbr": "AW", + "zones": [ + "America/Curacao" + ] + }, + "AX": { + "name": "Åland Islands", + "abbr": "AX", + "zones": [ + "Europe/Helsinki" + ] + }, + "AZ": { + "name": "Azerbaijan", + "abbr": "AZ", + "zones": [ + "Asia/Baku" + ] + }, + "BA": { + "name": "Bosnia & Herzegovina", + "abbr": "BA", + "zones": [ + "Europe/Belgrade" + ] + }, + "BB": { + "name": "Barbados", + "abbr": "BB", + "zones": [ + "America/Barbados" + ] + }, + "BD": { + "name": "Bangladesh", + "abbr": "BD", + "zones": [ + "Asia/Dhaka" + ] + }, + "BE": { + "name": "Belgium", + "abbr": "BE", + "zones": [ + "Europe/Brussels" + ] + }, + "BF": { + "name": "Burkina Faso", + "abbr": "BF", + "zones": [ + "Africa/Abidjan" + ] + }, + "BG": { + "name": "Bulgaria", + "abbr": "BG", + "zones": [ + "Europe/Sofia" + ] + }, + "BH": { + "name": "Bahrain", + "abbr": "BH", + "zones": [ + "Asia/Qatar" + ] + }, + "BI": { + "name": "Burundi", + "abbr": "BI", + "zones": [ + "Africa/Maputo" + ] + }, + "BJ": { + "name": "Benin", + "abbr": "BJ", + "zones": [ + "Africa/Lagos" + ] + }, + "BL": { + "name": "St Barthelemy", + "abbr": "BL", + "zones": [ + "America/Port_of_Spain" + ] + }, + "BM": { + "name": "Bermuda", + "abbr": "BM", + "zones": [ + "Atlantic/Bermuda" + ] + }, + "BN": { + "name": "Brunei", + "abbr": "BN", + "zones": [ + "Asia/Brunei" + ] + }, + "BO": { + "name": "Bolivia", + "abbr": "BO", + "zones": [ + "America/La_Paz" + ] + }, + "BQ": { + "name": "Caribbean NL", + "abbr": "BQ", + "zones": [ + "America/Curacao" + ] + }, + "BR": { + "name": "Brazil", + "abbr": "BR", + "zones": [ + "America/Noronha", + "America/Belem", + "America/Fortaleza", + "America/Recife", + "America/Araguaina", + "America/Maceio", + "America/Bahia", + "America/Sao_Paulo", + "America/Campo_Grande", + "America/Cuiaba", + "America/Santarem", + "America/Porto_Velho", + "America/Boa_Vista", + "America/Manaus", + "America/Eirunepe", + "America/Rio_Branco" + ] + }, + "BS": { + "name": "Bahamas", + "abbr": "BS", + "zones": [ + "America/Nassau" + ] + }, + "BT": { + "name": "Bhutan", + "abbr": "BT", + "zones": [ + "Asia/Thimphu" + ] + }, + "BW": { + "name": "Botswana", + "abbr": "BW", + "zones": [ + "Africa/Maputo" + ] + }, + "BY": { + "name": "Belarus", + "abbr": "BY", + "zones": [ + "Europe/Minsk" + ] + }, + "BZ": { + "name": "Belize", + "abbr": "BZ", + "zones": [ + "America/Belize" + ] + }, + "CA": { + "name": "Canada", + "abbr": "CA", + "zones": [ + "America/St_Johns", + "America/Halifax", + "America/Glace_Bay", + "America/Moncton", + "America/Goose_Bay", + "America/Blanc-Sablon", + "America/Toronto", + "America/Nipigon", + "America/Thunder_Bay", + "America/Iqaluit", + "America/Pangnirtung", + "America/Atikokan", + "America/Winnipeg", + "America/Rainy_River", + "America/Resolute", + "America/Rankin_Inlet", + "America/Regina", + "America/Swift_Current", + "America/Edmonton", + "America/Cambridge_Bay", + "America/Yellowknife", + "America/Inuvik", + "America/Creston", + "America/Dawson_Creek", + "America/Fort_Nelson", + "America/Vancouver", + "America/Whitehorse", + "America/Dawson" + ] + }, + "CC": { + "name": "Cocos (Keeling) Islands", + "abbr": "CC", + "zones": [ + "Indian/Cocos" + ] + }, + "CD": { + "name": "Congo (Dem. Rep.)", + "abbr": "CD", + "zones": [ + "Africa/Maputo", + "Africa/Lagos" + ] + }, + "CF": { + "name": "Central African Rep.", + "abbr": "CF", + "zones": [ + "Africa/Lagos" + ] + }, + "CG": { + "name": "Congo (Rep.)", + "abbr": "CG", + "zones": [ + "Africa/Lagos" + ] + }, + "CH": { + "name": "Switzerland", + "abbr": "CH", + "zones": [ + "Europe/Zurich" + ] + }, + "CI": { + "name": "Côte d'Ivoire", + "abbr": "CI", + "zones": [ + "Africa/Abidjan" + ] + }, + "CK": { + "name": "Cook Islands", + "abbr": "CK", + "zones": [ + "Pacific/Rarotonga" + ] + }, + "CL": { + "name": "Chile", + "abbr": "CL", + "zones": [ + "America/Santiago", + "Pacific/Easter" + ] + }, + "CM": { + "name": "Cameroon", + "abbr": "CM", + "zones": [ + "Africa/Lagos" + ] + }, + "CN": { + "name": "China", + "abbr": "CN", + "zones": [ + "Asia/Shanghai", + "Asia/Urumqi" + ] + }, + "CO": { + "name": "Colombia", + "abbr": "CO", + "zones": [ + "America/Bogota" + ] + }, + "CR": { + "name": "Costa Rica", + "abbr": "CR", + "zones": [ + "America/Costa_Rica" + ] + }, + "CU": { + "name": "Cuba", + "abbr": "CU", + "zones": [ + "America/Havana" + ] + }, + "CV": { + "name": "Cape Verde", + "abbr": "CV", + "zones": [ + "Atlantic/Cape_Verde" + ] + }, + "CW": { + "name": "Curaçao", + "abbr": "CW", + "zones": [ + "America/Curacao" + ] + }, + "CX": { + "name": "Christmas Island", + "abbr": "CX", + "zones": [ + "Indian/Christmas" + ] + }, + "CY": { + "name": "Cyprus", + "abbr": "CY", + "zones": [ + "Asia/Nicosia", + "Asia/Famagusta" + ] + }, + "CZ": { + "name": "Czech Republic", + "abbr": "CZ", + "zones": [ + "Europe/Prague" + ] + }, + "DE": { + "name": "Germany", + "abbr": "DE", + "zones": [ + "Europe/Zurich", + "Europe/Berlin" + ] + }, + "DJ": { + "name": "Djibouti", + "abbr": "DJ", + "zones": [ + "Africa/Nairobi" + ] + }, + "DK": { + "name": "Denmark", + "abbr": "DK", + "zones": [ + "Europe/Copenhagen" + ] + }, + "DM": { + "name": "Dominica", + "abbr": "DM", + "zones": [ + "America/Port_of_Spain" + ] + }, + "DO": { + "name": "Dominican Republic", + "abbr": "DO", + "zones": [ + "America/Santo_Domingo" + ] + }, + "DZ": { + "name": "Algeria", + "abbr": "DZ", + "zones": [ + "Africa/Algiers" + ] + }, + "EC": { + "name": "Ecuador", + "abbr": "EC", + "zones": [ + "America/Guayaquil", + "Pacific/Galapagos" + ] + }, + "EE": { + "name": "Estonia", + "abbr": "EE", + "zones": [ + "Europe/Tallinn" + ] + }, + "EG": { + "name": "Egypt", + "abbr": "EG", + "zones": [ + "Africa/Cairo" + ] + }, + "EH": { + "name": "Western Sahara", + "abbr": "EH", + "zones": [ + "Africa/El_Aaiun" + ] + }, + "ER": { + "name": "Eritrea", + "abbr": "ER", + "zones": [ + "Africa/Nairobi" + ] + }, + "ES": { + "name": "Spain", + "abbr": "ES", + "zones": [ + "Europe/Madrid", + "Africa/Ceuta", + "Atlantic/Canary" + ] + }, + "ET": { + "name": "Ethiopia", + "abbr": "ET", + "zones": [ + "Africa/Nairobi" + ] + }, + "FI": { + "name": "Finland", + "abbr": "FI", + "zones": [ + "Europe/Helsinki" + ] + }, + "FJ": { + "name": "Fiji", + "abbr": "FJ", + "zones": [ + "Pacific/Fiji" + ] + }, + "FK": { + "name": "Falkland Islands", + "abbr": "FK", + "zones": [ + "Atlantic/Stanley" + ] + }, + "FM": { + "name": "Micronesia", + "abbr": "FM", + "zones": [ + "Pacific/Chuuk", + "Pacific/Pohnpei", + "Pacific/Kosrae" + ] + }, + "FO": { + "name": "Faroe Islands", + "abbr": "FO", + "zones": [ + "Atlantic/Faroe" + ] + }, + "FR": { + "name": "France", + "abbr": "FR", + "zones": [ + "Europe/Paris" + ] + }, + "GA": { + "name": "Gabon", + "abbr": "GA", + "zones": [ + "Africa/Lagos" + ] + }, + "GB": { + "name": "Britain (UK)", + "abbr": "GB", + "zones": [ + "Europe/London" + ] + }, + "GD": { + "name": "Grenada", + "abbr": "GD", + "zones": [ + "America/Port_of_Spain" + ] + }, + "GE": { + "name": "Georgia", + "abbr": "GE", + "zones": [ + "Asia/Tbilisi" + ] + }, + "GF": { + "name": "French Guiana", + "abbr": "GF", + "zones": [ + "America/Cayenne" + ] + }, + "GG": { + "name": "Guernsey", + "abbr": "GG", + "zones": [ + "Europe/London" + ] + }, + "GH": { + "name": "Ghana", + "abbr": "GH", + "zones": [ + "Africa/Accra" + ] + }, + "GI": { + "name": "Gibraltar", + "abbr": "GI", + "zones": [ + "Europe/Gibraltar" + ] + }, + "GL": { + "name": "Greenland", + "abbr": "GL", + "zones": [ + "America/Godthab", + "America/Danmarkshavn", + "America/Scoresbysund", + "America/Thule" + ] + }, + "GM": { + "name": "Gambia", + "abbr": "GM", + "zones": [ + "Africa/Abidjan" + ] + }, + "GN": { + "name": "Guinea", + "abbr": "GN", + "zones": [ + "Africa/Abidjan" + ] + }, + "GP": { + "name": "Guadeloupe", + "abbr": "GP", + "zones": [ + "America/Port_of_Spain" + ] + }, + "GQ": { + "name": "Equatorial Guinea", + "abbr": "GQ", + "zones": [ + "Africa/Lagos" + ] + }, + "GR": { + "name": "Greece", + "abbr": "GR", + "zones": [ + "Europe/Athens" + ] + }, + "GS": { + "name": "South Georgia & the South Sandwich Islands", + "abbr": "GS", + "zones": [ + "Atlantic/South_Georgia" + ] + }, + "GT": { + "name": "Guatemala", + "abbr": "GT", + "zones": [ + "America/Guatemala" + ] + }, + "GU": { + "name": "Guam", + "abbr": "GU", + "zones": [ + "Pacific/Guam" + ] + }, + "GW": { + "name": "Guinea-Bissau", + "abbr": "GW", + "zones": [ + "Africa/Bissau" + ] + }, + "GY": { + "name": "Guyana", + "abbr": "GY", + "zones": [ + "America/Guyana" + ] + }, + "HK": { + "name": "Hong Kong", + "abbr": "HK", + "zones": [ + "Asia/Hong_Kong" + ] + }, + "HN": { + "name": "Honduras", + "abbr": "HN", + "zones": [ + "America/Tegucigalpa" + ] + }, + "HR": { + "name": "Croatia", + "abbr": "HR", + "zones": [ + "Europe/Belgrade" + ] + }, + "HT": { + "name": "Haiti", + "abbr": "HT", + "zones": [ + "America/Port-au-Prince" + ] + }, + "HU": { + "name": "Hungary", + "abbr": "HU", + "zones": [ + "Europe/Budapest" + ] + }, + "ID": { + "name": "Indonesia", + "abbr": "ID", + "zones": [ + "Asia/Jakarta", + "Asia/Pontianak", + "Asia/Makassar", + "Asia/Jayapura" + ] + }, + "IE": { + "name": "Ireland", + "abbr": "IE", + "zones": [ + "Europe/Dublin" + ] + }, + "IL": { + "name": "Israel", + "abbr": "IL", + "zones": [ + "Asia/Jerusalem" + ] + }, + "IM": { + "name": "Isle of Man", + "abbr": "IM", + "zones": [ + "Europe/London" + ] + }, + "IN": { + "name": "India", + "abbr": "IN", + "zones": [ + "Asia/Kolkata" + ] + }, + "IO": { + "name": "British Indian Ocean Territory", + "abbr": "IO", + "zones": [ + "Indian/Chagos" + ] + }, + "IQ": { + "name": "Iraq", + "abbr": "IQ", + "zones": [ + "Asia/Baghdad" + ] + }, + "IR": { + "name": "Iran", + "abbr": "IR", + "zones": [ + "Asia/Tehran" + ] + }, + "IS": { + "name": "Iceland", + "abbr": "IS", + "zones": [ + "Atlantic/Reykjavik" + ] + }, + "IT": { + "name": "Italy", + "abbr": "IT", + "zones": [ + "Europe/Rome" + ] + }, + "JE": { + "name": "Jersey", + "abbr": "JE", + "zones": [ + "Europe/London" + ] + }, + "JM": { + "name": "Jamaica", + "abbr": "JM", + "zones": [ + "America/Jamaica" + ] + }, + "JO": { + "name": "Jordan", + "abbr": "JO", + "zones": [ + "Asia/Amman" + ] + }, + "JP": { + "name": "Japan", + "abbr": "JP", + "zones": [ + "Asia/Tokyo" + ] + }, + "KE": { + "name": "Kenya", + "abbr": "KE", + "zones": [ + "Africa/Nairobi" + ] + }, + "KG": { + "name": "Kyrgyzstan", + "abbr": "KG", + "zones": [ + "Asia/Bishkek" + ] + }, + "KH": { + "name": "Cambodia", + "abbr": "KH", + "zones": [ + "Asia/Bangkok" + ] + }, + "KI": { + "name": "Kiribati", + "abbr": "KI", + "zones": [ + "Pacific/Tarawa", + "Pacific/Enderbury", + "Pacific/Kiritimati" + ] + }, + "KM": { + "name": "Comoros", + "abbr": "KM", + "zones": [ + "Africa/Nairobi" + ] + }, + "KN": { + "name": "St Kitts & Nevis", + "abbr": "KN", + "zones": [ + "America/Port_of_Spain" + ] + }, + "KP": { + "name": "Korea (North)", + "abbr": "KP", + "zones": [ + "Asia/Pyongyang" + ] + }, + "KR": { + "name": "Korea (South)", + "abbr": "KR", + "zones": [ + "Asia/Seoul" + ] + }, + "KW": { + "name": "Kuwait", + "abbr": "KW", + "zones": [ + "Asia/Riyadh" + ] + }, + "KY": { + "name": "Cayman Islands", + "abbr": "KY", + "zones": [ + "America/Panama" + ] + }, + "KZ": { + "name": "Kazakhstan", + "abbr": "KZ", + "zones": [ + "Asia/Almaty", + "Asia/Qyzylorda", + "Asia/Aqtobe", + "Asia/Aqtau", + "Asia/Atyrau", + "Asia/Oral" + ] + }, + "LA": { + "name": "Laos", + "abbr": "LA", + "zones": [ + "Asia/Bangkok" + ] + }, + "LB": { + "name": "Lebanon", + "abbr": "LB", + "zones": [ + "Asia/Beirut" + ] + }, + "LC": { + "name": "St Lucia", + "abbr": "LC", + "zones": [ + "America/Port_of_Spain" + ] + }, + "LI": { + "name": "Liechtenstein", + "abbr": "LI", + "zones": [ + "Europe/Zurich" + ] + }, + "LK": { + "name": "Sri Lanka", + "abbr": "LK", + "zones": [ + "Asia/Colombo" + ] + }, + "LR": { + "name": "Liberia", + "abbr": "LR", + "zones": [ + "Africa/Monrovia" + ] + }, + "LS": { + "name": "Lesotho", + "abbr": "LS", + "zones": [ + "Africa/Johannesburg" + ] + }, + "LT": { + "name": "Lithuania", + "abbr": "LT", + "zones": [ + "Europe/Vilnius" + ] + }, + "LU": { + "name": "Luxembourg", + "abbr": "LU", + "zones": [ + "Europe/Luxembourg" + ] + }, + "LV": { + "name": "Latvia", + "abbr": "LV", + "zones": [ + "Europe/Riga" + ] + }, + "LY": { + "name": "Libya", + "abbr": "LY", + "zones": [ + "Africa/Tripoli" + ] + }, + "MA": { + "name": "Morocco", + "abbr": "MA", + "zones": [ + "Africa/Casablanca" + ] + }, + "MC": { + "name": "Monaco", + "abbr": "MC", + "zones": [ + "Europe/Monaco" + ] + }, + "MD": { + "name": "Moldova", + "abbr": "MD", + "zones": [ + "Europe/Chisinau" + ] + }, + "ME": { + "name": "Montenegro", + "abbr": "ME", + "zones": [ + "Europe/Belgrade" + ] + }, + "MF": { + "name": "St Martin (French)", + "abbr": "MF", + "zones": [ + "America/Port_of_Spain" + ] + }, + "MG": { + "name": "Madagascar", + "abbr": "MG", + "zones": [ + "Africa/Nairobi" + ] + }, + "MH": { + "name": "Marshall Islands", + "abbr": "MH", + "zones": [ + "Pacific/Majuro", + "Pacific/Kwajalein" + ] + }, + "MK": { + "name": "Macedonia", + "abbr": "MK", + "zones": [ + "Europe/Belgrade" + ] + }, + "ML": { + "name": "Mali", + "abbr": "ML", + "zones": [ + "Africa/Abidjan" + ] + }, + "MM": { + "name": "Myanmar (Burma)", + "abbr": "MM", + "zones": [ + "Asia/Yangon" + ] + }, + "MN": { + "name": "Mongolia", + "abbr": "MN", + "zones": [ + "Asia/Ulaanbaatar", + "Asia/Hovd", + "Asia/Choibalsan" + ] + }, + "MO": { + "name": "Macau", + "abbr": "MO", + "zones": [ + "Asia/Macau" + ] + }, + "MP": { + "name": "Northern Mariana Islands", + "abbr": "MP", + "zones": [ + "Pacific/Guam" + ] + }, + "MQ": { + "name": "Martinique", + "abbr": "MQ", + "zones": [ + "America/Martinique" + ] + }, + "MR": { + "name": "Mauritania", + "abbr": "MR", + "zones": [ + "Africa/Abidjan" + ] + }, + "MS": { + "name": "Montserrat", + "abbr": "MS", + "zones": [ + "America/Port_of_Spain" + ] + }, + "MT": { + "name": "Malta", + "abbr": "MT", + "zones": [ + "Europe/Malta" + ] + }, + "MU": { + "name": "Mauritius", + "abbr": "MU", + "zones": [ + "Indian/Mauritius" + ] + }, + "MV": { + "name": "Maldives", + "abbr": "MV", + "zones": [ + "Indian/Maldives" + ] + }, + "MW": { + "name": "Malawi", + "abbr": "MW", + "zones": [ + "Africa/Maputo" + ] + }, + "MX": { + "name": "Mexico", + "abbr": "MX", + "zones": [ + "America/Mexico_City", + "America/Cancun", + "America/Merida", + "America/Monterrey", + "America/Matamoros", + "America/Mazatlan", + "America/Chihuahua", + "America/Ojinaga", + "America/Hermosillo", + "America/Tijuana", + "America/Bahia_Banderas" + ] + }, + "MY": { + "name": "Malaysia", + "abbr": "MY", + "zones": [ + "Asia/Kuala_Lumpur", + "Asia/Kuching" + ] + }, + "MZ": { + "name": "Mozambique", + "abbr": "MZ", + "zones": [ + "Africa/Maputo" + ] + }, + "NA": { + "name": "Namibia", + "abbr": "NA", + "zones": [ + "Africa/Windhoek" + ] + }, + "NC": { + "name": "New Caledonia", + "abbr": "NC", + "zones": [ + "Pacific/Noumea" + ] + }, + "NE": { + "name": "Niger", + "abbr": "NE", + "zones": [ + "Africa/Lagos" + ] + }, + "NF": { + "name": "Norfolk Island", + "abbr": "NF", + "zones": [ + "Pacific/Norfolk" + ] + }, + "NG": { + "name": "Nigeria", + "abbr": "NG", + "zones": [ + "Africa/Lagos" + ] + }, + "NI": { + "name": "Nicaragua", + "abbr": "NI", + "zones": [ + "America/Managua" + ] + }, + "NL": { + "name": "Netherlands", + "abbr": "NL", + "zones": [ + "Europe/Amsterdam" + ] + }, + "NO": { + "name": "Norway", + "abbr": "NO", + "zones": [ + "Europe/Oslo" + ] + }, + "NP": { + "name": "Nepal", + "abbr": "NP", + "zones": [ + "Asia/Kathmandu" + ] + }, + "NR": { + "name": "Nauru", + "abbr": "NR", + "zones": [ + "Pacific/Nauru" + ] + }, + "NU": { + "name": "Niue", + "abbr": "NU", + "zones": [ + "Pacific/Niue" + ] + }, + "NZ": { + "name": "New Zealand", + "abbr": "NZ", + "zones": [ + "Pacific/Auckland", + "Pacific/Chatham" + ] + }, + "OM": { + "name": "Oman", + "abbr": "OM", + "zones": [ + "Asia/Dubai" + ] + }, + "PA": { + "name": "Panama", + "abbr": "PA", + "zones": [ + "America/Panama" + ] + }, + "PE": { + "name": "Peru", + "abbr": "PE", + "zones": [ + "America/Lima" + ] + }, + "PF": { + "name": "French Polynesia", + "abbr": "PF", + "zones": [ + "Pacific/Tahiti", + "Pacific/Marquesas", + "Pacific/Gambier" + ] + }, + "PG": { + "name": "Papua New Guinea", + "abbr": "PG", + "zones": [ + "Pacific/Port_Moresby", + "Pacific/Bougainville" + ] + }, + "PH": { + "name": "Philippines", + "abbr": "PH", + "zones": [ + "Asia/Manila" + ] + }, + "PK": { + "name": "Pakistan", + "abbr": "PK", + "zones": [ + "Asia/Karachi" + ] + }, + "PL": { + "name": "Poland", + "abbr": "PL", + "zones": [ + "Europe/Warsaw" + ] + }, + "PM": { + "name": "St Pierre & Miquelon", + "abbr": "PM", + "zones": [ + "America/Miquelon" + ] + }, + "PN": { + "name": "Pitcairn", + "abbr": "PN", + "zones": [ + "Pacific/Pitcairn" + ] + }, + "PR": { + "name": "Puerto Rico", + "abbr": "PR", + "zones": [ + "America/Puerto_Rico" + ] + }, + "PS": { + "name": "Palestine", + "abbr": "PS", + "zones": [ + "Asia/Gaza", + "Asia/Hebron" + ] + }, + "PT": { + "name": "Portugal", + "abbr": "PT", + "zones": [ + "Europe/Lisbon", + "Atlantic/Madeira", + "Atlantic/Azores" + ] + }, + "PW": { + "name": "Palau", + "abbr": "PW", + "zones": [ + "Pacific/Palau" + ] + }, + "PY": { + "name": "Paraguay", + "abbr": "PY", + "zones": [ + "America/Asuncion" + ] + }, + "QA": { + "name": "Qatar", + "abbr": "QA", + "zones": [ + "Asia/Qatar" + ] + }, + "RE": { + "name": "Réunion", + "abbr": "RE", + "zones": [ + "Indian/Reunion" + ] + }, + "RO": { + "name": "Romania", + "abbr": "RO", + "zones": [ + "Europe/Bucharest" + ] + }, + "RS": { + "name": "Serbia", + "abbr": "RS", + "zones": [ + "Europe/Belgrade" + ] + }, + "RU": { + "name": "Russia", + "abbr": "RU", + "zones": [ + "Europe/Kaliningrad", + "Europe/Moscow", + "Europe/Simferopol", + "Europe/Volgograd", + "Europe/Kirov", + "Europe/Astrakhan", + "Europe/Saratov", + "Europe/Ulyanovsk", + "Europe/Samara", + "Asia/Yekaterinburg", + "Asia/Omsk", + "Asia/Novosibirsk", + "Asia/Barnaul", + "Asia/Tomsk", + "Asia/Novokuznetsk", + "Asia/Krasnoyarsk", + "Asia/Irkutsk", + "Asia/Chita", + "Asia/Yakutsk", + "Asia/Khandyga", + "Asia/Vladivostok", + "Asia/Ust-Nera", + "Asia/Magadan", + "Asia/Sakhalin", + "Asia/Srednekolymsk", + "Asia/Kamchatka", + "Asia/Anadyr" + ] + }, + "RW": { + "name": "Rwanda", + "abbr": "RW", + "zones": [ + "Africa/Maputo" + ] + }, + "SA": { + "name": "Saudi Arabia", + "abbr": "SA", + "zones": [ + "Asia/Riyadh" + ] + }, + "SB": { + "name": "Solomon Islands", + "abbr": "SB", + "zones": [ + "Pacific/Guadalcanal" + ] + }, + "SC": { + "name": "Seychelles", + "abbr": "SC", + "zones": [ + "Indian/Mahe" + ] + }, + "SD": { + "name": "Sudan", + "abbr": "SD", + "zones": [ + "Africa/Khartoum" + ] + }, + "SE": { + "name": "Sweden", + "abbr": "SE", + "zones": [ + "Europe/Stockholm" + ] + }, + "SG": { + "name": "Singapore", + "abbr": "SG", + "zones": [ + "Asia/Singapore" + ] + }, + "SH": { + "name": "St Helena", + "abbr": "SH", + "zones": [ + "Africa/Abidjan" + ] + }, + "SI": { + "name": "Slovenia", + "abbr": "SI", + "zones": [ + "Europe/Belgrade" + ] + }, + "SJ": { + "name": "Svalbard & Jan Mayen", + "abbr": "SJ", + "zones": [ + "Europe/Oslo" + ] + }, + "SK": { + "name": "Slovakia", + "abbr": "SK", + "zones": [ + "Europe/Prague" + ] + }, + "SL": { + "name": "Sierra Leone", + "abbr": "SL", + "zones": [ + "Africa/Abidjan" + ] + }, + "SM": { + "name": "San Marino", + "abbr": "SM", + "zones": [ + "Europe/Rome" + ] + }, + "SN": { + "name": "Senegal", + "abbr": "SN", + "zones": [ + "Africa/Abidjan" + ] + }, + "SO": { + "name": "Somalia", + "abbr": "SO", + "zones": [ + "Africa/Nairobi" + ] + }, + "SR": { + "name": "Suriname", + "abbr": "SR", + "zones": [ + "America/Paramaribo" + ] + }, + "SS": { + "name": "South Sudan", + "abbr": "SS", + "zones": [ + "Africa/Khartoum" + ] + }, + "ST": { + "name": "Sao Tome & Principe", + "abbr": "ST", + "zones": [ + "Africa/Abidjan" + ] + }, + "SV": { + "name": "El Salvador", + "abbr": "SV", + "zones": [ + "America/El_Salvador" + ] + }, + "SX": { + "name": "St Maarten (Dutch)", + "abbr": "SX", + "zones": [ + "America/Curacao" + ] + }, + "SY": { + "name": "Syria", + "abbr": "SY", + "zones": [ + "Asia/Damascus" + ] + }, + "SZ": { + "name": "Swaziland", + "abbr": "SZ", + "zones": [ + "Africa/Johannesburg" + ] + }, + "TC": { + "name": "Turks & Caicos Is", + "abbr": "TC", + "zones": [ + "America/Grand_Turk" + ] + }, + "TD": { + "name": "Chad", + "abbr": "TD", + "zones": [ + "Africa/Ndjamena" + ] + }, + "TF": { + "name": "French Southern & Antarctic Lands", + "abbr": "TF", + "zones": [ + "Indian/Reunion", + "Indian/Kerguelen" + ] + }, + "TG": { + "name": "Togo", + "abbr": "TG", + "zones": [ + "Africa/Abidjan" + ] + }, + "TH": { + "name": "Thailand", + "abbr": "TH", + "zones": [ + "Asia/Bangkok" + ] + }, + "TJ": { + "name": "Tajikistan", + "abbr": "TJ", + "zones": [ + "Asia/Dushanbe" + ] + }, + "TK": { + "name": "Tokelau", + "abbr": "TK", + "zones": [ + "Pacific/Fakaofo" + ] + }, + "TL": { + "name": "East Timor", + "abbr": "TL", + "zones": [ + "Asia/Dili" + ] + }, + "TM": { + "name": "Turkmenistan", + "abbr": "TM", + "zones": [ + "Asia/Ashgabat" + ] + }, + "TN": { + "name": "Tunisia", + "abbr": "TN", + "zones": [ + "Africa/Tunis" + ] + }, + "TO": { + "name": "Tonga", + "abbr": "TO", + "zones": [ + "Pacific/Tongatapu" + ] + }, + "TR": { + "name": "Turkey", + "abbr": "TR", + "zones": [ + "Europe/Istanbul" + ] + }, + "TT": { + "name": "Trinidad & Tobago", + "abbr": "TT", + "zones": [ + "America/Port_of_Spain" + ] + }, + "TV": { + "name": "Tuvalu", + "abbr": "TV", + "zones": [ + "Pacific/Funafuti" + ] + }, + "TW": { + "name": "Taiwan", + "abbr": "TW", + "zones": [ + "Asia/Taipei" + ] + }, + "TZ": { + "name": "Tanzania", + "abbr": "TZ", + "zones": [ + "Africa/Nairobi" + ] + }, + "UA": { + "name": "Ukraine", + "abbr": "UA", + "zones": [ + "Europe/Kiev", + "Europe/Uzhgorod", + "Europe/Zaporozhye" + ] + }, + "UG": { + "name": "Uganda", + "abbr": "UG", + "zones": [ + "Africa/Nairobi" + ] + }, + "UM": { + "name": "US minor outlying islands", + "abbr": "UM", + "zones": [ + "Pacific/Pago_Pago", + "Pacific/Wake", + "Pacific/Honolulu" + ] + }, + "US": { + "name": "United States", + "abbr": "US", + "zones": [ + "America/New_York", + "America/Detroit", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Indiana/Indianapolis", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Vevay", + "America/Chicago", + "America/Indiana/Tell_City", + "America/Indiana/Knox", + "America/Menominee", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/North_Dakota/Beulah", + "America/Denver", + "America/Boise", + "America/Phoenix", + "America/Los_Angeles", + "America/Anchorage", + "America/Juneau", + "America/Sitka", + "America/Metlakatla", + "America/Yakutat", + "America/Nome", + "America/Adak", + "Pacific/Honolulu" + ] + }, + "UY": { + "name": "Uruguay", + "abbr": "UY", + "zones": [ + "America/Montevideo" + ] + }, + "UZ": { + "name": "Uzbekistan", + "abbr": "UZ", + "zones": [ + "Asia/Samarkand", + "Asia/Tashkent" + ] + }, + "VA": { + "name": "Vatican City", + "abbr": "VA", + "zones": [ + "Europe/Rome" + ] + }, + "VC": { + "name": "St Vincent", + "abbr": "VC", + "zones": [ + "America/Port_of_Spain" + ] + }, + "VE": { + "name": "Venezuela", + "abbr": "VE", + "zones": [ + "America/Caracas" + ] + }, + "VG": { + "name": "Virgin Islands (UK)", + "abbr": "VG", + "zones": [ + "America/Port_of_Spain" + ] + }, + "VI": { + "name": "Virgin Islands (US)", + "abbr": "VI", + "zones": [ + "America/Port_of_Spain" + ] + }, + "VN": { + "name": "Vietnam", + "abbr": "VN", + "zones": [ + "Asia/Bangkok", + "Asia/Ho_Chi_Minh" + ] + }, + "VU": { + "name": "Vanuatu", + "abbr": "VU", + "zones": [ + "Pacific/Efate" + ] + }, + "WF": { + "name": "Wallis & Futuna", + "abbr": "WF", + "zones": [ + "Pacific/Wallis" + ] + }, + "WS": { + "name": "Samoa (western)", + "abbr": "WS", + "zones": [ + "Pacific/Apia" + ] + }, + "YE": { + "name": "Yemen", + "abbr": "YE", + "zones": [ + "Asia/Riyadh" + ] + }, + "YT": { + "name": "Mayotte", + "abbr": "YT", + "zones": [ + "Africa/Nairobi" + ] + }, + "ZA": { + "name": "South Africa", + "abbr": "ZA", + "zones": [ + "Africa/Johannesburg" + ] + }, + "ZM": { + "name": "Zambia", + "abbr": "ZM", + "zones": [ + "Africa/Maputo" + ] + }, + "ZW": { + "name": "Zimbabwe", + "abbr": "ZW", + "zones": [ + "Africa/Maputo" + ] + } + }, + "zones": { + "Europe/Andorra": { + "name": "Europe/Andorra", + "lat": 42.5, + "long": 1.5167, + "countries": [ + "AD" + ], + "comments": "" + }, + "Asia/Dubai": { + "name": "Asia/Dubai", + "lat": 25.3, + "long": 55.3, + "countries": [ + "AE", + "OM" + ], + "comments": "" + }, + "Asia/Kabul": { + "name": "Asia/Kabul", + "lat": 34.5167, + "long": 69.2, + "countries": [ + "AF" + ], + "comments": "" + }, + "Europe/Tirane": { + "name": "Europe/Tirane", + "lat": 41.3333, + "long": 19.8333, + "countries": [ + "AL" + ], + "comments": "" + }, + "Asia/Yerevan": { + "name": "Asia/Yerevan", + "lat": 40.1833, + "long": 44.5, + "countries": [ + "AM" + ], + "comments": "" + }, + "Antarctica/Casey": { + "name": "Antarctica/Casey", + "lat": -65.7167, + "long": 110.5167, + "countries": [ + "AQ" + ], + "comments": "Casey" + }, + "Antarctica/Davis": { + "name": "Antarctica/Davis", + "lat": -67.4167, + "long": 77.9667, + "countries": [ + "AQ" + ], + "comments": "Davis" + }, + "Antarctica/DumontDUrville": { + "name": "Antarctica/DumontDUrville", + "lat": -65.3333, + "long": 140.0167, + "countries": [ + "AQ" + ], + "comments": "Dumont-d'Urville" + }, + "Antarctica/Mawson": { + "name": "Antarctica/Mawson", + "lat": -66.4, + "long": 62.8833, + "countries": [ + "AQ" + ], + "comments": "Mawson" + }, + "Antarctica/Palmer": { + "name": "Antarctica/Palmer", + "lat": -63.2, + "long": -63.9, + "countries": [ + "AQ" + ], + "comments": "Palmer" + }, + "Antarctica/Rothera": { + "name": "Antarctica/Rothera", + "lat": -66.4333, + "long": -67.8667, + "countries": [ + "AQ" + ], + "comments": "Rothera" + }, + "Antarctica/Syowa": { + "name": "Antarctica/Syowa", + "lat": -68.9939, + "long": 39.59, + "countries": [ + "AQ" + ], + "comments": "Syowa" + }, + "Antarctica/Troll": { + "name": "Antarctica/Troll", + "lat": -71.9886, + "long": 2.535, + "countries": [ + "AQ" + ], + "comments": "Troll" + }, + "Antarctica/Vostok": { + "name": "Antarctica/Vostok", + "lat": -77.6, + "long": 106.9, + "countries": [ + "AQ" + ], + "comments": "Vostok" + }, + "America/Argentina/Buenos_Aires": { + "name": "America/Argentina/Buenos_Aires", + "lat": -33.4, + "long": -57.55, + "countries": [ + "AR" + ], + "comments": "Buenos Aires (BA, CF)" + }, + "America/Argentina/Cordoba": { + "name": "America/Argentina/Cordoba", + "lat": -30.6, + "long": -63.8167, + "countries": [ + "AR" + ], + "comments": "Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)" + }, + "America/Argentina/Salta": { + "name": "America/Argentina/Salta", + "lat": -23.2167, + "long": -64.5833, + "countries": [ + "AR" + ], + "comments": "Salta (SA, LP, NQ, RN)" + }, + "America/Argentina/Jujuy": { + "name": "America/Argentina/Jujuy", + "lat": -23.8167, + "long": -64.7, + "countries": [ + "AR" + ], + "comments": "Jujuy (JY)" + }, + "America/Argentina/Tucuman": { + "name": "America/Argentina/Tucuman", + "lat": -25.1833, + "long": -64.7833, + "countries": [ + "AR" + ], + "comments": "Tucumán (TM)" + }, + "America/Argentina/Catamarca": { + "name": "America/Argentina/Catamarca", + "lat": -27.5333, + "long": -64.2167, + "countries": [ + "AR" + ], + "comments": "Catamarca (CT); Chubut (CH)" + }, + "America/Argentina/La_Rioja": { + "name": "America/Argentina/La_Rioja", + "lat": -28.5667, + "long": -65.15, + "countries": [ + "AR" + ], + "comments": "La Rioja (LR)" + }, + "America/Argentina/San_Juan": { + "name": "America/Argentina/San_Juan", + "lat": -30.4667, + "long": -67.4833, + "countries": [ + "AR" + ], + "comments": "San Juan (SJ)" + }, + "America/Argentina/Mendoza": { + "name": "America/Argentina/Mendoza", + "lat": -31.1167, + "long": -67.1833, + "countries": [ + "AR" + ], + "comments": "Mendoza (MZ)" + }, + "America/Argentina/San_Luis": { + "name": "America/Argentina/San_Luis", + "lat": -32.6833, + "long": -65.65, + "countries": [ + "AR" + ], + "comments": "San Luis (SL)" + }, + "America/Argentina/Rio_Gallegos": { + "name": "America/Argentina/Rio_Gallegos", + "lat": -50.3667, + "long": -68.7833, + "countries": [ + "AR" + ], + "comments": "Santa Cruz (SC)" + }, + "America/Argentina/Ushuaia": { + "name": "America/Argentina/Ushuaia", + "lat": -53.2, + "long": -67.7, + "countries": [ + "AR" + ], + "comments": "Tierra del Fuego (TF)" + }, + "Pacific/Pago_Pago": { + "name": "Pacific/Pago_Pago", + "lat": -13.7333, + "long": -169.3, + "countries": [ + "AS", + "UM" + ], + "comments": "Samoa, Midway" + }, + "Europe/Vienna": { + "name": "Europe/Vienna", + "lat": 48.2167, + "long": 16.3333, + "countries": [ + "AT" + ], + "comments": "" + }, + "Australia/Lord_Howe": { + "name": "Australia/Lord_Howe", + "lat": -30.45, + "long": 159.0833, + "countries": [ + "AU" + ], + "comments": "Lord Howe Island" + }, + "Antarctica/Macquarie": { + "name": "Antarctica/Macquarie", + "lat": -53.5, + "long": 158.95, + "countries": [ + "AU" + ], + "comments": "Macquarie Island" + }, + "Australia/Hobart": { + "name": "Australia/Hobart", + "lat": -41.1167, + "long": 147.3167, + "countries": [ + "AU" + ], + "comments": "Tasmania (most areas)" + }, + "Australia/Currie": { + "name": "Australia/Currie", + "lat": -38.0667, + "long": 143.8667, + "countries": [ + "AU" + ], + "comments": "Tasmania (King Island)" + }, + "Australia/Melbourne": { + "name": "Australia/Melbourne", + "lat": -36.1833, + "long": 144.9667, + "countries": [ + "AU" + ], + "comments": "Victoria" + }, + "Australia/Sydney": { + "name": "Australia/Sydney", + "lat": -32.1333, + "long": 151.2167, + "countries": [ + "AU" + ], + "comments": "New South Wales (most areas)" + }, + "Australia/Broken_Hill": { + "name": "Australia/Broken_Hill", + "lat": -30.05, + "long": 141.45, + "countries": [ + "AU" + ], + "comments": "New South Wales (Yancowinna)" + }, + "Australia/Brisbane": { + "name": "Australia/Brisbane", + "lat": -26.5333, + "long": 153.0333, + "countries": [ + "AU" + ], + "comments": "Queensland (most areas)" + }, + "Australia/Lindeman": { + "name": "Australia/Lindeman", + "lat": -19.7333, + "long": 149, + "countries": [ + "AU" + ], + "comments": "Queensland (Whitsunday Islands)" + }, + "Australia/Adelaide": { + "name": "Australia/Adelaide", + "lat": -33.0833, + "long": 138.5833, + "countries": [ + "AU" + ], + "comments": "South Australia" + }, + "Australia/Darwin": { + "name": "Australia/Darwin", + "lat": -11.5333, + "long": 130.8333, + "countries": [ + "AU" + ], + "comments": "Northern Territory" + }, + "Australia/Perth": { + "name": "Australia/Perth", + "lat": -30.05, + "long": 115.85, + "countries": [ + "AU" + ], + "comments": "Western Australia (most areas)" + }, + "Australia/Eucla": { + "name": "Australia/Eucla", + "lat": -30.2833, + "long": 128.8667, + "countries": [ + "AU" + ], + "comments": "Western Australia (Eucla)" + }, + "Asia/Baku": { + "name": "Asia/Baku", + "lat": 40.3833, + "long": 49.85, + "countries": [ + "AZ" + ], + "comments": "" + }, + "America/Barbados": { + "name": "America/Barbados", + "lat": 13.1, + "long": -58.3833, + "countries": [ + "BB" + ], + "comments": "" + }, + "Asia/Dhaka": { + "name": "Asia/Dhaka", + "lat": 23.7167, + "long": 90.4167, + "countries": [ + "BD" + ], + "comments": "" + }, + "Europe/Brussels": { + "name": "Europe/Brussels", + "lat": 50.8333, + "long": 4.3333, + "countries": [ + "BE" + ], + "comments": "" + }, + "Europe/Sofia": { + "name": "Europe/Sofia", + "lat": 42.6833, + "long": 23.3167, + "countries": [ + "BG" + ], + "comments": "" + }, + "Atlantic/Bermuda": { + "name": "Atlantic/Bermuda", + "lat": 32.2833, + "long": -63.2333, + "countries": [ + "BM" + ], + "comments": "" + }, + "Asia/Brunei": { + "name": "Asia/Brunei", + "lat": 4.9333, + "long": 114.9167, + "countries": [ + "BN" + ], + "comments": "" + }, + "America/La_Paz": { + "name": "America/La_Paz", + "lat": -15.5, + "long": -67.85, + "countries": [ + "BO" + ], + "comments": "" + }, + "America/Noronha": { + "name": "America/Noronha", + "lat": -2.15, + "long": -31.5833, + "countries": [ + "BR" + ], + "comments": "Atlantic islands" + }, + "America/Belem": { + "name": "America/Belem", + "lat": -0.55, + "long": -47.5167, + "countries": [ + "BR" + ], + "comments": "Pará (east); Amapá" + }, + "America/Fortaleza": { + "name": "America/Fortaleza", + "lat": -2.2833, + "long": -37.5, + "countries": [ + "BR" + ], + "comments": "Brazil (northeast: MA, PI, CE, RN, PB)" + }, + "America/Recife": { + "name": "America/Recife", + "lat": -7.95, + "long": -33.1, + "countries": [ + "BR" + ], + "comments": "Pernambuco" + }, + "America/Araguaina": { + "name": "America/Araguaina", + "lat": -6.8, + "long": -47.8, + "countries": [ + "BR" + ], + "comments": "Tocantins" + }, + "America/Maceio": { + "name": "America/Maceio", + "lat": -8.3333, + "long": -34.2833, + "countries": [ + "BR" + ], + "comments": "Alagoas, Sergipe" + }, + "America/Bahia": { + "name": "America/Bahia", + "lat": -11.0167, + "long": -37.4833, + "countries": [ + "BR" + ], + "comments": "Bahia" + }, + "America/Sao_Paulo": { + "name": "America/Sao_Paulo", + "lat": -22.4667, + "long": -45.3833, + "countries": [ + "BR" + ], + "comments": "Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)" + }, + "America/Campo_Grande": { + "name": "America/Campo_Grande", + "lat": -19.55, + "long": -53.3833, + "countries": [ + "BR" + ], + "comments": "Mato Grosso do Sul" + }, + "America/Cuiaba": { + "name": "America/Cuiaba", + "lat": -14.4167, + "long": -55.9167, + "countries": [ + "BR" + ], + "comments": "Mato Grosso" + }, + "America/Santarem": { + "name": "America/Santarem", + "lat": -1.5667, + "long": -53.1333, + "countries": [ + "BR" + ], + "comments": "Pará (west)" + }, + "America/Porto_Velho": { + "name": "America/Porto_Velho", + "lat": -7.2333, + "long": -62.1, + "countries": [ + "BR" + ], + "comments": "Rondônia" + }, + "America/Boa_Vista": { + "name": "America/Boa_Vista", + "lat": 2.8167, + "long": -59.3333, + "countries": [ + "BR" + ], + "comments": "Roraima" + }, + "America/Manaus": { + "name": "America/Manaus", + "lat": -2.8667, + "long": -59.9833, + "countries": [ + "BR" + ], + "comments": "Amazonas (east)" + }, + "America/Eirunepe": { + "name": "America/Eirunepe", + "lat": -5.3333, + "long": -68.1333, + "countries": [ + "BR" + ], + "comments": "Amazonas (west)" + }, + "America/Rio_Branco": { + "name": "America/Rio_Branco", + "lat": -8.0333, + "long": -66.2, + "countries": [ + "BR" + ], + "comments": "Acre" + }, + "America/Nassau": { + "name": "America/Nassau", + "lat": 25.0833, + "long": -76.65, + "countries": [ + "BS" + ], + "comments": "" + }, + "Asia/Thimphu": { + "name": "Asia/Thimphu", + "lat": 27.4667, + "long": 89.65, + "countries": [ + "BT" + ], + "comments": "" + }, + "Europe/Minsk": { + "name": "Europe/Minsk", + "lat": 53.9, + "long": 27.5667, + "countries": [ + "BY" + ], + "comments": "" + }, + "America/Belize": { + "name": "America/Belize", + "lat": 17.5, + "long": -87.8, + "countries": [ + "BZ" + ], + "comments": "" + }, + "America/St_Johns": { + "name": "America/St_Johns", + "lat": 47.5667, + "long": -51.2833, + "countries": [ + "CA" + ], + "comments": "Newfoundland; Labrador (southeast)" + }, + "America/Halifax": { + "name": "America/Halifax", + "lat": 44.65, + "long": -62.4, + "countries": [ + "CA" + ], + "comments": "Atlantic - NS (most areas); PE" + }, + "America/Glace_Bay": { + "name": "America/Glace_Bay", + "lat": 46.2, + "long": -58.05, + "countries": [ + "CA" + ], + "comments": "Atlantic - NS (Cape Breton)" + }, + "America/Moncton": { + "name": "America/Moncton", + "lat": 46.1, + "long": -63.2167, + "countries": [ + "CA" + ], + "comments": "Atlantic - New Brunswick" + }, + "America/Goose_Bay": { + "name": "America/Goose_Bay", + "lat": 53.3333, + "long": -59.5833, + "countries": [ + "CA" + ], + "comments": "Atlantic - Labrador (most areas)" + }, + "America/Blanc-Sablon": { + "name": "America/Blanc-Sablon", + "lat": 51.4167, + "long": -56.8833, + "countries": [ + "CA" + ], + "comments": "AST - QC (Lower North Shore)" + }, + "America/Toronto": { + "name": "America/Toronto", + "lat": 43.65, + "long": -78.6167, + "countries": [ + "CA" + ], + "comments": "Eastern - ON, QC (most areas)" + }, + "America/Nipigon": { + "name": "America/Nipigon", + "lat": 49.0167, + "long": -87.7333, + "countries": [ + "CA" + ], + "comments": "Eastern - ON, QC (no DST 1967-73)" + }, + "America/Thunder_Bay": { + "name": "America/Thunder_Bay", + "lat": 48.3833, + "long": -88.75, + "countries": [ + "CA" + ], + "comments": "Eastern - ON (Thunder Bay)" + }, + "America/Iqaluit": { + "name": "America/Iqaluit", + "lat": 63.7333, + "long": -67.5333, + "countries": [ + "CA" + ], + "comments": "Eastern - NU (most east areas)" + }, + "America/Pangnirtung": { + "name": "America/Pangnirtung", + "lat": 66.1333, + "long": -64.2667, + "countries": [ + "CA" + ], + "comments": "Eastern - NU (Pangnirtung)" + }, + "America/Atikokan": { + "name": "America/Atikokan", + "lat": 48.7586, + "long": -90.3783, + "countries": [ + "CA" + ], + "comments": "EST - ON (Atikokan); NU (Coral H)" + }, + "America/Winnipeg": { + "name": "America/Winnipeg", + "lat": 49.8833, + "long": -96.85, + "countries": [ + "CA" + ], + "comments": "Central - ON (west); Manitoba" + }, + "America/Rainy_River": { + "name": "America/Rainy_River", + "lat": 48.7167, + "long": -93.4333, + "countries": [ + "CA" + ], + "comments": "Central - ON (Rainy R, Ft Frances)" + }, + "America/Resolute": { + "name": "America/Resolute", + "lat": 74.6956, + "long": -93.1708, + "countries": [ + "CA" + ], + "comments": "Central - NU (Resolute)" + }, + "America/Rankin_Inlet": { + "name": "America/Rankin_Inlet", + "lat": 62.8167, + "long": -91.9169, + "countries": [ + "CA" + ], + "comments": "Central - NU (central)" + }, + "America/Regina": { + "name": "America/Regina", + "lat": 50.4, + "long": -103.35, + "countries": [ + "CA" + ], + "comments": "CST - SK (most areas)" + }, + "America/Swift_Current": { + "name": "America/Swift_Current", + "lat": 50.2833, + "long": -106.1667, + "countries": [ + "CA" + ], + "comments": "CST - SK (midwest)" + }, + "America/Edmonton": { + "name": "America/Edmonton", + "lat": 53.55, + "long": -112.5333, + "countries": [ + "CA" + ], + "comments": "Mountain - AB; BC (E); SK (W)" + }, + "America/Cambridge_Bay": { + "name": "America/Cambridge_Bay", + "lat": 69.1139, + "long": -104.9472, + "countries": [ + "CA" + ], + "comments": "Mountain - NU (west)" + }, + "America/Yellowknife": { + "name": "America/Yellowknife", + "lat": 62.45, + "long": -113.65, + "countries": [ + "CA" + ], + "comments": "Mountain - NT (central)" + }, + "America/Inuvik": { + "name": "America/Inuvik", + "lat": 68.3497, + "long": -132.2833, + "countries": [ + "CA" + ], + "comments": "Mountain - NT (west)" + }, + "America/Creston": { + "name": "America/Creston", + "lat": 49.1, + "long": -115.4833, + "countries": [ + "CA" + ], + "comments": "MST - BC (Creston)" + }, + "America/Dawson_Creek": { + "name": "America/Dawson_Creek", + "lat": 59.7667, + "long": -119.7667, + "countries": [ + "CA" + ], + "comments": "MST - BC (Dawson Cr, Ft St John)" + }, + "America/Fort_Nelson": { + "name": "America/Fort_Nelson", + "lat": 58.8, + "long": -121.3, + "countries": [ + "CA" + ], + "comments": "MST - BC (Ft Nelson)" + }, + "America/Vancouver": { + "name": "America/Vancouver", + "lat": 49.2667, + "long": -122.8833, + "countries": [ + "CA" + ], + "comments": "Pacific - BC (most areas)" + }, + "America/Whitehorse": { + "name": "America/Whitehorse", + "lat": 60.7167, + "long": -134.95, + "countries": [ + "CA" + ], + "comments": "Pacific - Yukon (south)" + }, + "America/Dawson": { + "name": "America/Dawson", + "lat": 64.0667, + "long": -138.5833, + "countries": [ + "CA" + ], + "comments": "Pacific - Yukon (north)" + }, + "Indian/Cocos": { + "name": "Indian/Cocos", + "lat": -11.8333, + "long": 96.9167, + "countries": [ + "CC" + ], + "comments": "" + }, + "Europe/Zurich": { + "name": "Europe/Zurich", + "lat": 47.3833, + "long": 8.5333, + "countries": [ + "CH", + "DE", + "LI" + ], + "comments": "Swiss time" + }, + "Africa/Abidjan": { + "name": "Africa/Abidjan", + "lat": 5.3167, + "long": -3.9667, + "countries": [ + "CI", + "BF", + "GM", + "GN", + "ML", + "MR", + "SH", + "SL", + "SN", + "ST", + "TG" + ], + "comments": "" + }, + "Pacific/Rarotonga": { + "name": "Pacific/Rarotonga", + "lat": -20.7667, + "long": -158.2333, + "countries": [ + "CK" + ], + "comments": "" + }, + "America/Santiago": { + "name": "America/Santiago", + "lat": -32.55, + "long": -69.3333, + "countries": [ + "CL" + ], + "comments": "Chile (most areas)" + }, + "Pacific/Easter": { + "name": "Pacific/Easter", + "lat": -26.85, + "long": -108.5667, + "countries": [ + "CL" + ], + "comments": "Easter Island" + }, + "Asia/Shanghai": { + "name": "Asia/Shanghai", + "lat": 31.2333, + "long": 121.4667, + "countries": [ + "CN" + ], + "comments": "Beijing Time" + }, + "Asia/Urumqi": { + "name": "Asia/Urumqi", + "lat": 43.8, + "long": 87.5833, + "countries": [ + "CN" + ], + "comments": "Xinjiang Time" + }, + "America/Bogota": { + "name": "America/Bogota", + "lat": 4.6, + "long": -73.9167, + "countries": [ + "CO" + ], + "comments": "" + }, + "America/Costa_Rica": { + "name": "America/Costa_Rica", + "lat": 9.9333, + "long": -83.9167, + "countries": [ + "CR" + ], + "comments": "" + }, + "America/Havana": { + "name": "America/Havana", + "lat": 23.1333, + "long": -81.6333, + "countries": [ + "CU" + ], + "comments": "" + }, + "Atlantic/Cape_Verde": { + "name": "Atlantic/Cape_Verde", + "lat": 14.9167, + "long": -22.4833, + "countries": [ + "CV" + ], + "comments": "" + }, + "America/Curacao": { + "name": "America/Curacao", + "lat": 12.1833, + "long": -69, + "countries": [ + "CW", + "AW", + "BQ", + "SX" + ], + "comments": "" + }, + "Indian/Christmas": { + "name": "Indian/Christmas", + "lat": -9.5833, + "long": 105.7167, + "countries": [ + "CX" + ], + "comments": "" + }, + "Asia/Nicosia": { + "name": "Asia/Nicosia", + "lat": 35.1667, + "long": 33.3667, + "countries": [ + "CY" + ], + "comments": "Cyprus (most areas)" + }, + "Asia/Famagusta": { + "name": "Asia/Famagusta", + "lat": 35.1167, + "long": 33.95, + "countries": [ + "CY" + ], + "comments": "Northern Cyprus" + }, + "Europe/Prague": { + "name": "Europe/Prague", + "lat": 50.0833, + "long": 14.4333, + "countries": [ + "CZ", + "SK" + ], + "comments": "" + }, + "Europe/Berlin": { + "name": "Europe/Berlin", + "lat": 52.5, + "long": 13.3667, + "countries": [ + "DE" + ], + "comments": "Germany (most areas)" + }, + "Europe/Copenhagen": { + "name": "Europe/Copenhagen", + "lat": 55.6667, + "long": 12.5833, + "countries": [ + "DK" + ], + "comments": "" + }, + "America/Santo_Domingo": { + "name": "America/Santo_Domingo", + "lat": 18.4667, + "long": -68.1, + "countries": [ + "DO" + ], + "comments": "" + }, + "Africa/Algiers": { + "name": "Africa/Algiers", + "lat": 36.7833, + "long": 3.05, + "countries": [ + "DZ" + ], + "comments": "" + }, + "America/Guayaquil": { + "name": "America/Guayaquil", + "lat": -1.8333, + "long": -78.1667, + "countries": [ + "EC" + ], + "comments": "Ecuador (mainland)" + }, + "Pacific/Galapagos": { + "name": "Pacific/Galapagos", + "lat": 0.9, + "long": -88.4, + "countries": [ + "EC" + ], + "comments": "Galápagos Islands" + }, + "Europe/Tallinn": { + "name": "Europe/Tallinn", + "lat": 59.4167, + "long": 24.75, + "countries": [ + "EE" + ], + "comments": "" + }, + "Africa/Cairo": { + "name": "Africa/Cairo", + "lat": 30.05, + "long": 31.25, + "countries": [ + "EG" + ], + "comments": "" + }, + "Africa/El_Aaiun": { + "name": "Africa/El_Aaiun", + "lat": 27.15, + "long": -12.8, + "countries": [ + "EH" + ], + "comments": "" + }, + "Europe/Madrid": { + "name": "Europe/Madrid", + "lat": 40.4, + "long": -2.3167, + "countries": [ + "ES" + ], + "comments": "Spain (mainland)" + }, + "Africa/Ceuta": { + "name": "Africa/Ceuta", + "lat": 35.8833, + "long": -4.6833, + "countries": [ + "ES" + ], + "comments": "Ceuta, Melilla" + }, + "Atlantic/Canary": { + "name": "Atlantic/Canary", + "lat": 28.1, + "long": -14.6, + "countries": [ + "ES" + ], + "comments": "Canary Islands" + }, + "Europe/Helsinki": { + "name": "Europe/Helsinki", + "lat": 60.1667, + "long": 24.9667, + "countries": [ + "FI", + "AX" + ], + "comments": "" + }, + "Pacific/Fiji": { + "name": "Pacific/Fiji", + "lat": -17.8667, + "long": 178.4167, + "countries": [ + "FJ" + ], + "comments": "" + }, + "Atlantic/Stanley": { + "name": "Atlantic/Stanley", + "lat": -50.3, + "long": -56.15, + "countries": [ + "FK" + ], + "comments": "" + }, + "Pacific/Chuuk": { + "name": "Pacific/Chuuk", + "lat": 7.4167, + "long": 151.7833, + "countries": [ + "FM" + ], + "comments": "Chuuk/Truk, Yap" + }, + "Pacific/Pohnpei": { + "name": "Pacific/Pohnpei", + "lat": 6.9667, + "long": 158.2167, + "countries": [ + "FM" + ], + "comments": "Pohnpei/Ponape" + }, + "Pacific/Kosrae": { + "name": "Pacific/Kosrae", + "lat": 5.3167, + "long": 162.9833, + "countries": [ + "FM" + ], + "comments": "Kosrae" + }, + "Atlantic/Faroe": { + "name": "Atlantic/Faroe", + "lat": 62.0167, + "long": -5.2333, + "countries": [ + "FO" + ], + "comments": "" + }, + "Europe/Paris": { + "name": "Europe/Paris", + "lat": 48.8667, + "long": 2.3333, + "countries": [ + "FR" + ], + "comments": "" + }, + "Europe/London": { + "name": "Europe/London", + "lat": 51.5083, + "long": 0.1253, + "countries": [ + "GB", + "GG", + "IM", + "JE" + ], + "comments": "" + }, + "Asia/Tbilisi": { + "name": "Asia/Tbilisi", + "lat": 41.7167, + "long": 44.8167, + "countries": [ + "GE" + ], + "comments": "" + }, + "America/Cayenne": { + "name": "America/Cayenne", + "lat": 4.9333, + "long": -51.6667, + "countries": [ + "GF" + ], + "comments": "" + }, + "Africa/Accra": { + "name": "Africa/Accra", + "lat": 5.55, + "long": 0.2167, + "countries": [ + "GH" + ], + "comments": "" + }, + "Europe/Gibraltar": { + "name": "Europe/Gibraltar", + "lat": 36.1333, + "long": -4.65, + "countries": [ + "GI" + ], + "comments": "" + }, + "America/Godthab": { + "name": "America/Godthab", + "lat": 64.1833, + "long": -50.2667, + "countries": [ + "GL" + ], + "comments": "Greenland (most areas)" + }, + "America/Danmarkshavn": { + "name": "America/Danmarkshavn", + "lat": 76.7667, + "long": -17.3333, + "countries": [ + "GL" + ], + "comments": "National Park (east coast)" + }, + "America/Scoresbysund": { + "name": "America/Scoresbysund", + "lat": 70.4833, + "long": -20.0333, + "countries": [ + "GL" + ], + "comments": "Scoresbysund/Ittoqqortoormiit" + }, + "America/Thule": { + "name": "America/Thule", + "lat": 76.5667, + "long": -67.2167, + "countries": [ + "GL" + ], + "comments": "Thule/Pituffik" + }, + "Europe/Athens": { + "name": "Europe/Athens", + "lat": 37.9667, + "long": 23.7167, + "countries": [ + "GR" + ], + "comments": "" + }, + "Atlantic/South_Georgia": { + "name": "Atlantic/South_Georgia", + "lat": -53.7333, + "long": -35.4667, + "countries": [ + "GS" + ], + "comments": "" + }, + "America/Guatemala": { + "name": "America/Guatemala", + "lat": 14.6333, + "long": -89.4833, + "countries": [ + "GT" + ], + "comments": "" + }, + "Pacific/Guam": { + "name": "Pacific/Guam", + "lat": 13.4667, + "long": 144.75, + "countries": [ + "GU", + "MP" + ], + "comments": "" + }, + "Africa/Bissau": { + "name": "Africa/Bissau", + "lat": 11.85, + "long": -14.4167, + "countries": [ + "GW" + ], + "comments": "" + }, + "America/Guyana": { + "name": "America/Guyana", + "lat": 6.8, + "long": -57.8333, + "countries": [ + "GY" + ], + "comments": "" + }, + "Asia/Hong_Kong": { + "name": "Asia/Hong_Kong", + "lat": 22.2833, + "long": 114.15, + "countries": [ + "HK" + ], + "comments": "" + }, + "America/Tegucigalpa": { + "name": "America/Tegucigalpa", + "lat": 14.1, + "long": -86.7833, + "countries": [ + "HN" + ], + "comments": "" + }, + "America/Port-au-Prince": { + "name": "America/Port-au-Prince", + "lat": 18.5333, + "long": -71.6667, + "countries": [ + "HT" + ], + "comments": "" + }, + "Europe/Budapest": { + "name": "Europe/Budapest", + "lat": 47.5, + "long": 19.0833, + "countries": [ + "HU" + ], + "comments": "" + }, + "Asia/Jakarta": { + "name": "Asia/Jakarta", + "lat": -5.8333, + "long": 106.8, + "countries": [ + "ID" + ], + "comments": "Java, Sumatra" + }, + "Asia/Pontianak": { + "name": "Asia/Pontianak", + "lat": 0.0333, + "long": 109.3333, + "countries": [ + "ID" + ], + "comments": "Borneo (west, central)" + }, + "Asia/Makassar": { + "name": "Asia/Makassar", + "lat": -4.8833, + "long": 119.4, + "countries": [ + "ID" + ], + "comments": "Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west)" + }, + "Asia/Jayapura": { + "name": "Asia/Jayapura", + "lat": -1.4667, + "long": 140.7, + "countries": [ + "ID" + ], + "comments": "New Guinea (West Papua / Irian Jaya); Malukus/Moluccas" + }, + "Europe/Dublin": { + "name": "Europe/Dublin", + "lat": 53.3333, + "long": -5.75, + "countries": [ + "IE" + ], + "comments": "" + }, + "Asia/Jerusalem": { + "name": "Asia/Jerusalem", + "lat": 31.7806, + "long": 35.2239, + "countries": [ + "IL" + ], + "comments": "" + }, + "Asia/Kolkata": { + "name": "Asia/Kolkata", + "lat": 22.5333, + "long": 88.3667, + "countries": [ + "IN" + ], + "comments": "" + }, + "Indian/Chagos": { + "name": "Indian/Chagos", + "lat": -6.6667, + "long": 72.4167, + "countries": [ + "IO" + ], + "comments": "" + }, + "Asia/Baghdad": { + "name": "Asia/Baghdad", + "lat": 33.35, + "long": 44.4167, + "countries": [ + "IQ" + ], + "comments": "" + }, + "Asia/Tehran": { + "name": "Asia/Tehran", + "lat": 35.6667, + "long": 51.4333, + "countries": [ + "IR" + ], + "comments": "" + }, + "Atlantic/Reykjavik": { + "name": "Atlantic/Reykjavik", + "lat": 64.15, + "long": -20.15, + "countries": [ + "IS" + ], + "comments": "" + }, + "Europe/Rome": { + "name": "Europe/Rome", + "lat": 41.9, + "long": 12.4833, + "countries": [ + "IT", + "SM", + "VA" + ], + "comments": "" + }, + "America/Jamaica": { + "name": "America/Jamaica", + "lat": 17.9681, + "long": -75.2067, + "countries": [ + "JM" + ], + "comments": "" + }, + "Asia/Amman": { + "name": "Asia/Amman", + "lat": 31.95, + "long": 35.9333, + "countries": [ + "JO" + ], + "comments": "" + }, + "Asia/Tokyo": { + "name": "Asia/Tokyo", + "lat": 35.6544, + "long": 139.7447, + "countries": [ + "JP" + ], + "comments": "" + }, + "Africa/Nairobi": { + "name": "Africa/Nairobi", + "lat": -0.7167, + "long": 36.8167, + "countries": [ + "KE", + "DJ", + "ER", + "ET", + "KM", + "MG", + "SO", + "TZ", + "UG", + "YT" + ], + "comments": "" + }, + "Asia/Bishkek": { + "name": "Asia/Bishkek", + "lat": 42.9, + "long": 74.6, + "countries": [ + "KG" + ], + "comments": "" + }, + "Pacific/Tarawa": { + "name": "Pacific/Tarawa", + "lat": 1.4167, + "long": 173, + "countries": [ + "KI" + ], + "comments": "Gilbert Islands" + }, + "Pacific/Enderbury": { + "name": "Pacific/Enderbury", + "lat": -2.8667, + "long": -170.9167, + "countries": [ + "KI" + ], + "comments": "Phoenix Islands" + }, + "Pacific/Kiritimati": { + "name": "Pacific/Kiritimati", + "lat": 1.8667, + "long": -156.6667, + "countries": [ + "KI" + ], + "comments": "Line Islands" + }, + "Asia/Pyongyang": { + "name": "Asia/Pyongyang", + "lat": 39.0167, + "long": 125.75, + "countries": [ + "KP" + ], + "comments": "" + }, + "Asia/Seoul": { + "name": "Asia/Seoul", + "lat": 37.55, + "long": 126.9667, + "countries": [ + "KR" + ], + "comments": "" + }, + "Asia/Almaty": { + "name": "Asia/Almaty", + "lat": 43.25, + "long": 76.95, + "countries": [ + "KZ" + ], + "comments": "Kazakhstan (most areas)" + }, + "Asia/Qyzylorda": { + "name": "Asia/Qyzylorda", + "lat": 44.8, + "long": 65.4667, + "countries": [ + "KZ" + ], + "comments": "Qyzylorda/Kyzylorda/Kzyl-Orda" + }, + "Asia/Aqtobe": { + "name": "Asia/Aqtobe", + "lat": 50.2833, + "long": 57.1667, + "countries": [ + "KZ" + ], + "comments": "Aqtöbe/Aktobe" + }, + "Asia/Aqtau": { + "name": "Asia/Aqtau", + "lat": 44.5167, + "long": 50.2667, + "countries": [ + "KZ" + ], + "comments": "Mangghystaū/Mankistau" + }, + "Asia/Atyrau": { + "name": "Asia/Atyrau", + "lat": 47.1167, + "long": 51.9333, + "countries": [ + "KZ" + ], + "comments": "Atyraū/Atirau/Gur'yev" + }, + "Asia/Oral": { + "name": "Asia/Oral", + "lat": 51.2167, + "long": 51.35, + "countries": [ + "KZ" + ], + "comments": "West Kazakhstan" + }, + "Asia/Beirut": { + "name": "Asia/Beirut", + "lat": 33.8833, + "long": 35.5, + "countries": [ + "LB" + ], + "comments": "" + }, + "Asia/Colombo": { + "name": "Asia/Colombo", + "lat": 6.9333, + "long": 79.85, + "countries": [ + "LK" + ], + "comments": "" + }, + "Africa/Monrovia": { + "name": "Africa/Monrovia", + "lat": 6.3, + "long": -9.2167, + "countries": [ + "LR" + ], + "comments": "" + }, + "Europe/Vilnius": { + "name": "Europe/Vilnius", + "lat": 54.6833, + "long": 25.3167, + "countries": [ + "LT" + ], + "comments": "" + }, + "Europe/Luxembourg": { + "name": "Europe/Luxembourg", + "lat": 49.6, + "long": 6.15, + "countries": [ + "LU" + ], + "comments": "" + }, + "Europe/Riga": { + "name": "Europe/Riga", + "lat": 56.95, + "long": 24.1, + "countries": [ + "LV" + ], + "comments": "" + }, + "Africa/Tripoli": { + "name": "Africa/Tripoli", + "lat": 32.9, + "long": 13.1833, + "countries": [ + "LY" + ], + "comments": "" + }, + "Africa/Casablanca": { + "name": "Africa/Casablanca", + "lat": 33.65, + "long": -6.4167, + "countries": [ + "MA" + ], + "comments": "" + }, + "Europe/Monaco": { + "name": "Europe/Monaco", + "lat": 43.7, + "long": 7.3833, + "countries": [ + "MC" + ], + "comments": "" + }, + "Europe/Chisinau": { + "name": "Europe/Chisinau", + "lat": 47, + "long": 28.8333, + "countries": [ + "MD" + ], + "comments": "" + }, + "Pacific/Majuro": { + "name": "Pacific/Majuro", + "lat": 7.15, + "long": 171.2, + "countries": [ + "MH" + ], + "comments": "Marshall Islands (most areas)" + }, + "Pacific/Kwajalein": { + "name": "Pacific/Kwajalein", + "lat": 9.0833, + "long": 167.3333, + "countries": [ + "MH" + ], + "comments": "Kwajalein" + }, + "Asia/Yangon": { + "name": "Asia/Yangon", + "lat": 16.7833, + "long": 96.1667, + "countries": [ + "MM" + ], + "comments": "" + }, + "Asia/Ulaanbaatar": { + "name": "Asia/Ulaanbaatar", + "lat": 47.9167, + "long": 106.8833, + "countries": [ + "MN" + ], + "comments": "Mongolia (most areas)" + }, + "Asia/Hovd": { + "name": "Asia/Hovd", + "lat": 48.0167, + "long": 91.65, + "countries": [ + "MN" + ], + "comments": "Bayan-Ölgii, Govi-Altai, Hovd, Uvs, Zavkhan" + }, + "Asia/Choibalsan": { + "name": "Asia/Choibalsan", + "lat": 48.0667, + "long": 114.5, + "countries": [ + "MN" + ], + "comments": "Dornod, Sükhbaatar" + }, + "Asia/Macau": { + "name": "Asia/Macau", + "lat": 22.2333, + "long": 113.5833, + "countries": [ + "MO" + ], + "comments": "" + }, + "America/Martinique": { + "name": "America/Martinique", + "lat": 14.6, + "long": -60.9167, + "countries": [ + "MQ" + ], + "comments": "" + }, + "Europe/Malta": { + "name": "Europe/Malta", + "lat": 35.9, + "long": 14.5167, + "countries": [ + "MT" + ], + "comments": "" + }, + "Indian/Mauritius": { + "name": "Indian/Mauritius", + "lat": -19.8333, + "long": 57.5, + "countries": [ + "MU" + ], + "comments": "" + }, + "Indian/Maldives": { + "name": "Indian/Maldives", + "lat": 4.1667, + "long": 73.5, + "countries": [ + "MV" + ], + "comments": "" + }, + "America/Mexico_City": { + "name": "America/Mexico_City", + "lat": 19.4, + "long": -98.85, + "countries": [ + "MX" + ], + "comments": "Central Time" + }, + "America/Cancun": { + "name": "America/Cancun", + "lat": 21.0833, + "long": -85.2333, + "countries": [ + "MX" + ], + "comments": "Eastern Standard Time - Quintana Roo" + }, + "America/Merida": { + "name": "America/Merida", + "lat": 20.9667, + "long": -88.3833, + "countries": [ + "MX" + ], + "comments": "Central Time - Campeche, Yucatán" + }, + "America/Monterrey": { + "name": "America/Monterrey", + "lat": 25.6667, + "long": -99.6833, + "countries": [ + "MX" + ], + "comments": "Central Time - Durango; Coahuila, Nuevo León, Tamaulipas (most areas)" + }, + "America/Matamoros": { + "name": "America/Matamoros", + "lat": 25.8333, + "long": -96.5, + "countries": [ + "MX" + ], + "comments": "Central Time US - Coahuila, Nuevo León, Tamaulipas (US border)" + }, + "America/Mazatlan": { + "name": "America/Mazatlan", + "lat": 23.2167, + "long": -105.5833, + "countries": [ + "MX" + ], + "comments": "Mountain Time - Baja California Sur, Nayarit, Sinaloa" + }, + "America/Chihuahua": { + "name": "America/Chihuahua", + "lat": 28.6333, + "long": -105.9167, + "countries": [ + "MX" + ], + "comments": "Mountain Time - Chihuahua (most areas)" + }, + "America/Ojinaga": { + "name": "America/Ojinaga", + "lat": 29.5667, + "long": -103.5833, + "countries": [ + "MX" + ], + "comments": "Mountain Time US - Chihuahua (US border)" + }, + "America/Hermosillo": { + "name": "America/Hermosillo", + "lat": 29.0667, + "long": -109.0333, + "countries": [ + "MX" + ], + "comments": "Mountain Standard Time - Sonora" + }, + "America/Tijuana": { + "name": "America/Tijuana", + "lat": 32.5333, + "long": -116.9833, + "countries": [ + "MX" + ], + "comments": "Pacific Time US - Baja California" + }, + "America/Bahia_Banderas": { + "name": "America/Bahia_Banderas", + "lat": 20.8, + "long": -104.75, + "countries": [ + "MX" + ], + "comments": "Central Time - Bahía de Banderas" + }, + "Asia/Kuala_Lumpur": { + "name": "Asia/Kuala_Lumpur", + "lat": 3.1667, + "long": 101.7, + "countries": [ + "MY" + ], + "comments": "Malaysia (peninsula)" + }, + "Asia/Kuching": { + "name": "Asia/Kuching", + "lat": 1.55, + "long": 110.3333, + "countries": [ + "MY" + ], + "comments": "Sabah, Sarawak" + }, + "Africa/Maputo": { + "name": "Africa/Maputo", + "lat": -24.0333, + "long": 32.5833, + "countries": [ + "MZ", + "BI", + "BW", + "CD", + "MW", + "RW", + "ZM", + "ZW" + ], + "comments": "Central Africa Time" + }, + "Africa/Windhoek": { + "name": "Africa/Windhoek", + "lat": -21.4333, + "long": 17.1, + "countries": [ + "NA" + ], + "comments": "" + }, + "Pacific/Noumea": { + "name": "Pacific/Noumea", + "lat": -21.7333, + "long": 166.45, + "countries": [ + "NC" + ], + "comments": "" + }, + "Pacific/Norfolk": { + "name": "Pacific/Norfolk", + "lat": -28.95, + "long": 167.9667, + "countries": [ + "NF" + ], + "comments": "" + }, + "Africa/Lagos": { + "name": "Africa/Lagos", + "lat": 6.45, + "long": 3.4, + "countries": [ + "NG", + "AO", + "BJ", + "CD", + "CF", + "CG", + "CM", + "GA", + "GQ", + "NE" + ], + "comments": "West Africa Time" + }, + "America/Managua": { + "name": "America/Managua", + "lat": 12.15, + "long": -85.7167, + "countries": [ + "NI" + ], + "comments": "" + }, + "Europe/Amsterdam": { + "name": "Europe/Amsterdam", + "lat": 52.3667, + "long": 4.9, + "countries": [ + "NL" + ], + "comments": "" + }, + "Europe/Oslo": { + "name": "Europe/Oslo", + "lat": 59.9167, + "long": 10.75, + "countries": [ + "NO", + "SJ" + ], + "comments": "" + }, + "Asia/Kathmandu": { + "name": "Asia/Kathmandu", + "lat": 27.7167, + "long": 85.3167, + "countries": [ + "NP" + ], + "comments": "" + }, + "Pacific/Nauru": { + "name": "Pacific/Nauru", + "lat": 0.5167, + "long": 166.9167, + "countries": [ + "NR" + ], + "comments": "" + }, + "Pacific/Niue": { + "name": "Pacific/Niue", + "lat": -18.9833, + "long": -168.0833, + "countries": [ + "NU" + ], + "comments": "" + }, + "Pacific/Auckland": { + "name": "Pacific/Auckland", + "lat": -35.1333, + "long": 174.7667, + "countries": [ + "NZ", + "AQ" + ], + "comments": "New Zealand time" + }, + "Pacific/Chatham": { + "name": "Pacific/Chatham", + "lat": -42.05, + "long": -175.45, + "countries": [ + "NZ" + ], + "comments": "Chatham Islands" + }, + "America/Panama": { + "name": "America/Panama", + "lat": 8.9667, + "long": -78.4667, + "countries": [ + "PA", + "KY" + ], + "comments": "" + }, + "America/Lima": { + "name": "America/Lima", + "lat": -11.95, + "long": -76.95, + "countries": [ + "PE" + ], + "comments": "" + }, + "Pacific/Tahiti": { + "name": "Pacific/Tahiti", + "lat": -16.4667, + "long": -148.4333, + "countries": [ + "PF" + ], + "comments": "Society Islands" + }, + "Pacific/Marquesas": { + "name": "Pacific/Marquesas", + "lat": -9, + "long": -138.5, + "countries": [ + "PF" + ], + "comments": "Marquesas Islands" + }, + "Pacific/Gambier": { + "name": "Pacific/Gambier", + "lat": -22.8667, + "long": -133.05, + "countries": [ + "PF" + ], + "comments": "Gambier Islands" + }, + "Pacific/Port_Moresby": { + "name": "Pacific/Port_Moresby", + "lat": -8.5, + "long": 147.1667, + "countries": [ + "PG" + ], + "comments": "Papua New Guinea (most areas)" + }, + "Pacific/Bougainville": { + "name": "Pacific/Bougainville", + "lat": -5.7833, + "long": 155.5667, + "countries": [ + "PG" + ], + "comments": "Bougainville" + }, + "Asia/Manila": { + "name": "Asia/Manila", + "lat": 14.5833, + "long": 121, + "countries": [ + "PH" + ], + "comments": "" + }, + "Asia/Karachi": { + "name": "Asia/Karachi", + "lat": 24.8667, + "long": 67.05, + "countries": [ + "PK" + ], + "comments": "" + }, + "Europe/Warsaw": { + "name": "Europe/Warsaw", + "lat": 52.25, + "long": 21, + "countries": [ + "PL" + ], + "comments": "" + }, + "America/Miquelon": { + "name": "America/Miquelon", + "lat": 47.05, + "long": -55.6667, + "countries": [ + "PM" + ], + "comments": "" + }, + "Pacific/Pitcairn": { + "name": "Pacific/Pitcairn", + "lat": -24.9333, + "long": -129.9167, + "countries": [ + "PN" + ], + "comments": "" + }, + "America/Puerto_Rico": { + "name": "America/Puerto_Rico", + "lat": 18.4683, + "long": -65.8939, + "countries": [ + "PR" + ], + "comments": "" + }, + "Asia/Gaza": { + "name": "Asia/Gaza", + "lat": 31.5, + "long": 34.4667, + "countries": [ + "PS" + ], + "comments": "Gaza Strip" + }, + "Asia/Hebron": { + "name": "Asia/Hebron", + "lat": 31.5333, + "long": 35.095, + "countries": [ + "PS" + ], + "comments": "West Bank" + }, + "Europe/Lisbon": { + "name": "Europe/Lisbon", + "lat": 38.7167, + "long": -8.8667, + "countries": [ + "PT" + ], + "comments": "Portugal (mainland)" + }, + "Atlantic/Madeira": { + "name": "Atlantic/Madeira", + "lat": 32.6333, + "long": -15.1, + "countries": [ + "PT" + ], + "comments": "Madeira Islands" + }, + "Atlantic/Azores": { + "name": "Atlantic/Azores", + "lat": 37.7333, + "long": -24.3333, + "countries": [ + "PT" + ], + "comments": "Azores" + }, + "Pacific/Palau": { + "name": "Pacific/Palau", + "lat": 7.3333, + "long": 134.4833, + "countries": [ + "PW" + ], + "comments": "" + }, + "America/Asuncion": { + "name": "America/Asuncion", + "lat": -24.7333, + "long": -56.3333, + "countries": [ + "PY" + ], + "comments": "" + }, + "Asia/Qatar": { + "name": "Asia/Qatar", + "lat": 25.2833, + "long": 51.5333, + "countries": [ + "QA", + "BH" + ], + "comments": "" + }, + "Indian/Reunion": { + "name": "Indian/Reunion", + "lat": -19.1333, + "long": 55.4667, + "countries": [ + "RE", + "TF" + ], + "comments": "Réunion, Crozet, Scattered Islands" + }, + "Europe/Bucharest": { + "name": "Europe/Bucharest", + "lat": 44.4333, + "long": 26.1, + "countries": [ + "RO" + ], + "comments": "" + }, + "Europe/Belgrade": { + "name": "Europe/Belgrade", + "lat": 44.8333, + "long": 20.5, + "countries": [ + "RS", + "BA", + "HR", + "ME", + "MK", + "SI" + ], + "comments": "" + }, + "Europe/Kaliningrad": { + "name": "Europe/Kaliningrad", + "lat": 54.7167, + "long": 20.5, + "countries": [ + "RU" + ], + "comments": "MSK-01 - Kaliningrad" + }, + "Europe/Moscow": { + "name": "Europe/Moscow", + "lat": 55.7558, + "long": 37.6178, + "countries": [ + "RU" + ], + "comments": "MSK+00 - Moscow area" + }, + "Europe/Simferopol": { + "name": "Europe/Simferopol", + "lat": 44.95, + "long": 34.1, + "countries": [ + "RU" + ], + "comments": "MSK+00 - Crimea" + }, + "Europe/Volgograd": { + "name": "Europe/Volgograd", + "lat": 48.7333, + "long": 44.4167, + "countries": [ + "RU" + ], + "comments": "MSK+00 - Volgograd" + }, + "Europe/Kirov": { + "name": "Europe/Kirov", + "lat": 58.6, + "long": 49.65, + "countries": [ + "RU" + ], + "comments": "MSK+00 - Kirov" + }, + "Europe/Astrakhan": { + "name": "Europe/Astrakhan", + "lat": 46.35, + "long": 48.05, + "countries": [ + "RU" + ], + "comments": "MSK+01 - Astrakhan" + }, + "Europe/Saratov": { + "name": "Europe/Saratov", + "lat": 51.5667, + "long": 46.0333, + "countries": [ + "RU" + ], + "comments": "MSK+01 - Saratov" + }, + "Europe/Ulyanovsk": { + "name": "Europe/Ulyanovsk", + "lat": 54.3333, + "long": 48.4, + "countries": [ + "RU" + ], + "comments": "MSK+01 - Ulyanovsk" + }, + "Europe/Samara": { + "name": "Europe/Samara", + "lat": 53.2, + "long": 50.15, + "countries": [ + "RU" + ], + "comments": "MSK+01 - Samara, Udmurtia" + }, + "Asia/Yekaterinburg": { + "name": "Asia/Yekaterinburg", + "lat": 56.85, + "long": 60.6, + "countries": [ + "RU" + ], + "comments": "MSK+02 - Urals" + }, + "Asia/Omsk": { + "name": "Asia/Omsk", + "lat": 55, + "long": 73.4, + "countries": [ + "RU" + ], + "comments": "MSK+03 - Omsk" + }, + "Asia/Novosibirsk": { + "name": "Asia/Novosibirsk", + "lat": 55.0333, + "long": 82.9167, + "countries": [ + "RU" + ], + "comments": "MSK+04 - Novosibirsk" + }, + "Asia/Barnaul": { + "name": "Asia/Barnaul", + "lat": 53.3667, + "long": 83.75, + "countries": [ + "RU" + ], + "comments": "MSK+04 - Altai" + }, + "Asia/Tomsk": { + "name": "Asia/Tomsk", + "lat": 56.5, + "long": 84.9667, + "countries": [ + "RU" + ], + "comments": "MSK+04 - Tomsk" + }, + "Asia/Novokuznetsk": { + "name": "Asia/Novokuznetsk", + "lat": 53.75, + "long": 87.1167, + "countries": [ + "RU" + ], + "comments": "MSK+04 - Kemerovo" + }, + "Asia/Krasnoyarsk": { + "name": "Asia/Krasnoyarsk", + "lat": 56.0167, + "long": 92.8333, + "countries": [ + "RU" + ], + "comments": "MSK+04 - Krasnoyarsk area" + }, + "Asia/Irkutsk": { + "name": "Asia/Irkutsk", + "lat": 52.2667, + "long": 104.3333, + "countries": [ + "RU" + ], + "comments": "MSK+05 - Irkutsk, Buryatia" + }, + "Asia/Chita": { + "name": "Asia/Chita", + "lat": 52.05, + "long": 113.4667, + "countries": [ + "RU" + ], + "comments": "MSK+06 - Zabaykalsky" + }, + "Asia/Yakutsk": { + "name": "Asia/Yakutsk", + "lat": 62, + "long": 129.6667, + "countries": [ + "RU" + ], + "comments": "MSK+06 - Lena River" + }, + "Asia/Khandyga": { + "name": "Asia/Khandyga", + "lat": 62.6564, + "long": 135.5539, + "countries": [ + "RU" + ], + "comments": "MSK+06 - Tomponsky, Ust-Maysky" + }, + "Asia/Vladivostok": { + "name": "Asia/Vladivostok", + "lat": 43.1667, + "long": 131.9333, + "countries": [ + "RU" + ], + "comments": "MSK+07 - Amur River" + }, + "Asia/Ust-Nera": { + "name": "Asia/Ust-Nera", + "lat": 64.5603, + "long": 143.2267, + "countries": [ + "RU" + ], + "comments": "MSK+07 - Oymyakonsky" + }, + "Asia/Magadan": { + "name": "Asia/Magadan", + "lat": 59.5667, + "long": 150.8, + "countries": [ + "RU" + ], + "comments": "MSK+08 - Magadan" + }, + "Asia/Sakhalin": { + "name": "Asia/Sakhalin", + "lat": 46.9667, + "long": 142.7, + "countries": [ + "RU" + ], + "comments": "MSK+08 - Sakhalin Island" + }, + "Asia/Srednekolymsk": { + "name": "Asia/Srednekolymsk", + "lat": 67.4667, + "long": 153.7167, + "countries": [ + "RU" + ], + "comments": "MSK+08 - Sakha (E); North Kuril Is" + }, + "Asia/Kamchatka": { + "name": "Asia/Kamchatka", + "lat": 53.0167, + "long": 158.65, + "countries": [ + "RU" + ], + "comments": "MSK+09 - Kamchatka" + }, + "Asia/Anadyr": { + "name": "Asia/Anadyr", + "lat": 64.75, + "long": 177.4833, + "countries": [ + "RU" + ], + "comments": "MSK+09 - Bering Sea" + }, + "Asia/Riyadh": { + "name": "Asia/Riyadh", + "lat": 24.6333, + "long": 46.7167, + "countries": [ + "SA", + "KW", + "YE" + ], + "comments": "" + }, + "Pacific/Guadalcanal": { + "name": "Pacific/Guadalcanal", + "lat": -8.4667, + "long": 160.2, + "countries": [ + "SB" + ], + "comments": "" + }, + "Indian/Mahe": { + "name": "Indian/Mahe", + "lat": -3.3333, + "long": 55.4667, + "countries": [ + "SC" + ], + "comments": "" + }, + "Africa/Khartoum": { + "name": "Africa/Khartoum", + "lat": 15.6, + "long": 32.5333, + "countries": [ + "SD", + "SS" + ], + "comments": "" + }, + "Europe/Stockholm": { + "name": "Europe/Stockholm", + "lat": 59.3333, + "long": 18.05, + "countries": [ + "SE" + ], + "comments": "" + }, + "Asia/Singapore": { + "name": "Asia/Singapore", + "lat": 1.2833, + "long": 103.85, + "countries": [ + "SG" + ], + "comments": "" + }, + "America/Paramaribo": { + "name": "America/Paramaribo", + "lat": 5.8333, + "long": -54.8333, + "countries": [ + "SR" + ], + "comments": "" + }, + "America/El_Salvador": { + "name": "America/El_Salvador", + "lat": 13.7, + "long": -88.8, + "countries": [ + "SV" + ], + "comments": "" + }, + "Asia/Damascus": { + "name": "Asia/Damascus", + "lat": 33.5, + "long": 36.3, + "countries": [ + "SY" + ], + "comments": "" + }, + "America/Grand_Turk": { + "name": "America/Grand_Turk", + "lat": 21.4667, + "long": -70.8667, + "countries": [ + "TC" + ], + "comments": "" + }, + "Africa/Ndjamena": { + "name": "Africa/Ndjamena", + "lat": 12.1167, + "long": 15.05, + "countries": [ + "TD" + ], + "comments": "" + }, + "Indian/Kerguelen": { + "name": "Indian/Kerguelen", + "lat": -48.6472, + "long": 70.2175, + "countries": [ + "TF" + ], + "comments": "Kerguelen, St Paul Island, Amsterdam Island" + }, + "Asia/Bangkok": { + "name": "Asia/Bangkok", + "lat": 13.75, + "long": 100.5167, + "countries": [ + "TH", + "KH", + "LA", + "VN" + ], + "comments": "Indochina (most areas)" + }, + "Asia/Dushanbe": { + "name": "Asia/Dushanbe", + "lat": 38.5833, + "long": 68.8, + "countries": [ + "TJ" + ], + "comments": "" + }, + "Pacific/Fakaofo": { + "name": "Pacific/Fakaofo", + "lat": -8.6333, + "long": -170.7667, + "countries": [ + "TK" + ], + "comments": "" + }, + "Asia/Dili": { + "name": "Asia/Dili", + "lat": -7.45, + "long": 125.5833, + "countries": [ + "TL" + ], + "comments": "" + }, + "Asia/Ashgabat": { + "name": "Asia/Ashgabat", + "lat": 37.95, + "long": 58.3833, + "countries": [ + "TM" + ], + "comments": "" + }, + "Africa/Tunis": { + "name": "Africa/Tunis", + "lat": 36.8, + "long": 10.1833, + "countries": [ + "TN" + ], + "comments": "" + }, + "Pacific/Tongatapu": { + "name": "Pacific/Tongatapu", + "lat": -20.8333, + "long": -174.8333, + "countries": [ + "TO" + ], + "comments": "" + }, + "Europe/Istanbul": { + "name": "Europe/Istanbul", + "lat": 41.0167, + "long": 28.9667, + "countries": [ + "TR" + ], + "comments": "" + }, + "America/Port_of_Spain": { + "name": "America/Port_of_Spain", + "lat": 10.65, + "long": -60.4833, + "countries": [ + "TT", + "AG", + "AI", + "BL", + "DM", + "GD", + "GP", + "KN", + "LC", + "MF", + "MS", + "VC", + "VG", + "VI" + ], + "comments": "" + }, + "Pacific/Funafuti": { + "name": "Pacific/Funafuti", + "lat": -7.4833, + "long": 179.2167, + "countries": [ + "TV" + ], + "comments": "" + }, + "Asia/Taipei": { + "name": "Asia/Taipei", + "lat": 25.05, + "long": 121.5, + "countries": [ + "TW" + ], + "comments": "" + }, + "Europe/Kiev": { + "name": "Europe/Kiev", + "lat": 50.4333, + "long": 30.5167, + "countries": [ + "UA" + ], + "comments": "Ukraine (most areas)" + }, + "Europe/Uzhgorod": { + "name": "Europe/Uzhgorod", + "lat": 48.6167, + "long": 22.3, + "countries": [ + "UA" + ], + "comments": "Ruthenia" + }, + "Europe/Zaporozhye": { + "name": "Europe/Zaporozhye", + "lat": 47.8333, + "long": 35.1667, + "countries": [ + "UA" + ], + "comments": "Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)" + }, + "Pacific/Wake": { + "name": "Pacific/Wake", + "lat": 19.2833, + "long": 166.6167, + "countries": [ + "UM" + ], + "comments": "Wake Island" + }, + "America/New_York": { + "name": "America/New_York", + "lat": 40.7142, + "long": -73.9936, + "countries": [ + "US" + ], + "comments": "Eastern (most areas)" + }, + "America/Detroit": { + "name": "America/Detroit", + "lat": 42.3314, + "long": -82.9542, + "countries": [ + "US" + ], + "comments": "Eastern - MI (most areas)" + }, + "America/Kentucky/Louisville": { + "name": "America/Kentucky/Louisville", + "lat": 38.2542, + "long": -84.2406, + "countries": [ + "US" + ], + "comments": "Eastern - KY (Louisville area)" + }, + "America/Kentucky/Monticello": { + "name": "America/Kentucky/Monticello", + "lat": 36.8297, + "long": -83.1508, + "countries": [ + "US" + ], + "comments": "Eastern - KY (Wayne)" + }, + "America/Indiana/Indianapolis": { + "name": "America/Indiana/Indianapolis", + "lat": 39.7683, + "long": -85.8419, + "countries": [ + "US" + ], + "comments": "Eastern - IN (most areas)" + }, + "America/Indiana/Vincennes": { + "name": "America/Indiana/Vincennes", + "lat": 38.6772, + "long": -86.4714, + "countries": [ + "US" + ], + "comments": "Eastern - IN (Da, Du, K, Mn)" + }, + "America/Indiana/Winamac": { + "name": "America/Indiana/Winamac", + "lat": 41.0514, + "long": -85.3969, + "countries": [ + "US" + ], + "comments": "Eastern - IN (Pulaski)" + }, + "America/Indiana/Marengo": { + "name": "America/Indiana/Marengo", + "lat": 38.3756, + "long": -85.6553, + "countries": [ + "US" + ], + "comments": "Eastern - IN (Crawford)" + }, + "America/Indiana/Petersburg": { + "name": "America/Indiana/Petersburg", + "lat": 38.4919, + "long": -86.7214, + "countries": [ + "US" + ], + "comments": "Eastern - IN (Pike)" + }, + "America/Indiana/Vevay": { + "name": "America/Indiana/Vevay", + "lat": 38.7478, + "long": -84.9328, + "countries": [ + "US" + ], + "comments": "Eastern - IN (Switzerland)" + }, + "America/Chicago": { + "name": "America/Chicago", + "lat": 41.85, + "long": -86.35, + "countries": [ + "US" + ], + "comments": "Central (most areas)" + }, + "America/Indiana/Tell_City": { + "name": "America/Indiana/Tell_City", + "lat": 37.9531, + "long": -85.2386, + "countries": [ + "US" + ], + "comments": "Central - IN (Perry)" + }, + "America/Indiana/Knox": { + "name": "America/Indiana/Knox", + "lat": 41.2958, + "long": -85.375, + "countries": [ + "US" + ], + "comments": "Central - IN (Starke)" + }, + "America/Menominee": { + "name": "America/Menominee", + "lat": 45.1078, + "long": -86.3858, + "countries": [ + "US" + ], + "comments": "Central - MI (Wisconsin border)" + }, + "America/North_Dakota/Center": { + "name": "America/North_Dakota/Center", + "lat": 47.1164, + "long": -100.7008, + "countries": [ + "US" + ], + "comments": "Central - ND (Oliver)" + }, + "America/North_Dakota/New_Salem": { + "name": "America/North_Dakota/New_Salem", + "lat": 46.845, + "long": -100.5892, + "countries": [ + "US" + ], + "comments": "Central - ND (Morton rural)" + }, + "America/North_Dakota/Beulah": { + "name": "America/North_Dakota/Beulah", + "lat": 47.2642, + "long": -100.2222, + "countries": [ + "US" + ], + "comments": "Central - ND (Mercer)" + }, + "America/Denver": { + "name": "America/Denver", + "lat": 39.7392, + "long": -103.0158, + "countries": [ + "US" + ], + "comments": "Mountain (most areas)" + }, + "America/Boise": { + "name": "America/Boise", + "lat": 43.6136, + "long": -115.7975, + "countries": [ + "US" + ], + "comments": "Mountain - ID (south); OR (east)" + }, + "America/Phoenix": { + "name": "America/Phoenix", + "lat": 33.4483, + "long": -111.9267, + "countries": [ + "US" + ], + "comments": "MST - Arizona (except Navajo)" + }, + "America/Los_Angeles": { + "name": "America/Los_Angeles", + "lat": 34.0522, + "long": -117.7572, + "countries": [ + "US" + ], + "comments": "Pacific" + }, + "America/Anchorage": { + "name": "America/Anchorage", + "lat": 61.2181, + "long": -148.0997, + "countries": [ + "US" + ], + "comments": "Alaska (most areas)" + }, + "America/Juneau": { + "name": "America/Juneau", + "lat": 58.3019, + "long": -133.5803, + "countries": [ + "US" + ], + "comments": "Alaska - Juneau area" + }, + "America/Sitka": { + "name": "America/Sitka", + "lat": 57.1764, + "long": -134.6981, + "countries": [ + "US" + ], + "comments": "Alaska - Sitka area" + }, + "America/Metlakatla": { + "name": "America/Metlakatla", + "lat": 55.1269, + "long": -130.4236, + "countries": [ + "US" + ], + "comments": "Alaska - Annette Island" + }, + "America/Yakutat": { + "name": "America/Yakutat", + "lat": 59.5469, + "long": -138.2728, + "countries": [ + "US" + ], + "comments": "Alaska - Yakutat" + }, + "America/Nome": { + "name": "America/Nome", + "lat": 64.5011, + "long": -164.5936, + "countries": [ + "US" + ], + "comments": "Alaska (west)" + }, + "America/Adak": { + "name": "America/Adak", + "lat": 51.88, + "long": -175.3419, + "countries": [ + "US" + ], + "comments": "Aleutian Islands" + }, + "Pacific/Honolulu": { + "name": "Pacific/Honolulu", + "lat": 21.3069, + "long": -156.1417, + "countries": [ + "US", + "UM" + ], + "comments": "Hawaii" + }, + "America/Montevideo": { + "name": "America/Montevideo", + "lat": -33.1167, + "long": -55.8167, + "countries": [ + "UY" + ], + "comments": "" + }, + "Asia/Samarkand": { + "name": "Asia/Samarkand", + "lat": 39.6667, + "long": 66.8, + "countries": [ + "UZ" + ], + "comments": "Uzbekistan (west)" + }, + "Asia/Tashkent": { + "name": "Asia/Tashkent", + "lat": 41.3333, + "long": 69.3, + "countries": [ + "UZ" + ], + "comments": "Uzbekistan (east)" + }, + "America/Caracas": { + "name": "America/Caracas", + "lat": 10.5, + "long": -65.0667, + "countries": [ + "VE" + ], + "comments": "" + }, + "Asia/Ho_Chi_Minh": { + "name": "Asia/Ho_Chi_Minh", + "lat": 10.75, + "long": 106.6667, + "countries": [ + "VN" + ], + "comments": "Vietnam (south)" + }, + "Pacific/Efate": { + "name": "Pacific/Efate", + "lat": -16.3333, + "long": 168.4167, + "countries": [ + "VU" + ], + "comments": "" + }, + "Pacific/Wallis": { + "name": "Pacific/Wallis", + "lat": -12.7, + "long": -175.8333, + "countries": [ + "WF" + ], + "comments": "" + }, + "Pacific/Apia": { + "name": "Pacific/Apia", + "lat": -12.1667, + "long": -170.2667, + "countries": [ + "WS" + ], + "comments": "" + }, + "Africa/Johannesburg": { + "name": "Africa/Johannesburg", + "lat": -25.75, + "long": 28, + "countries": [ + "ZA", + "LS", + "SZ" + ], + "comments": "" + } + } +} \ No newline at end of file diff --git a/node_modules/moment-timezone/data/packed/latest.json b/node_modules/moment-timezone/data/packed/latest.json new file mode 100644 index 0000000..280bfc0 --- /dev/null +++ b/node_modules/moment-timezone/data/packed/latest.json @@ -0,0 +1,599 @@ +{ + "version": "2016j", + "zones": [ + "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5", + "Africa/Accra|LMT GMT GHST|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5", + "Africa/Nairobi|LMT EAT BEAT BEAUT|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5", + "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5", + "Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6", + "Africa/Bissau|LMT WAT GMT|12.k 10 0|012|-2ldWV.E 2xonV.E|39e4", + "Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5", + "Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6", + "Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5", + "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1y7p0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3", + "Africa/El_Aaiun|LMT WAT WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4", + "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5", + "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|01212121212121212121212121212121213|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|51e5", + "Africa/Monrovia|MMT LRT GMT|H.8 I.u 0|012|-23Lzg.Q 29s01.m|11e5", + "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5", + "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5", + "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5", + "Africa/Windhoek|SWAT SAST SAST CAT WAT WAST|-1u -20 -30 -20 -10 -20|012134545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2GJdu 1Ajdu 1cL0 1SqL0 9NA0 11D0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0|32e4", + "America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", + "America/Anchorage|CAT CAWT CAPT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", + "America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3", + "America/Araguaina|LMT BRT BRST|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4", + "America/Argentina/Buenos_Aires|CMT ART ARST ART ARST|4g.M 40 30 30 20|0121212121212121212121212121212121212121213434343434343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0", + "America/Argentina/Catamarca|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Cordoba|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0", + "America/Argentina/Jujuy|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 g0p0 10M0 j3c0 uL0", + "America/Argentina/La_Rioja|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Mendoza|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|0121212121212121212121212121212121212121213434345656543235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 g0p0 10M0 agM0 Op0 7TX0 uL0", + "America/Argentina/Rio_Gallegos|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Salta|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0", + "America/Argentina/San_Juan|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ak00 m10 8lb0 uL0", + "America/Argentina/San_Luis|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456536353465653|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 kin0 10M0 ak00 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0", + "America/Argentina/Tucuman|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|012121212121212121212121212121212121212121343434345434323534343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 4N0 8BX0 uL0 1qN0 WL0", + "America/Argentina/Ushuaia|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ajA0 8p0 8zb0 uL0", + "America/Curacao|LMT ANT AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4", + "America/Asuncion|AMT PYT PYT PYST|3O.E 40 30 30|012131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5", + "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2", + "America/Bahia|LMT BRT BRST|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5", + "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3", + "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4", + "America/Belem|LMT BRT BRST|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5", + "America/Belize|LMT CST CHDT CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3", + "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2", + "America/Boa_Vista|LMT AMT AMST|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2", + "America/Bogota|BMT COT COST|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5", + "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4", + "America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2", + "America/Campo_Grande|LMT AMT AMST|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|77e4", + "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", + "America/Caracas|CMT VET VET|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5", + "America/Cayenne|LMT GFT GFT|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3", + "America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5", + "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", + "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4", + "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5", + "America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2", + "America/Cuiaba|LMT AMT AMST|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|54e4", + "America/Danmarkshavn|LMT WGT WGST GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8", + "America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2", + "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3", + "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", + "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 Jy10 SL0 dnB0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5", + "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5", + "America/Eirunepe|LMT ACT ACST AMT|4D.s 50 40 40|0121212121212121212121212121212131|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3", + "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5", + "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5", + "America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", + "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Fortaleza|LMT BRT BRST|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5", + "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", + "America/Godthab|LMT WGT WGST|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3", + "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2", + "America/Grand_Turk|KMT EST EDT AST|57.b 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212123|-2l1uQ.N 2HHBQ.N 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", + "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5", + "America/Guayaquil|QMT ECT|5e 50|01|-1yVSK|27e5", + "America/Guyana|LMT GBGT GYT GYT GYT|3Q.E 3J 3J 30 40|01234|-2dvU7.k 24JzQ.k mlc0 Bxbf|80e4", + "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", + "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", + "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4", + "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2", + "America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2", + "America/Jamaica|KMT EST EDT|57.b 50 40|0121212121212121212121|-2l1uQ.N 2uM1Q.N 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4", + "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3", + "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/La_Paz|CMT BOST BOT|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5", + "America/Lima|LMT PET PEST|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6", + "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", + "America/Maceio|LMT BRT BRST|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4", + "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5", + "America/Manaus|LMT AMT AMST|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5", + "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4", + "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4", + "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4", + "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2", + "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5", + "America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", + "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6", + "America/Miquelon|LMT AST PMST PMDT|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", + "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3", + "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5", + "America/Montevideo|MMT UYT UYHST UYST UYT UYHST|3I.I 3u 30 20 30 2u|012121212121212121212121213434343434345454543453434343434343434343434343434343434343434|-20UIf.g 8jzJ.g 1cLu 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1qMu WLu 1qMu 11zu 1o0u 11zu NAu 11bu 2iMu zWu Dq10 19X0 pd0 jz0 cm10 19X0 1fB0 1on0 11d0 1oL0 1nB0 1fzu 1aou 1fzu 1aou 1fzu 3nAu Jb0 3MN0 1SLu 4jzu 2PB0 Lb0 3Dd0 1pb0 ixd0 An0 1MN0 An0 1wp0 On0 1wp0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5", + "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5", + "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4", + "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", + "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2", + "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2", + "America/Noronha|LMT FNT FNST|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2", + "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", + "America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", + "America/Paramaribo|LMT PMT PMT NEGT SRT SRT|3E.E 3E.Q 3E.A 3u 3u 30|012345|-2nDUj.k Wqo0.c qanX.I 1dmLN.o lzc0|24e4", + "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5", + "America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", + "America/Rio_Branco|LMT ACT ACST AMT|4v.c 50 40 40|01212121212121212121212121212131|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4", + "America/Porto_Velho|LMT AMT AMST|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4", + "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5", + "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842", + "America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2", + "America/Recife|LMT BRT BRST|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5", + "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4", + "America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229", + "America/Santarem|LMT AMT AMST BRT|3C.M 40 30 30|0121212121212121212121212121213|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4", + "America/Santiago|SMT CLT CLT CLST CLST|4G.K 50 40 40 30|010203131313131212421242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5", + "America/Santo_Domingo|SDMT EST EDT EHDT AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5", + "America/Sao_Paulo|LMT BRT BRST|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|20e6", + "America/Scoresbysund|LMT CGT CGST EGST EGT|1r.Q 20 10 0 10|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452", + "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2", + "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", + "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3", + "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5", + "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656", + "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", + "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", + "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", + "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4", + "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642", + "America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", + "Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212|-2q00 1DjS0 T90 40P0 KL0 blz0|10", + "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70", + "Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80", + "Antarctica/Macquarie|AEST AEDT -00 MIST|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1", + "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60", + "Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5", + "Antarctica/Palmer|-00 ARST ART ART ARST CLT CLST|0 30 40 30 20 40 30|0121212121234356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|40", + "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130", + "Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20", + "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40", + "Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25", + "Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4", + "Asia/Riyadh|LMT AST|-36.Q -30|01|-TvD6.Q|57e5", + "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5", + "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5", + "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3", + "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4", + "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4", + "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4", + "Asia/Atyrau|LMT +04 +05 +06|-3r.I -40 -50 -60|01232323232323232323212323232323232321212121212|-1Pc3r.I eUnr.I 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0", + "Asia/Baghdad|BMT AST ADT|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5", + "Asia/Qatar|LMT GST AST|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4", + "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", + "Asia/Bangkok|BMT ICT|-6G.4 -70|01|-218SG.4|15e6", + "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", + "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5", + "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4", + "Asia/Brunei|LMT BNT BNT|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4", + "Asia/Kolkata|HMT BURT IST IST|-5R.k -6u -5u -6u|01232|-18LFR.k 1unn.k HB0 7zX0|15e6", + "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4", + "Asia/Choibalsan|LMT ULAT ULAT CHOST CHOT CHOT CHOST|-7C -70 -80 -a0 -90 -80 -90|0123434343434343434343434343434343434343434343456565656565656565656565656565656565656565656565|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3", + "Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6", + "Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5", + "Asia/Dhaka|HMT BURT IST DACT BDT BDST|-5R.k -6u -5u -60 -60 -70|01213454|-18LFR.k 1unn.k HB0 m6n0 LqMu 1x6n0 1i00|16e6", + "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5", + "Asia/Dili|LMT TLT JST TLT WITA|-8m.k -80 -90 -90 -80|012343|-2le8m.k 1dnXm.k 8HA0 1ew00 Xld0|19e4", + "Asia/Dubai|LMT GST|-3F.c -40|01|-21JfF.c|39e5", + "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4", + "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0", + "Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5", + "Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4", + "Asia/Ho_Chi_Minh|LMT PLMT ICT IDT JST|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5", + "Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5", + "Asia/Hovd|LMT HOVT HOVT HOVST|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3", + "Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", + "Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", + "Asia/Jakarta|BMT JAVT WIB JST WIB WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6", + "Asia/Jayapura|LMT WIT ACST|-9m.M -90 -9u|0121|-1uu9m.M sMMm.M L4nu|26e4", + "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4", + "Asia/Kabul|AFT AFT|-40 -4u|01|-10Qs0|46e5", + "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4", + "Asia/Karachi|LMT IST IST KART PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6", + "Asia/Urumqi|LMT XJT|-5O.k -60|01|-1GgtO.k|32e5", + "Asia/Kathmandu|LMT IST NPT|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5", + "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2", + "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", + "Asia/Kuala_Lumpur|SMT MALT MALST MALT MALT JST MYT|-6T.p -70 -7k -7k -7u -90 -80|01234546|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu 1so1u|71e5", + "Asia/Kuching|LMT BORT BORT BORTST JST MYT|-7l.k -7u -80 -8k -90 -80|01232323232323232425|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0 1so10|13e4", + "Asia/Macau|LMT MOT MOST CST|-7y.k -80 -90 -80|0121212121212121212121212121212121212121213|-2le7y.k 1XO34.k 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0 KEp0|57e4", + "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3", + "Asia/Makassar|LMT MMT WITA JST|-7V.A -7V.A -80 -90|01232|-21JjV.A vfc0 myLV.A 8ML0|15e5", + "Asia/Manila|PHT PHST JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6", + "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4", + "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4", + "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5", + "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5", + "Asia/Oral|LMT +04 +05 +06|-3p.o -40 -50 -60|01232323232323232121212121212121212121212121212|-1Pc3p.o eUnp.o 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4", + "Asia/Pontianak|LMT PMT WIB JST WIB WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4", + "Asia/Pyongyang|LMT KST JCST JST KST|-8n -8u -90 -90 -90|012341|-2um8n 97XR 12FXu jdA0 2Onc0|29e5", + "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4", + "Asia/Rangoon|RMT BURT JST MMT|-6o.E -6u -90 -6u|0123|-21Jio.E SmnS.E 7j9u|48e5", + "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4", + "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4", + "Asia/Seoul|LMT KST JCST JST KST KDT KDT|-8r.Q -8u -90 -90 -90 -9u -a0|01234151515151515146464|-2um8r.Q 97XV.Q 12FXu jjA0 kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6", + "Asia/Singapore|SMT MALT MALST MALT MALT JST SGT SGT|-6T.p -70 -7k -7k -7u -90 -7u -80|012345467|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu Mspu DTA0|56e5", + "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2", + "Asia/Taipei|JWST JST CST CDT|-80 -90 -80 -90|01232323232323232323232323232323232323232|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5", + "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5", + "Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5", + "Asia/Tehran|LMT TMT IRST IRST IRDT IRDT|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6", + "Asia/Thimphu|LMT IST BTT|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3", + "Asia/Tokyo|JCST JST JDT|-90 -90 -a0|0121212121|-1iw90 pKq0 QL0 1lB0 13X0 1zB0 NX0 1zB0 NX0|38e6", + "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5", + "Asia/Ulaanbaatar|LMT ULAT ULAT ULAST|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5", + "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2", + "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", + "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4", + "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5", + "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5", + "Atlantic/Azores|HMT AZOT AZOST AZOMT AZOT AZOST WET|1S.w 20 10 0 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545456545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldW5.s aPX5.s Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", + "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3", + "Atlantic/Canary|LMT CANT WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", + "Atlantic/Cape_Verde|LMT CVT CVST CVT|1y.4 20 10 10|01213|-2xomp.U 1qOMp.U 7zX0 1djf0|50e4", + "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3", + "Atlantic/Madeira|FMT MADT MADST MADMT WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldWQ.o aPWQ.o Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4", + "Atlantic/Reykjavik|LMT IST ISST GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4", + "Atlantic/South_Georgia|GST|20|0||30", + "Atlantic/Stanley|SMT FKT FKST FKT FKST|3P.o 40 30 30 20|0121212121212134343212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 U10 1qM0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2", + "Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5", + "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5", + "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5", + "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3", + "Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746", + "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4", + "Australia/Eucla|ACWST ACWDT|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368", + "Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4", + "Australia/Lord_Howe|AEST LHST LHDT LHDT|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347", + "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10", + "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5", + "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5", + "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Pacific/Easter|EMT EAST EASST EAST EASST|7h.s 70 60 60 50|0121212121212121212121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2", + "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "EST|EST|50|0|", + "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g5X0 14p0 1wn0 17d0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Etc/GMT+0|GMT|0|0|", + "Etc/GMT+1|-01|10|0|", + "Etc/GMT+10|-10|a0|0|", + "Etc/GMT+11|-11|b0|0|", + "Etc/GMT+12|-12|c0|0|", + "Etc/GMT+2|-02|20|0|", + "Etc/GMT+3|-03|30|0|", + "Etc/GMT+4|-04|40|0|", + "Etc/GMT+5|-05|50|0|", + "Etc/GMT+6|-06|60|0|", + "Etc/GMT+7|-07|70|0|", + "Etc/GMT+8|-08|80|0|", + "Etc/GMT+9|-09|90|0|", + "Etc/GMT-1|+01|-10|0|", + "Etc/GMT-10|+10|-a0|0|", + "Etc/GMT-11|+11|-b0|0|", + "Etc/GMT-12|+12|-c0|0|", + "Etc/GMT-13|+13|-d0|0|", + "Etc/GMT-14|+14|-e0|0|", + "Etc/GMT-2|+02|-20|0|", + "Etc/GMT-3|+03|-30|0|", + "Etc/GMT-4|+04|-40|0|", + "Etc/GMT-5|+05|-50|0|", + "Etc/GMT-6|+06|-60|0|", + "Etc/GMT-7|+07|-70|0|", + "Etc/GMT-8|+08|-80|0|", + "Etc/GMT-9|+09|-90|0|", + "Etc/UCT|UCT|0|0|", + "Etc/UTC|UTC|0|0|", + "Europe/Amsterdam|AMT NST NEST NET CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5", + "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3", + "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", + "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5", + "Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6", + "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5", + "Europe/Prague|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 16M0 1lc0 1tA0 17A0 11c0 1io0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5", + "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5", + "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5", + "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", + "Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4", + "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4", + "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3", + "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4", + "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5", + "Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4", + "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ldXn.f aPWn.f Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5", + "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", + "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|01010101010101010101010121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-28dd0 11A0 1go0 19A0 1co0 1dA0 b1A0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 iyo0 Rc0 18o0 1hc0 1io0 1a00 14o0 5aL0 MM0 1vc0 17A0 1i00 1bc0 1eo0 17d0 1in0 17A0 6hA0 10N0 XIL0 1a10 1in0 17d0 19X0 1cN0 1fz0 1a10 1fX0 1cp0 1cO0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5", + "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", + "Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5", + "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3", + "Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6", + "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6", + "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4", + "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5", + "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5", + "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810", + "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4", + "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", + "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5", + "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4", + "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", + "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", + "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4", + "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5", + "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", + "Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", + "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", + "Europe/Zaporozhye|CUT EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4", + "HST|HST|a0|0|", + "Indian/Chagos|LMT IOT IOT|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2", + "Indian/Christmas|CXT|-70|0||21e2", + "Indian/Cocos|CCT|-6u|0||596", + "Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130", + "Indian/Mahe|LMT SCT|-3F.M -40|01|-2yO3F.M|79e3", + "Indian/Maldives|MMT MVT|-4S -50|01|-olgS|35e4", + "Indian/Mauritius|LMT MUT MUST|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4", + "Indian/Reunion|LMT RET|-3F.Q -40|01|-2mDDF.Q|84e4", + "Pacific/Kwajalein|MHT KWAT MHT|-b0 c0 -c0|012|-AX0 W9X0|14e3", + "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "MST|MST|70|0|", + "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Pacific/Chatham|CHAST CHAST CHADT|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600", + "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Pacific/Apia|LMT WSST SST SDT WSDT WSST|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3", + "Pacific/Bougainville|PGT JST BST|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4", + "Pacific/Chuuk|CHUT|-a0|0||49e3", + "Pacific/Efate|LMT VUT VUST|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3", + "Pacific/Enderbury|PHOT PHOT PHOT|c0 b0 -d0|012|nIc0 B8n0|1", + "Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483", + "Pacific/Fiji|LMT FJT FJST|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|88e4", + "Pacific/Funafuti|TVT|-c0|0||45e2", + "Pacific/Galapagos|LMT ECT GALT|5W.o 50 60|012|-1yVS1.A 2dTz1.A|25e3", + "Pacific/Gambier|LMT GAMT|8X.M 90|01|-2jof0.c|125", + "Pacific/Guadalcanal|LMT SBT|-aD.M -b0|01|-2joyD.M|11e4", + "Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4", + "Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4", + "Pacific/Kiritimati|LINT LINT LINT|aE a0 -e0|012|nIaE B8nk|51e2", + "Pacific/Kosrae|KOST KOST|-b0 -c0|010|-AX0 1bdz0|66e2", + "Pacific/Majuro|MHT MHT|-b0 -c0|01|-AX0|28e3", + "Pacific/Marquesas|LMT MART|9i 9u|01|-2joeG|86e2", + "Pacific/Pago_Pago|LMT NST BST SST|bm.M b0 b0 b0|0123|-2nDMB.c 2gVzB.c EyM0|37e2", + "Pacific/Nauru|LMT NRT JST NRT|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3", + "Pacific/Niue|NUT NUT NUT|bk bu b0|012|-KfME 17y0a|12e2", + "Pacific/Norfolk|NMT NFT NFST NFT|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4", + "Pacific/Noumea|LMT NCT NCST|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3", + "Pacific/Palau|PWT|-90|0||21e3", + "Pacific/Pitcairn|PNT PST|8u 80|01|18Vku|56", + "Pacific/Pohnpei|PONT|-b0|0||34e3", + "Pacific/Port_Moresby|PGT|-a0|0||25e4", + "Pacific/Rarotonga|CKT CKHST CKT|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3", + "Pacific/Tahiti|LMT TAHT|9W.g a0|01|-2joe1.I|18e4", + "Pacific/Tarawa|GILT|-c0|0||29e3", + "Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121212121212121212121212121212121212121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|75e3", + "Pacific/Wake|WAKT|-c0|0||16e3", + "Pacific/Wallis|WFT|-c0|0||94", + "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00" + ], + "links": [ + "Africa/Abidjan|Africa/Bamako", + "Africa/Abidjan|Africa/Banjul", + "Africa/Abidjan|Africa/Conakry", + "Africa/Abidjan|Africa/Dakar", + "Africa/Abidjan|Africa/Freetown", + "Africa/Abidjan|Africa/Lome", + "Africa/Abidjan|Africa/Nouakchott", + "Africa/Abidjan|Africa/Ouagadougou", + "Africa/Abidjan|Africa/Sao_Tome", + "Africa/Abidjan|Africa/Timbuktu", + "Africa/Abidjan|Atlantic/St_Helena", + "Africa/Cairo|Egypt", + "Africa/Johannesburg|Africa/Maseru", + "Africa/Johannesburg|Africa/Mbabane", + "Africa/Khartoum|Africa/Juba", + "Africa/Lagos|Africa/Bangui", + "Africa/Lagos|Africa/Brazzaville", + "Africa/Lagos|Africa/Douala", + "Africa/Lagos|Africa/Kinshasa", + "Africa/Lagos|Africa/Libreville", + "Africa/Lagos|Africa/Luanda", + "Africa/Lagos|Africa/Malabo", + "Africa/Lagos|Africa/Niamey", + "Africa/Lagos|Africa/Porto-Novo", + "Africa/Maputo|Africa/Blantyre", + "Africa/Maputo|Africa/Bujumbura", + "Africa/Maputo|Africa/Gaborone", + "Africa/Maputo|Africa/Harare", + "Africa/Maputo|Africa/Kigali", + "Africa/Maputo|Africa/Lubumbashi", + "Africa/Maputo|Africa/Lusaka", + "Africa/Nairobi|Africa/Addis_Ababa", + "Africa/Nairobi|Africa/Asmara", + "Africa/Nairobi|Africa/Asmera", + "Africa/Nairobi|Africa/Dar_es_Salaam", + "Africa/Nairobi|Africa/Djibouti", + "Africa/Nairobi|Africa/Kampala", + "Africa/Nairobi|Africa/Mogadishu", + "Africa/Nairobi|Indian/Antananarivo", + "Africa/Nairobi|Indian/Comoro", + "Africa/Nairobi|Indian/Mayotte", + "Africa/Tripoli|Libya", + "America/Adak|America/Atka", + "America/Adak|US/Aleutian", + "America/Anchorage|US/Alaska", + "America/Argentina/Buenos_Aires|America/Buenos_Aires", + "America/Argentina/Catamarca|America/Argentina/ComodRivadavia", + "America/Argentina/Catamarca|America/Catamarca", + "America/Argentina/Cordoba|America/Cordoba", + "America/Argentina/Cordoba|America/Rosario", + "America/Argentina/Jujuy|America/Jujuy", + "America/Argentina/Mendoza|America/Mendoza", + "America/Atikokan|America/Coral_Harbour", + "America/Chicago|US/Central", + "America/Curacao|America/Aruba", + "America/Curacao|America/Kralendijk", + "America/Curacao|America/Lower_Princes", + "America/Denver|America/Shiprock", + "America/Denver|Navajo", + "America/Denver|US/Mountain", + "America/Detroit|US/Michigan", + "America/Edmonton|Canada/Mountain", + "America/Fort_Wayne|America/Indiana/Indianapolis", + "America/Fort_Wayne|America/Indianapolis", + "America/Fort_Wayne|US/East-Indiana", + "America/Halifax|Canada/Atlantic", + "America/Havana|Cuba", + "America/Indiana/Knox|America/Knox_IN", + "America/Indiana/Knox|US/Indiana-Starke", + "America/Jamaica|Jamaica", + "America/Kentucky/Louisville|America/Louisville", + "America/Los_Angeles|US/Pacific", + "America/Los_Angeles|US/Pacific-New", + "America/Manaus|Brazil/West", + "America/Mazatlan|Mexico/BajaSur", + "America/Mexico_City|Mexico/General", + "America/New_York|US/Eastern", + "America/Noronha|Brazil/DeNoronha", + "America/Panama|America/Cayman", + "America/Phoenix|US/Arizona", + "America/Port_of_Spain|America/Anguilla", + "America/Port_of_Spain|America/Antigua", + "America/Port_of_Spain|America/Dominica", + "America/Port_of_Spain|America/Grenada", + "America/Port_of_Spain|America/Guadeloupe", + "America/Port_of_Spain|America/Marigot", + "America/Port_of_Spain|America/Montserrat", + "America/Port_of_Spain|America/St_Barthelemy", + "America/Port_of_Spain|America/St_Kitts", + "America/Port_of_Spain|America/St_Lucia", + "America/Port_of_Spain|America/St_Thomas", + "America/Port_of_Spain|America/St_Vincent", + "America/Port_of_Spain|America/Tortola", + "America/Port_of_Spain|America/Virgin", + "America/Regina|Canada/East-Saskatchewan", + "America/Regina|Canada/Saskatchewan", + "America/Rio_Branco|America/Porto_Acre", + "America/Rio_Branco|Brazil/Acre", + "America/Santiago|Chile/Continental", + "America/Sao_Paulo|Brazil/East", + "America/St_Johns|Canada/Newfoundland", + "America/Tijuana|America/Ensenada", + "America/Tijuana|America/Santa_Isabel", + "America/Tijuana|Mexico/BajaNorte", + "America/Toronto|America/Montreal", + "America/Toronto|Canada/Eastern", + "America/Vancouver|Canada/Pacific", + "America/Whitehorse|Canada/Yukon", + "America/Winnipeg|Canada/Central", + "Asia/Ashgabat|Asia/Ashkhabad", + "Asia/Bangkok|Asia/Phnom_Penh", + "Asia/Bangkok|Asia/Vientiane", + "Asia/Dhaka|Asia/Dacca", + "Asia/Dubai|Asia/Muscat", + "Asia/Ho_Chi_Minh|Asia/Saigon", + "Asia/Hong_Kong|Hongkong", + "Asia/Jerusalem|Asia/Tel_Aviv", + "Asia/Jerusalem|Israel", + "Asia/Kathmandu|Asia/Katmandu", + "Asia/Kolkata|Asia/Calcutta", + "Asia/Macau|Asia/Macao", + "Asia/Makassar|Asia/Ujung_Pandang", + "Asia/Nicosia|Europe/Nicosia", + "Asia/Qatar|Asia/Bahrain", + "Asia/Rangoon|Asia/Yangon", + "Asia/Riyadh|Asia/Aden", + "Asia/Riyadh|Asia/Kuwait", + "Asia/Seoul|ROK", + "Asia/Shanghai|Asia/Chongqing", + "Asia/Shanghai|Asia/Chungking", + "Asia/Shanghai|Asia/Harbin", + "Asia/Shanghai|PRC", + "Asia/Singapore|Singapore", + "Asia/Taipei|ROC", + "Asia/Tehran|Iran", + "Asia/Thimphu|Asia/Thimbu", + "Asia/Tokyo|Japan", + "Asia/Ulaanbaatar|Asia/Ulan_Bator", + "Asia/Urumqi|Asia/Kashgar", + "Atlantic/Faroe|Atlantic/Faeroe", + "Atlantic/Reykjavik|Iceland", + "Australia/Adelaide|Australia/South", + "Australia/Brisbane|Australia/Queensland", + "Australia/Broken_Hill|Australia/Yancowinna", + "Australia/Darwin|Australia/North", + "Australia/Hobart|Australia/Tasmania", + "Australia/Lord_Howe|Australia/LHI", + "Australia/Melbourne|Australia/Victoria", + "Australia/Perth|Australia/West", + "Australia/Sydney|Australia/ACT", + "Australia/Sydney|Australia/Canberra", + "Australia/Sydney|Australia/NSW", + "Etc/GMT+0|Etc/GMT", + "Etc/GMT+0|Etc/GMT-0", + "Etc/GMT+0|Etc/GMT0", + "Etc/GMT+0|Etc/Greenwich", + "Etc/GMT+0|GMT", + "Etc/GMT+0|GMT+0", + "Etc/GMT+0|GMT-0", + "Etc/GMT+0|GMT0", + "Etc/GMT+0|Greenwich", + "Etc/UCT|UCT", + "Etc/UTC|Etc/Universal", + "Etc/UTC|Etc/Zulu", + "Etc/UTC|UTC", + "Etc/UTC|Universal", + "Etc/UTC|Zulu", + "Europe/Belgrade|Europe/Ljubljana", + "Europe/Belgrade|Europe/Podgorica", + "Europe/Belgrade|Europe/Sarajevo", + "Europe/Belgrade|Europe/Skopje", + "Europe/Belgrade|Europe/Zagreb", + "Europe/Chisinau|Europe/Tiraspol", + "Europe/Dublin|Eire", + "Europe/Helsinki|Europe/Mariehamn", + "Europe/Istanbul|Asia/Istanbul", + "Europe/Istanbul|Turkey", + "Europe/Lisbon|Portugal", + "Europe/London|Europe/Belfast", + "Europe/London|Europe/Guernsey", + "Europe/London|Europe/Isle_of_Man", + "Europe/London|Europe/Jersey", + "Europe/London|GB", + "Europe/London|GB-Eire", + "Europe/Moscow|W-SU", + "Europe/Oslo|Arctic/Longyearbyen", + "Europe/Oslo|Atlantic/Jan_Mayen", + "Europe/Prague|Europe/Bratislava", + "Europe/Rome|Europe/San_Marino", + "Europe/Rome|Europe/Vatican", + "Europe/Warsaw|Poland", + "Europe/Zurich|Europe/Busingen", + "Europe/Zurich|Europe/Vaduz", + "Pacific/Auckland|Antarctica/McMurdo", + "Pacific/Auckland|Antarctica/South_Pole", + "Pacific/Auckland|NZ", + "Pacific/Chatham|NZ-CHAT", + "Pacific/Chuuk|Pacific/Truk", + "Pacific/Chuuk|Pacific/Yap", + "Pacific/Easter|Chile/EasterIsland", + "Pacific/Guam|Pacific/Saipan", + "Pacific/Honolulu|Pacific/Johnston", + "Pacific/Honolulu|US/Hawaii", + "Pacific/Kwajalein|Kwajalein", + "Pacific/Pago_Pago|Pacific/Midway", + "Pacific/Pago_Pago|Pacific/Samoa", + "Pacific/Pago_Pago|US/Samoa", + "Pacific/Pohnpei|Pacific/Ponape" + ] +} \ No newline at end of file diff --git a/node_modules/moment-timezone/data/unpacked/latest.json b/node_modules/moment-timezone/data/unpacked/latest.json new file mode 100644 index 0000000..6516d57 --- /dev/null +++ b/node_modules/moment-timezone/data/unpacked/latest.json @@ -0,0 +1,125710 @@ +{ + "version": "2016j", + "zones": [ + { + "name": "Africa/Abidjan", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 4800000 + }, + { + "name": "Africa/Accra", + "abbrs": [ + "LMT", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT", + "GHST", + "GMT" + ], + "untils": [ + -1640995148000, + -1556841600000, + -1546388400000, + -1525305600000, + -1514852400000, + -1493769600000, + -1483316400000, + -1462233600000, + -1451780400000, + -1430611200000, + -1420158000000, + -1399075200000, + -1388622000000, + -1367539200000, + -1357086000000, + -1336003200000, + -1325550000000, + -1304380800000, + -1293927600000, + -1272844800000, + -1262391600000, + -1241308800000, + -1230855600000, + -1209772800000, + -1199319600000, + -1178150400000, + -1167697200000, + -1146614400000, + -1136161200000, + -1115078400000, + -1104625200000, + -1083542400000, + -1073089200000, + -1051920000000, + -1041466800000, + -1020384000000, + -1009930800000, + -988848000000, + -978394800000, + -957312000000, + -946858800000, + -925689600000, + -915236400000, + -894153600000, + -883700400000, + -862617600000, + -852164400000, + null + ], + "offsets": [ + 0.8667, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0, + -20, + 0 + ], + "population": 4145000 + }, + { + "name": "Africa/Addis_Ababa", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Africa/Algiers", + "abbrs": [ + "PMT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "WET", + "CET", + "WET", + "WEST", + "WET", + "WEST", + "CET", + "CEST", + "CET", + "WET", + "WEST", + "WET", + "CET" + ], + "untils": [ + -1855958961000, + -1689814800000, + -1680397200000, + -1665363600000, + -1648342800000, + -1635123600000, + -1616893200000, + -1604278800000, + -1585443600000, + -1574038800000, + -1552266000000, + -1539997200000, + -1531443600000, + -956365200000, + -950486400000, + -942012000000, + -812502000000, + -796262400000, + -781052400000, + -766630800000, + -733280400000, + -439430400000, + -212029200000, + 41468400000, + 54774000000, + 231724800000, + 246236400000, + 259545600000, + 275274000000, + 309740400000, + 325468800000, + 341802000000, + 357523200000, + null + ], + "offsets": [ + -9.35, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -60, + -120, + -60, + 0, + -60, + 0, + -60 + ], + "population": 2590000 + }, + { + "name": "Africa/Asmara", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Africa/Asmera", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Africa/Bamako", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Bangui", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/Banjul", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Bissau", + "abbrs": [ + "LMT", + "WAT", + "GMT" + ], + "untils": [ + -1830380260000, + 157770000000, + null + ], + "offsets": [ + 62.3333, + 60, + 0 + ], + "population": 387909 + }, + { + "name": "Africa/Blantyre", + "abbrs": [ + "LMT", + "CAT" + ], + "untils": [ + -2109291020000, + null + ], + "offsets": [ + -130.3333, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Brazzaville", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/Bujumbura", + "abbrs": [ + "LMT", + "CAT" + ], + "untils": [ + -2109291020000, + null + ], + "offsets": [ + -130.3333, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Cairo", + "abbrs": [ + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -929844000000, + -923108400000, + -906170400000, + -892868400000, + -875844000000, + -857790000000, + -844308000000, + -825822000000, + -812685600000, + -794199600000, + -779853600000, + -762663600000, + -399088800000, + -386650800000, + -368330400000, + -355114800000, + -336790800000, + -323654400000, + -305168400000, + -292032000000, + -273632400000, + -260496000000, + -242096400000, + -228960000000, + -210560400000, + -197424000000, + -178938000000, + -165801600000, + -147402000000, + -134265600000, + -115866000000, + -102643200000, + -84330000000, + -71107200000, + -52707600000, + -39484800000, + -21171600000, + -7948800000, + 10364400000, + 23587200000, + 41900400000, + 55123200000, + 73522800000, + 86745600000, + 105058800000, + 118281600000, + 136594800000, + 149817600000, + 168130800000, + 181353600000, + 199753200000, + 212976000000, + 231289200000, + 244512000000, + 262825200000, + 276048000000, + 294361200000, + 307584000000, + 325983600000, + 339206400000, + 357519600000, + 370742400000, + 396399600000, + 402278400000, + 426812400000, + 433814400000, + 452214000000, + 465436800000, + 483750000000, + 496972800000, + 515286000000, + 528508800000, + 546822000000, + 560044800000, + 578444400000, + 591667200000, + 610412400000, + 623203200000, + 641516400000, + 654739200000, + 673052400000, + 686275200000, + 704674800000, + 717897600000, + 736210800000, + 749433600000, + 767746800000, + 780969600000, + 799020000000, + 812322000000, + 830469600000, + 843771600000, + 861919200000, + 875221200000, + 893368800000, + 906670800000, + 925423200000, + 938725200000, + 956872800000, + 970174800000, + 988322400000, + 1001624400000, + 1019772000000, + 1033074000000, + 1051221600000, + 1064523600000, + 1083276000000, + 1096578000000, + 1114725600000, + 1128027600000, + 1146175200000, + 1158872400000, + 1177624800000, + 1189112400000, + 1209074400000, + 1219957200000, + 1240524000000, + 1250802000000, + 1272578400000, + 1281474000000, + 1284069600000, + 1285880400000, + 1400191200000, + 1403816400000, + 1406844000000, + 1411678800000, + null + ], + "offsets": [ + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 15071000 + }, + { + "name": "Africa/Casablanca", + "abbrs": [ + "LMT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "CET", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + -1773012580000, + -956361600000, + -950490000000, + -942019200000, + -761187600000, + -617241600000, + -605149200000, + -81432000000, + -71110800000, + 141264000000, + 147222000000, + 199756800000, + 207702000000, + 231292800000, + 244249200000, + 265507200000, + 271033200000, + 448243200000, + 504918000000, + 1212278400000, + 1220223600000, + 1243814400000, + 1250809200000, + 1272758400000, + 1281222000000, + 1301788800000, + 1312066800000, + 1335664800000, + 1342749600000, + 1345428000000, + 1348970400000, + 1367114400000, + 1373162400000, + 1376100000000, + 1382839200000, + 1396144800000, + 1403920800000, + 1406944800000, + 1414288800000, + 1427594400000, + 1434247200000, + 1437271200000, + 1445738400000, + 1459044000000, + 1465092000000, + 1468116000000, + 1477792800000, + 1490493600000, + 1495332000000, + 1498960800000, + 1509242400000, + 1521943200000, + 1526176800000, + 1529200800000, + 1540692000000, + 1553997600000, + 1557021600000, + 1560045600000, + 1572141600000, + 1585447200000, + 1587261600000, + 1590285600000, + 1603591200000, + 1616896800000, + 1618106400000, + 1621130400000, + 1635645600000, + 1651975200000, + 1667095200000, + 1682215200000, + 1698544800000, + 1713060000000, + 1729994400000, + 1743904800000, + 1761444000000, + 1774749600000, + 1792893600000, + 1806199200000, + 1824948000000, + 1837648800000, + 1856397600000, + 1869098400000, + 1887847200000, + 1901152800000, + 1919296800000, + 1932602400000, + 1950746400000, + 1964052000000, + 1982800800000, + 1995501600000, + 2014250400000, + 2026951200000, + 2045700000000, + 2058400800000, + 2077149600000, + 2090455200000, + 2107994400000, + 2121904800000, + 2138234400000, + null + ], + "offsets": [ + 30.3333, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 3211000 + }, + { + "name": "Africa/Ceuta", + "abbrs": [ + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1630112400000, + -1616810400000, + -1442451600000, + -1427677200000, + -1379293200000, + -1364778000000, + -1348448400000, + -1333328400000, + -1316394000000, + -1301274000000, + -81432000000, + -71110800000, + 141264000000, + 147222000000, + 199756800000, + 207702000000, + 231292800000, + 244249200000, + 265507200000, + 271033200000, + 448243200000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 84963 + }, + { + "name": "Africa/Conakry", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Dakar", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Dar_es_Salaam", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Africa/Djibouti", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Africa/Douala", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/El_Aaiun", + "abbrs": [ + "LMT", + "WAT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + -1136070432000, + 198291600000, + 199756800000, + 207702000000, + 231292800000, + 244249200000, + 265507200000, + 271033200000, + 1212278400000, + 1220223600000, + 1243814400000, + 1250809200000, + 1272758400000, + 1281222000000, + 1301788800000, + 1312066800000, + 1335664800000, + 1342749600000, + 1345428000000, + 1348970400000, + 1367114400000, + 1373162400000, + 1376100000000, + 1382839200000, + 1396144800000, + 1403920800000, + 1406944800000, + 1414288800000, + 1427594400000, + 1434247200000, + 1437271200000, + 1445738400000, + 1459044000000, + 1465092000000, + 1468116000000, + 1477792800000, + 1490493600000, + 1495332000000, + 1498960800000, + 1509242400000, + 1521943200000, + 1526176800000, + 1529200800000, + 1540692000000, + 1553997600000, + 1557021600000, + 1560045600000, + 1572141600000, + 1585447200000, + 1587261600000, + 1590285600000, + 1603591200000, + 1616896800000, + 1618106400000, + 1621130400000, + 1635645600000, + 1651975200000, + 1667095200000, + 1682215200000, + 1698544800000, + 1713060000000, + 1729994400000, + 1743904800000, + 1761444000000, + 1774749600000, + 1792893600000, + 1806199200000, + 1824948000000, + 1837648800000, + 1856397600000, + 1869098400000, + 1887847200000, + 1901152800000, + 1919296800000, + 1932602400000, + 1950746400000, + 1964052000000, + 1982800800000, + 1995501600000, + 2014250400000, + 2026951200000, + 2045700000000, + 2058400800000, + 2077149600000, + 2090455200000, + 2107994400000, + 2121904800000, + 2138234400000, + null + ], + "offsets": [ + 52.8, + 60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 196331 + }, + { + "name": "Africa/Freetown", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Gaborone", + "abbrs": [ + "LMT", + "CAT" + ], + "untils": [ + -2109291020000, + null + ], + "offsets": [ + -130.3333, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Harare", + "abbrs": [ + "LMT", + "CAT" + ], + "untils": [ + -2109291020000, + null + ], + "offsets": [ + -130.3333, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Johannesburg", + "abbrs": [ + "SAST", + "SAST", + "SAST", + "SAST", + "SAST", + "SAST" + ], + "untils": [ + -2109288600000, + -860976000000, + -845254800000, + -829526400000, + -813805200000, + null + ], + "offsets": [ + -90, + -120, + -180, + -120, + -180, + -120 + ], + "population": 8432000 + }, + { + "name": "Africa/Juba", + "abbrs": [ + "LMT", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "EAT" + ], + "untils": [ + -1230775808000, + 10360800000, + 24786000000, + 41810400000, + 56322000000, + 73432800000, + 87944400000, + 104882400000, + 119480400000, + 136332000000, + 151016400000, + 167781600000, + 182552400000, + 199231200000, + 214174800000, + 230680800000, + 245710800000, + 262735200000, + 277246800000, + 294184800000, + 308782800000, + 325634400000, + 340405200000, + 357084000000, + 371941200000, + 388533600000, + 403477200000, + 419983200000, + 435013200000, + 452037600000, + 466635600000, + 483487200000, + 498171600000, + 947930400000, + null + ], + "offsets": [ + -130.1333, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180 + ], + "population": 0 + }, + { + "name": "Africa/Kampala", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Africa/Khartoum", + "abbrs": [ + "LMT", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "CAST", + "CAT", + "EAT" + ], + "untils": [ + -1230775808000, + 10360800000, + 24786000000, + 41810400000, + 56322000000, + 73432800000, + 87944400000, + 104882400000, + 119480400000, + 136332000000, + 151016400000, + 167781600000, + 182552400000, + 199231200000, + 214174800000, + 230680800000, + 245710800000, + 262735200000, + 277246800000, + 294184800000, + 308782800000, + 325634400000, + 340405200000, + 357084000000, + 371941200000, + 388533600000, + 403477200000, + 419983200000, + 435013200000, + 452037600000, + 466635600000, + 483487200000, + 498171600000, + 947930400000, + null + ], + "offsets": [ + -130.1333, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180 + ], + "population": 5125000 + }, + { + "name": "Africa/Kigali", + "abbrs": [ + "LMT", + "CAT" + ], + "untils": [ + -2109291020000, + null + ], + "offsets": [ + -130.3333, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Kinshasa", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/Lagos", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 17060307 + }, + { + "name": "Africa/Libreville", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/Lome", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Luanda", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/Lubumbashi", + "abbrs": [ + "LMT", + "CAT" + ], + "untils": [ + -2109291020000, + null + ], + "offsets": [ + -130.3333, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Lusaka", + "abbrs": [ + "LMT", + "CAT" + ], + "untils": [ + -2109291020000, + null + ], + "offsets": [ + -130.3333, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Malabo", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/Maputo", + "abbrs": [ + "LMT", + "CAT" + ], + "untils": [ + -2109291020000, + null + ], + "offsets": [ + -130.3333, + -120 + ], + "population": 2615000 + }, + { + "name": "Africa/Maseru", + "abbrs": [ + "SAST", + "SAST", + "SAST", + "SAST", + "SAST", + "SAST" + ], + "untils": [ + -2109288600000, + -860976000000, + -845254800000, + -829526400000, + -813805200000, + null + ], + "offsets": [ + -90, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Mbabane", + "abbrs": [ + "SAST", + "SAST", + "SAST", + "SAST", + "SAST", + "SAST" + ], + "untils": [ + -2109288600000, + -860976000000, + -845254800000, + -829526400000, + -813805200000, + null + ], + "offsets": [ + -90, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "Africa/Mogadishu", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Africa/Monrovia", + "abbrs": [ + "MMT", + "LRT", + "GMT" + ], + "untils": [ + -1604359012000, + 73529070000, + null + ], + "offsets": [ + 43.1333, + 44.5, + 0 + ], + "population": 1100000 + }, + { + "name": "Africa/Nairobi", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 4738000 + }, + { + "name": "Africa/Ndjamena", + "abbrs": [ + "LMT", + "WAT", + "WAST", + "WAT" + ], + "untils": [ + -1830387612000, + 308703600000, + 321314400000, + null + ], + "offsets": [ + -60.2, + -60, + -120, + -60 + ], + "population": 1260000 + }, + { + "name": "Africa/Niamey", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/Nouakchott", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Ouagadougou", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Porto-Novo", + "abbrs": [ + "LMT", + "WAT" + ], + "untils": [ + -1588464816000, + null + ], + "offsets": [ + -13.6, + -60 + ], + "population": 0 + }, + { + "name": "Africa/Sao_Tome", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Timbuktu", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Africa/Tripoli", + "abbrs": [ + "LMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "EET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "EET", + "CET", + "CEST", + "EET", + "CET", + "CEST", + "EET" + ], + "untils": [ + -1577926364000, + -574902000000, + -568087200000, + -512175600000, + -504928800000, + -449888400000, + -441856800000, + -347158800000, + 378684000000, + 386463600000, + 402271200000, + 417999600000, + 433807200000, + 449622000000, + 465429600000, + 481590000000, + 496965600000, + 512953200000, + 528674400000, + 544230000000, + 560037600000, + 575852400000, + 591660000000, + 607388400000, + 623196000000, + 641775600000, + 844034400000, + 860108400000, + 875916000000, + 1352505600000, + 1364515200000, + 1382659200000, + null + ], + "offsets": [ + -52.7333, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -120, + -60, + -120, + -120 + ], + "population": 1110000 + }, + { + "name": "Africa/Tunis", + "abbrs": [ + "PMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1855958961000, + -969242400000, + -950493600000, + -941940000000, + -891136800000, + -877827600000, + -857257200000, + -844556400000, + -842918400000, + -842223600000, + -828230400000, + -812502000000, + -796269600000, + -781052400000, + -766634400000, + 231202800000, + 243903600000, + 262825200000, + 276044400000, + 581122800000, + 591145200000, + 606870000000, + 622594800000, + 641516400000, + 654649200000, + 1114902000000, + 1128038400000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + null + ], + "offsets": [ + -9.35, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1990000 + }, + { + "name": "Africa/Windhoek", + "abbrs": [ + "SWAT", + "SAST", + "SAST", + "SAST", + "CAT", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST", + "WAT", + "WAST" + ], + "untils": [ + -2109288600000, + -860976000000, + -845254800000, + 637970400000, + 765324000000, + 778640400000, + 796780800000, + 810090000000, + 828835200000, + 841539600000, + 860284800000, + 873594000000, + 891734400000, + 905043600000, + 923184000000, + 936493200000, + 954633600000, + 967942800000, + 986083200000, + 999392400000, + 1018137600000, + 1030842000000, + 1049587200000, + 1062896400000, + 1081036800000, + 1094346000000, + 1112486400000, + 1125795600000, + 1143936000000, + 1157245200000, + 1175385600000, + 1188694800000, + 1207440000000, + 1220749200000, + 1238889600000, + 1252198800000, + 1270339200000, + 1283648400000, + 1301788800000, + 1315098000000, + 1333238400000, + 1346547600000, + 1365292800000, + 1377997200000, + 1396742400000, + 1410051600000, + 1428192000000, + 1441501200000, + 1459641600000, + 1472950800000, + 1491091200000, + 1504400400000, + 1522540800000, + 1535850000000, + 1554595200000, + 1567299600000, + 1586044800000, + 1599354000000, + 1617494400000, + 1630803600000, + 1648944000000, + 1662253200000, + 1680393600000, + 1693702800000, + 1712448000000, + 1725152400000, + 1743897600000, + 1757206800000, + 1775347200000, + 1788656400000, + 1806796800000, + 1820106000000, + 1838246400000, + 1851555600000, + 1869696000000, + 1883005200000, + 1901750400000, + 1914454800000, + 1933200000000, + 1946509200000, + 1964649600000, + 1977958800000, + 1996099200000, + 2009408400000, + 2027548800000, + 2040858000000, + 2058998400000, + 2072307600000, + 2091052800000, + 2104362000000, + 2122502400000, + 2135811600000, + null + ], + "offsets": [ + -90, + -120, + -180, + -120, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120 + ], + "population": 322500 + }, + { + "name": "America/Adak", + "abbrs": [ + "NST", + "NWT", + "NPT", + "NST", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "AHST", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST" + ], + "untils": [ + -880196400000, + -769395600000, + -765374400000, + -86878800000, + -21466800000, + -5745600000, + 9982800000, + 25704000000, + 41432400000, + 57758400000, + 73486800000, + 89208000000, + 104936400000, + 120657600000, + 126709200000, + 152107200000, + 162392400000, + 183556800000, + 199285200000, + 215611200000, + 230734800000, + 247060800000, + 262789200000, + 278510400000, + 294238800000, + 309960000000, + 325688400000, + 341409600000, + 357138000000, + 372859200000, + 388587600000, + 404913600000, + 420037200000, + 436363200000, + 439034400000, + 452088000000, + 467809200000, + 483537600000, + 499258800000, + 514987200000, + 530708400000, + 544622400000, + 562158000000, + 576072000000, + 594212400000, + 607521600000, + 625662000000, + 638971200000, + 657111600000, + 671025600000, + 688561200000, + 702475200000, + 720010800000, + 733924800000, + 752065200000, + 765374400000, + 783514800000, + 796824000000, + 814964400000, + 828878400000, + 846414000000, + 860328000000, + 877863600000, + 891777600000, + 909313200000, + 923227200000, + 941367600000, + 954676800000, + 972817200000, + 986126400000, + 1004266800000, + 1018180800000, + 1035716400000, + 1049630400000, + 1067166000000, + 1081080000000, + 1099220400000, + 1112529600000, + 1130670000000, + 1143979200000, + 1162119600000, + 1173614400000, + 1194174000000, + 1205064000000, + 1225623600000, + 1236513600000, + 1257073200000, + 1268568000000, + 1289127600000, + 1300017600000, + 1320577200000, + 1331467200000, + 1352026800000, + 1362916800000, + 1383476400000, + 1394366400000, + 1414926000000, + 1425816000000, + 1446375600000, + 1457870400000, + 1478430000000, + 1489320000000, + 1509879600000, + 1520769600000, + 1541329200000, + 1552219200000, + 1572778800000, + 1583668800000, + 1604228400000, + 1615723200000, + 1636282800000, + 1647172800000, + 1667732400000, + 1678622400000, + 1699182000000, + 1710072000000, + 1730631600000, + 1741521600000, + 1762081200000, + 1772971200000, + 1793530800000, + 1805025600000, + 1825585200000, + 1836475200000, + 1857034800000, + 1867924800000, + 1888484400000, + 1899374400000, + 1919934000000, + 1930824000000, + 1951383600000, + 1962878400000, + 1983438000000, + 1994328000000, + 2014887600000, + 2025777600000, + 2046337200000, + 2057227200000, + 2077786800000, + 2088676800000, + 2109236400000, + 2120126400000, + 2140686000000, + null + ], + "offsets": [ + 660, + 600, + 600, + 660, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 600, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600 + ], + "population": 326 + }, + { + "name": "America/Anchorage", + "abbrs": [ + "CAT", + "CAWT", + "CAPT", + "CAT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "YST", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST" + ], + "untils": [ + -880200000000, + -769395600000, + -765378000000, + -86882400000, + -21470400000, + -5749200000, + 9979200000, + 25700400000, + 41428800000, + 57754800000, + 73483200000, + 89204400000, + 104932800000, + 120654000000, + 126705600000, + 152103600000, + 162388800000, + 183553200000, + 199281600000, + 215607600000, + 230731200000, + 247057200000, + 262785600000, + 278506800000, + 294235200000, + 309956400000, + 325684800000, + 341406000000, + 357134400000, + 372855600000, + 388584000000, + 404910000000, + 420033600000, + 436359600000, + 439030800000, + 452084400000, + 467805600000, + 483534000000, + 499255200000, + 514983600000, + 530704800000, + 544618800000, + 562154400000, + 576068400000, + 594208800000, + 607518000000, + 625658400000, + 638967600000, + 657108000000, + 671022000000, + 688557600000, + 702471600000, + 720007200000, + 733921200000, + 752061600000, + 765370800000, + 783511200000, + 796820400000, + 814960800000, + 828874800000, + 846410400000, + 860324400000, + 877860000000, + 891774000000, + 909309600000, + 923223600000, + 941364000000, + 954673200000, + 972813600000, + 986122800000, + 1004263200000, + 1018177200000, + 1035712800000, + 1049626800000, + 1067162400000, + 1081076400000, + 1099216800000, + 1112526000000, + 1130666400000, + 1143975600000, + 1162116000000, + 1173610800000, + 1194170400000, + 1205060400000, + 1225620000000, + 1236510000000, + 1257069600000, + 1268564400000, + 1289124000000, + 1300014000000, + 1320573600000, + 1331463600000, + 1352023200000, + 1362913200000, + 1383472800000, + 1394362800000, + 1414922400000, + 1425812400000, + 1446372000000, + 1457866800000, + 1478426400000, + 1489316400000, + 1509876000000, + 1520766000000, + 1541325600000, + 1552215600000, + 1572775200000, + 1583665200000, + 1604224800000, + 1615719600000, + 1636279200000, + 1647169200000, + 1667728800000, + 1678618800000, + 1699178400000, + 1710068400000, + 1730628000000, + 1741518000000, + 1762077600000, + 1772967600000, + 1793527200000, + 1805022000000, + 1825581600000, + 1836471600000, + 1857031200000, + 1867921200000, + 1888480800000, + 1899370800000, + 1919930400000, + 1930820400000, + 1951380000000, + 1962874800000, + 1983434400000, + 1994324400000, + 2014884000000, + 2025774000000, + 2046333600000, + 2057223600000, + 2077783200000, + 2088673200000, + 2109232800000, + 2120122800000, + 2140682400000, + null + ], + "offsets": [ + 600, + 540, + 540, + 600, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 540, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540 + ], + "population": 300950 + }, + { + "name": "America/Anguilla", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Antigua", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Araguaina", + "abbrs": [ + "LMT", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT" + ], + "untils": [ + -1767214032000, + -1206957600000, + -1191362400000, + -1175374800000, + -1159826400000, + -633819600000, + -622069200000, + -602283600000, + -591832800000, + -570747600000, + -560210400000, + -539125200000, + -531352800000, + -191365200000, + -184197600000, + -155163600000, + -150069600000, + -128898000000, + -121125600000, + -99954000000, + -89589600000, + -68418000000, + -57967200000, + 499748400000, + 511236000000, + 530593200000, + 540266400000, + 562129200000, + 571197600000, + 592974000000, + 602042400000, + 624423600000, + 634701600000, + 813726000000, + 824004000000, + 844570800000, + 856058400000, + 876106800000, + 888717600000, + 908074800000, + 919562400000, + 938919600000, + 951616800000, + 970974000000, + 982461600000, + 1003028400000, + 1013911200000, + 1036292400000, + 1045360800000, + 1350788400000, + 1361066400000, + null + ], + "offsets": [ + 192.8, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 142925 + }, + { + "name": "America/Argentina/Buenos_Aires", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687927600000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1198983600000, + 1205632800000, + 1224385200000, + 1237082400000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 180, + 180, + 120, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/Catamarca", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687931200000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1086058800000, + 1087704000000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/ComodRivadavia", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687931200000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1086058800000, + 1087704000000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/Cordoba", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687931200000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1198983600000, + 1205632800000, + 1224385200000, + 1237082400000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 120, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/Jujuy", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "WARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 657086400000, + 669178800000, + 686721600000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 180, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/La_Rioja", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667792800000, + 673588800000, + 687927600000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1086058800000, + 1087704000000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 180, + 120, + 180, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/Mendoza", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "WARST", + "WART", + "WARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 655963200000, + 667796400000, + 687499200000, + 699418800000, + 719380800000, + 731469600000, + 938919600000, + 952052400000, + 1085281200000, + 1096171200000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 180, + 240, + 180, + 240, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/Rio_Gallegos", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687927600000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1086058800000, + 1087704000000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/Salta", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687931200000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/San_Juan", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667792800000, + 673588800000, + 687927600000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1085972400000, + 1090728000000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 180, + 120, + 180, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/San_Luis", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "WARST", + "WART", + "ART", + "WARST", + "ART", + "WART", + "ART", + "ARST", + "WARST", + "WART", + "WARST", + "WART", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 637380000000, + 655963200000, + 667796400000, + 675748800000, + 938919600000, + 952052400000, + 1085972400000, + 1090728000000, + 1198983600000, + 1200880800000, + 1205031600000, + 1223784000000, + 1236481200000, + 1255233600000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 180, + 240, + 180, + 180, + 180, + 240, + 180, + 120, + 180, + 240, + 180, + 240, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/Tucuman", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687931200000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1086058800000, + 1087099200000, + 1198983600000, + 1205632800000, + 1224385200000, + 1237082400000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Argentina/Ushuaia", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687927600000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1085886000000, + 1087704000000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Aruba", + "abbrs": [ + "LMT", + "ANT", + "AST" + ], + "untils": [ + -1826738653000, + -157750200000, + null + ], + "offsets": [ + 275.7833, + 270, + 240 + ], + "population": 0 + }, + { + "name": "America/Asuncion", + "abbrs": [ + "AMT", + "PYT", + "PYT", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST", + "PYT", + "PYST" + ], + "untils": [ + -1206389360000, + 86760000000, + 134017200000, + 181368000000, + 194497200000, + 212990400000, + 226033200000, + 244526400000, + 257569200000, + 276062400000, + 291783600000, + 307598400000, + 323406000000, + 339220800000, + 354942000000, + 370756800000, + 386478000000, + 402292800000, + 418014000000, + 433828800000, + 449636400000, + 465451200000, + 481172400000, + 496987200000, + 512708400000, + 528523200000, + 544244400000, + 560059200000, + 575866800000, + 591681600000, + 607402800000, + 625032000000, + 638938800000, + 654753600000, + 670474800000, + 686721600000, + 699418800000, + 718257600000, + 733546800000, + 749448000000, + 762318000000, + 780984000000, + 793767600000, + 812520000000, + 825649200000, + 844574400000, + 856666800000, + 876024000000, + 888721200000, + 907473600000, + 920775600000, + 938923200000, + 952225200000, + 970372800000, + 983674800000, + 1002427200000, + 1018148400000, + 1030852800000, + 1049598000000, + 1062907200000, + 1081047600000, + 1097985600000, + 1110682800000, + 1129435200000, + 1142132400000, + 1160884800000, + 1173582000000, + 1192939200000, + 1205031600000, + 1224388800000, + 1236481200000, + 1255838400000, + 1270954800000, + 1286078400000, + 1302404400000, + 1317528000000, + 1333854000000, + 1349582400000, + 1364094000000, + 1381032000000, + 1395543600000, + 1412481600000, + 1426993200000, + 1443931200000, + 1459047600000, + 1475380800000, + 1490497200000, + 1506830400000, + 1521946800000, + 1538884800000, + 1553396400000, + 1570334400000, + 1584846000000, + 1601784000000, + 1616900400000, + 1633233600000, + 1648350000000, + 1664683200000, + 1679799600000, + 1696132800000, + 1711249200000, + 1728187200000, + 1742698800000, + 1759636800000, + 1774148400000, + 1791086400000, + 1806202800000, + 1822536000000, + 1837652400000, + 1853985600000, + 1869102000000, + 1886040000000, + 1900551600000, + 1917489600000, + 1932001200000, + 1948939200000, + 1964055600000, + 1980388800000, + 1995505200000, + 2011838400000, + 2026954800000, + 2043288000000, + 2058404400000, + 2075342400000, + 2089854000000, + 2106792000000, + 2121303600000, + 2138241600000, + null + ], + "offsets": [ + 230.6667, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180 + ], + "population": 2827000 + }, + { + "name": "America/Atikokan", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CWT", + "CPT", + "EST" + ], + "untils": [ + -1632067200000, + -1615136400000, + -923248800000, + -880214400000, + -769395600000, + -765392400000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 300, + 300, + 300 + ], + "population": 2787 + }, + { + "name": "America/Atka", + "abbrs": [ + "NST", + "NWT", + "NPT", + "NST", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "AHST", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST" + ], + "untils": [ + -880196400000, + -769395600000, + -765374400000, + -86878800000, + -21466800000, + -5745600000, + 9982800000, + 25704000000, + 41432400000, + 57758400000, + 73486800000, + 89208000000, + 104936400000, + 120657600000, + 126709200000, + 152107200000, + 162392400000, + 183556800000, + 199285200000, + 215611200000, + 230734800000, + 247060800000, + 262789200000, + 278510400000, + 294238800000, + 309960000000, + 325688400000, + 341409600000, + 357138000000, + 372859200000, + 388587600000, + 404913600000, + 420037200000, + 436363200000, + 439034400000, + 452088000000, + 467809200000, + 483537600000, + 499258800000, + 514987200000, + 530708400000, + 544622400000, + 562158000000, + 576072000000, + 594212400000, + 607521600000, + 625662000000, + 638971200000, + 657111600000, + 671025600000, + 688561200000, + 702475200000, + 720010800000, + 733924800000, + 752065200000, + 765374400000, + 783514800000, + 796824000000, + 814964400000, + 828878400000, + 846414000000, + 860328000000, + 877863600000, + 891777600000, + 909313200000, + 923227200000, + 941367600000, + 954676800000, + 972817200000, + 986126400000, + 1004266800000, + 1018180800000, + 1035716400000, + 1049630400000, + 1067166000000, + 1081080000000, + 1099220400000, + 1112529600000, + 1130670000000, + 1143979200000, + 1162119600000, + 1173614400000, + 1194174000000, + 1205064000000, + 1225623600000, + 1236513600000, + 1257073200000, + 1268568000000, + 1289127600000, + 1300017600000, + 1320577200000, + 1331467200000, + 1352026800000, + 1362916800000, + 1383476400000, + 1394366400000, + 1414926000000, + 1425816000000, + 1446375600000, + 1457870400000, + 1478430000000, + 1489320000000, + 1509879600000, + 1520769600000, + 1541329200000, + 1552219200000, + 1572778800000, + 1583668800000, + 1604228400000, + 1615723200000, + 1636282800000, + 1647172800000, + 1667732400000, + 1678622400000, + 1699182000000, + 1710072000000, + 1730631600000, + 1741521600000, + 1762081200000, + 1772971200000, + 1793530800000, + 1805025600000, + 1825585200000, + 1836475200000, + 1857034800000, + 1867924800000, + 1888484400000, + 1899374400000, + 1919934000000, + 1930824000000, + 1951383600000, + 1962878400000, + 1983438000000, + 1994328000000, + 2014887600000, + 2025777600000, + 2046337200000, + 2057227200000, + 2077786800000, + 2088676800000, + 2109236400000, + 2120126400000, + 2140686000000, + null + ], + "offsets": [ + 660, + 600, + 600, + 660, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 600, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600 + ], + "population": 0 + }, + { + "name": "America/Bahia", + "abbrs": [ + "LMT", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT" + ], + "untils": [ + -1767216356000, + -1206957600000, + -1191362400000, + -1175374800000, + -1159826400000, + -633819600000, + -622069200000, + -602283600000, + -591832800000, + -570747600000, + -560210400000, + -539125200000, + -531352800000, + -191365200000, + -184197600000, + -155163600000, + -150069600000, + -128898000000, + -121125600000, + -99954000000, + -89589600000, + -68418000000, + -57967200000, + 499748400000, + 511236000000, + 530593200000, + 540266400000, + 562129200000, + 571197600000, + 592974000000, + 602042400000, + 624423600000, + 634701600000, + 656478000000, + 666756000000, + 687927600000, + 697600800000, + 719982000000, + 728445600000, + 750826800000, + 761709600000, + 782276400000, + 793159200000, + 813726000000, + 824004000000, + 844570800000, + 856058400000, + 876106800000, + 888717600000, + 908074800000, + 919562400000, + 938919600000, + 951616800000, + 970974000000, + 982461600000, + 1003028400000, + 1013911200000, + 1036292400000, + 1045360800000, + 1318734000000, + 1330221600000, + null + ], + "offsets": [ + 154.0667, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 2675000 + }, + { + "name": "America/Bahia_Banderas", + "abbrs": [ + "LMT", + "MST", + "CST", + "MST", + "CST", + "MST", + "CST", + "MST", + "PST", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1514739600000, + -1343066400000, + -1234807200000, + -1220292000000, + -1207159200000, + -1191344400000, + -873828000000, + -661539600000, + 28800000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 989139600000, + 1001836800000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1175418000000, + 1193558400000, + 1207472400000, + 1225008000000, + 1238922000000, + 1256457600000, + 1270371600000, + 1288508400000, + 1301817600000, + 1319958000000, + 1333267200000, + 1351407600000, + 1365321600000, + 1382857200000, + 1396771200000, + 1414306800000, + 1428220800000, + 1445756400000, + 1459670400000, + 1477810800000, + 1491120000000, + 1509260400000, + 1522569600000, + 1540710000000, + 1554624000000, + 1572159600000, + 1586073600000, + 1603609200000, + 1617523200000, + 1635663600000, + 1648972800000, + 1667113200000, + 1680422400000, + 1698562800000, + 1712476800000, + 1730012400000, + 1743926400000, + 1761462000000, + 1775376000000, + 1792911600000, + 1806825600000, + 1824966000000, + 1838275200000, + 1856415600000, + 1869724800000, + 1887865200000, + 1901779200000, + 1919314800000, + 1933228800000, + 1950764400000, + 1964678400000, + 1982818800000, + 1996128000000, + 2014268400000, + 2027577600000, + 2045718000000, + 2059027200000, + 2077167600000, + 2091081600000, + 2108617200000, + 2122531200000, + 2140066800000, + null + ], + "offsets": [ + 421, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 480, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 83739 + }, + { + "name": "America/Barbados", + "abbrs": [ + "LMT", + "BMT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -1451678491000, + -1199217691000, + 234943200000, + 244616400000, + 261554400000, + 276066000000, + 293004000000, + 307515600000, + 325058400000, + 338706000000, + null + ], + "offsets": [ + 238.4833, + 238.4833, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 284644 + }, + { + "name": "America/Belem", + "abbrs": [ + "LMT", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT" + ], + "untils": [ + -1767213964000, + -1206957600000, + -1191362400000, + -1175374800000, + -1159826400000, + -633819600000, + -622069200000, + -602283600000, + -591832800000, + -570747600000, + -560210400000, + -539125200000, + -531352800000, + -191365200000, + -184197600000, + -155163600000, + -150069600000, + -128898000000, + -121125600000, + -99954000000, + -89589600000, + -68418000000, + -57967200000, + 499748400000, + 511236000000, + 530593200000, + 540266400000, + 562129200000, + 571197600000, + null + ], + "offsets": [ + 193.9333, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 1979000 + }, + { + "name": "America/Belize", + "abbrs": [ + "LMT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CHDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1822500432000, + -1616954400000, + -1606069800000, + -1585504800000, + -1574015400000, + -1554055200000, + -1542565800000, + -1522605600000, + -1511116200000, + -1490551200000, + -1479666600000, + -1459101600000, + -1448217000000, + -1427652000000, + -1416162600000, + -1396202400000, + -1384713000000, + -1364752800000, + -1353263400000, + -1333303200000, + -1321813800000, + -1301248800000, + -1290364200000, + -1269799200000, + -1258914600000, + -1238349600000, + -1226860200000, + -1206900000000, + -1195410600000, + -1175450400000, + -1163961000000, + -1143396000000, + -1132511400000, + -1111946400000, + -1101061800000, + -1080496800000, + -1069612200000, + -1049047200000, + -1037557800000, + -1017597600000, + -1006108200000, + -986148000000, + -974658600000, + -954093600000, + -943209000000, + -922644000000, + -911759400000, + -891194400000, + -879705000000, + -859744800000, + -848255400000, + 123919200000, + 129618000000, + 409039200000, + 413874000000, + null + ], + "offsets": [ + 352.8, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 330, + 360, + 300, + 360, + 300, + 360 + ], + "population": 57169 + }, + { + "name": "America/Blanc-Sablon", + "abbrs": [ + "AST", + "ADT", + "AST", + "AWT", + "APT", + "AST" + ], + "untils": [ + -1632074400000, + -1615143600000, + -880221600000, + -769395600000, + -765399600000, + null + ], + "offsets": [ + 240, + 180, + 240, + 180, + 180, + 240 + ], + "population": 1118 + }, + { + "name": "America/Boa_Vista", + "abbrs": [ + "LMT", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT" + ], + "untils": [ + -1767211040000, + -1206954000000, + -1191358800000, + -1175371200000, + -1159822800000, + -633816000000, + -622065600000, + -602280000000, + -591829200000, + -570744000000, + -560206800000, + -539121600000, + -531349200000, + -191361600000, + -184194000000, + -155160000000, + -150066000000, + -128894400000, + -121122000000, + -99950400000, + -89586000000, + -68414400000, + -57963600000, + 499752000000, + 511239600000, + 530596800000, + 540270000000, + 562132800000, + 571201200000, + 938923200000, + 951620400000, + 970977600000, + 971578800000, + null + ], + "offsets": [ + 242.6667, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 6233 + }, + { + "name": "America/Bogota", + "abbrs": [ + "BMT", + "COT", + "COST", + "COT" + ], + "untils": [ + -1739041424000, + 704869200000, + 733896000000, + null + ], + "offsets": [ + 296.2667, + 300, + 240, + 300 + ], + "population": 8991000 + }, + { + "name": "America/Boise", + "abbrs": [ + "PST", + "PDT", + "PST", + "PDT", + "PST", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1633269600000, + -1615129200000, + -1601820000000, + -1583679600000, + -1471788000000, + -880210800000, + -769395600000, + -765388800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 129114000000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 480, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 214237 + }, + { + "name": "America/Buenos_Aires", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687927600000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1198983600000, + 1205632800000, + 1224385200000, + 1237082400000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 180, + 180, + 120, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Cambridge_Bay", + "abbrs": [ + "-00", + "MST", + "MWT", + "MPT", + "MST", + "MDDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "CST", + "CDT", + "EST", + "CST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1577923200000, + -880210800000, + -769395600000, + -765388800000, + -147891600000, + -131562000000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954662400000, + 972802800000, + 973400400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 0, + 420, + 360, + 360, + 420, + 300, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 300, + 300, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 1477 + }, + { + "name": "America/Campo_Grande", + "abbrs": [ + "LMT", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST" + ], + "untils": [ + -1767212492000, + -1206954000000, + -1191358800000, + -1175371200000, + -1159822800000, + -633816000000, + -622065600000, + -602280000000, + -591829200000, + -570744000000, + -560206800000, + -539121600000, + -531349200000, + -191361600000, + -184194000000, + -155160000000, + -150066000000, + -128894400000, + -121122000000, + -99950400000, + -89586000000, + -68414400000, + -57963600000, + 499752000000, + 511239600000, + 530596800000, + 540270000000, + 562132800000, + 571201200000, + 592977600000, + 602046000000, + 624427200000, + 634705200000, + 656481600000, + 666759600000, + 687931200000, + 697604400000, + 719985600000, + 728449200000, + 750830400000, + 761713200000, + 782280000000, + 793162800000, + 813729600000, + 824007600000, + 844574400000, + 856062000000, + 876110400000, + 888721200000, + 908078400000, + 919566000000, + 938923200000, + 951620400000, + 970977600000, + 982465200000, + 1003032000000, + 1013914800000, + 1036296000000, + 1045364400000, + 1066536000000, + 1076814000000, + 1099368000000, + 1108868400000, + 1129435200000, + 1140318000000, + 1162699200000, + 1172372400000, + 1192334400000, + 1203217200000, + 1224388800000, + 1234666800000, + 1255838400000, + 1266721200000, + 1287288000000, + 1298170800000, + 1318737600000, + 1330225200000, + 1350792000000, + 1361070000000, + 1382241600000, + 1392519600000, + 1413691200000, + 1424574000000, + 1445140800000, + 1456023600000, + 1476590400000, + 1487473200000, + 1508040000000, + 1518922800000, + 1540094400000, + 1550372400000, + 1571544000000, + 1581822000000, + 1602993600000, + 1613876400000, + 1634443200000, + 1645326000000, + 1665892800000, + 1677380400000, + 1697342400000, + 1708225200000, + 1729396800000, + 1739674800000, + 1760846400000, + 1771729200000, + 1792296000000, + 1803178800000, + 1823745600000, + 1834628400000, + 1855195200000, + 1866078000000, + 1887249600000, + 1897527600000, + 1918699200000, + 1928977200000, + 1950148800000, + 1960426800000, + 1981598400000, + 1992481200000, + 2013048000000, + 2024535600000, + 2044497600000, + 2055380400000, + 2076552000000, + 2086830000000, + 2108001600000, + 2118884400000, + 2139451200000, + null + ], + "offsets": [ + 218.4667, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180 + ], + "population": 774202 + }, + { + "name": "America/Cancun", + "abbrs": [ + "LMT", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST" + ], + "untils": [ + -1514743200000, + 377935200000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 902037600000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 989136000000, + 1001833200000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1175414400000, + 1193554800000, + 1207468800000, + 1225004400000, + 1238918400000, + 1256454000000, + 1270368000000, + 1288508400000, + 1301817600000, + 1319958000000, + 1333267200000, + 1351407600000, + 1365321600000, + 1382857200000, + 1396771200000, + 1414306800000, + 1422777600000, + null + ], + "offsets": [ + 347.0667, + 360, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300 + ], + "population": 628306 + }, + { + "name": "America/Caracas", + "abbrs": [ + "CMT", + "VET", + "VET", + "VET", + "VET" + ], + "untils": [ + -1826739140000, + -157750200000, + 1197183600000, + 1462086000000, + null + ], + "offsets": [ + 267.6667, + 270, + 240, + 270, + 240 + ], + "population": 2861000 + }, + { + "name": "America/Catamarca", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687931200000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1086058800000, + 1087704000000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Cayenne", + "abbrs": [ + "LMT", + "GFT", + "GFT" + ], + "untils": [ + -1846269040000, + -71092800000, + null + ], + "offsets": [ + 209.3333, + 240, + 180 + ], + "population": 58004 + }, + { + "name": "America/Cayman", + "abbrs": [ + "CMT", + "EST" + ], + "untils": [ + -1946918424000, + null + ], + "offsets": [ + 319.6, + 300 + ], + "population": 58435 + }, + { + "name": "America/Chicago", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -1563724800000, + -1551632400000, + -1538928000000, + -1520182800000, + -1504454400000, + -1491757200000, + -1473004800000, + -1459702800000, + -1441555200000, + -1428253200000, + -1410105600000, + -1396803600000, + -1378656000000, + -1365354000000, + -1347206400000, + -1333904400000, + -1315152000000, + -1301850000000, + -1283702400000, + -1270400400000, + -1252252800000, + -1238950800000, + -1220803200000, + -1207501200000, + -1189353600000, + -1176051600000, + -1157299200000, + -1144602000000, + -1125849600000, + -1112547600000, + -1094400000000, + -1081098000000, + -1067788800000, + -1045414800000, + -1031500800000, + -1018198800000, + -1000051200000, + -986749200000, + -967996800000, + -955299600000, + -936547200000, + -923245200000, + -905097600000, + -891795600000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -447267600000, + -431539200000, + -415818000000, + -400089600000, + -384368400000, + -368640000000, + -352918800000, + -337190400000, + -321469200000, + -305740800000, + -289414800000, + -273686400000, + -257965200000, + -242236800000, + -226515600000, + -210787200000, + -195066000000, + -179337600000, + -163616400000, + -147888000000, + -131562000000, + -116438400000, + -100112400000, + -84384000000, + -68662800000, + -52934400000, + -37213200000, + -21484800000, + -5763600000, + 9964800000, + 25686000000, + 41414400000, + 57740400000, + 73468800000, + 89190000000, + 104918400000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 702460800000, + 719996400000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986112000000, + 1004252400000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 9156000 + }, + { + "name": "America/Chihuahua", + "abbrs": [ + "LMT", + "MST", + "CST", + "MST", + "CST", + "MST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1514739600000, + -1343066400000, + -1234807200000, + -1220292000000, + -1207159200000, + -1191344400000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 989139600000, + 1001836800000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1175418000000, + 1193558400000, + 1207472400000, + 1225008000000, + 1238922000000, + 1256457600000, + 1270371600000, + 1288512000000, + 1301821200000, + 1319961600000, + 1333270800000, + 1351411200000, + 1365325200000, + 1382860800000, + 1396774800000, + 1414310400000, + 1428224400000, + 1445760000000, + 1459674000000, + 1477814400000, + 1491123600000, + 1509264000000, + 1522573200000, + 1540713600000, + 1554627600000, + 1572163200000, + 1586077200000, + 1603612800000, + 1617526800000, + 1635667200000, + 1648976400000, + 1667116800000, + 1680426000000, + 1698566400000, + 1712480400000, + 1730016000000, + 1743930000000, + 1761465600000, + 1775379600000, + 1792915200000, + 1806829200000, + 1824969600000, + 1838278800000, + 1856419200000, + 1869728400000, + 1887868800000, + 1901782800000, + 1919318400000, + 1933232400000, + 1950768000000, + 1964682000000, + 1982822400000, + 1996131600000, + 2014272000000, + 2027581200000, + 2045721600000, + 2059030800000, + 2077171200000, + 2091085200000, + 2108620800000, + 2122534800000, + 2140070400000, + null + ], + "offsets": [ + 424.3333, + 420, + 360, + 420, + 360, + 420, + 360, + 300, + 360, + 300, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 809232 + }, + { + "name": "America/Coral_Harbour", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CWT", + "CPT", + "EST" + ], + "untils": [ + -1632067200000, + -1615136400000, + -923248800000, + -880214400000, + -769395600000, + -765392400000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 300, + 300, + 300 + ], + "population": 0 + }, + { + "name": "America/Cordoba", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687931200000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1198983600000, + 1205632800000, + 1224385200000, + 1237082400000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 120, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Costa_Rica", + "abbrs": [ + "SJMT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1545071027000, + 288770400000, + 297234000000, + 320220000000, + 328683600000, + 664264800000, + 678344400000, + 695714400000, + 700635600000, + null + ], + "offsets": [ + 336.2167, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 1170000 + }, + { + "name": "America/Creston", + "abbrs": [ + "MST", + "PST", + "MST" + ], + "untils": [ + -1680454800000, + -1627833600000, + null + ], + "offsets": [ + 420, + 480, + 420 + ], + "population": 5306 + }, + { + "name": "America/Cuiaba", + "abbrs": [ + "LMT", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST" + ], + "untils": [ + -1767212140000, + -1206954000000, + -1191358800000, + -1175371200000, + -1159822800000, + -633816000000, + -622065600000, + -602280000000, + -591829200000, + -570744000000, + -560206800000, + -539121600000, + -531349200000, + -191361600000, + -184194000000, + -155160000000, + -150066000000, + -128894400000, + -121122000000, + -99950400000, + -89586000000, + -68414400000, + -57963600000, + 499752000000, + 511239600000, + 530596800000, + 540270000000, + 562132800000, + 571201200000, + 592977600000, + 602046000000, + 624427200000, + 634705200000, + 656481600000, + 666759600000, + 687931200000, + 697604400000, + 719985600000, + 728449200000, + 750830400000, + 761713200000, + 782280000000, + 793162800000, + 813729600000, + 824007600000, + 844574400000, + 856062000000, + 876110400000, + 888721200000, + 908078400000, + 919566000000, + 938923200000, + 951620400000, + 970977600000, + 982465200000, + 1003032000000, + 1013914800000, + 1036296000000, + 1045364400000, + 1099368000000, + 1108868400000, + 1129435200000, + 1140318000000, + 1162699200000, + 1172372400000, + 1192334400000, + 1203217200000, + 1224388800000, + 1234666800000, + 1255838400000, + 1266721200000, + 1287288000000, + 1298170800000, + 1318737600000, + 1330225200000, + 1350792000000, + 1361070000000, + 1382241600000, + 1392519600000, + 1413691200000, + 1424574000000, + 1445140800000, + 1456023600000, + 1476590400000, + 1487473200000, + 1508040000000, + 1518922800000, + 1540094400000, + 1550372400000, + 1571544000000, + 1581822000000, + 1602993600000, + 1613876400000, + 1634443200000, + 1645326000000, + 1665892800000, + 1677380400000, + 1697342400000, + 1708225200000, + 1729396800000, + 1739674800000, + 1760846400000, + 1771729200000, + 1792296000000, + 1803178800000, + 1823745600000, + 1834628400000, + 1855195200000, + 1866078000000, + 1887249600000, + 1897527600000, + 1918699200000, + 1928977200000, + 1950148800000, + 1960426800000, + 1981598400000, + 1992481200000, + 2013048000000, + 2024535600000, + 2044497600000, + 2055380400000, + 2076552000000, + 2086830000000, + 2108001600000, + 2118884400000, + 2139451200000, + null + ], + "offsets": [ + 224.3333, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180 + ], + "population": 542861 + }, + { + "name": "America/Curacao", + "abbrs": [ + "LMT", + "ANT", + "AST" + ], + "untils": [ + -1826738653000, + -157750200000, + null + ], + "offsets": [ + 275.7833, + 270, + 240 + ], + "population": 153500 + }, + { + "name": "America/Danmarkshavn", + "abbrs": [ + "LMT", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "GMT" + ], + "untils": [ + -1686091520000, + 323845200000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 820465200000, + null + ], + "offsets": [ + 74.6667, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 0 + ], + "population": 8 + }, + { + "name": "America/Dawson", + "abbrs": [ + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YWT", + "YPT", + "YST", + "YDDT", + "YST", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1632056400000, + -1615125600000, + -1596978000000, + -1583164800000, + -880203600000, + -769395600000, + -765381600000, + -147884400000, + -131554800000, + 120646800000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 540, + 480, + 540, + 480, + 540, + 480, + 480, + 540, + 420, + 540, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 1319 + }, + { + "name": "America/Dawson_Creek", + "abbrs": [ + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "MST" + ], + "untils": [ + -1632060000000, + -1615129200000, + -880207200000, + -769395600000, + -765385200000, + -715788000000, + -702486000000, + -684338400000, + -671036400000, + -652888800000, + -639586800000, + -620834400000, + -608137200000, + -589384800000, + -576082800000, + -557935200000, + -544633200000, + -526485600000, + -513183600000, + -495036000000, + -481734000000, + -463586400000, + -450284400000, + -431532000000, + -418230000000, + -400082400000, + -386780400000, + -368632800000, + -355330800000, + -337183200000, + -323881200000, + -305733600000, + -292431600000, + -273679200000, + -260982000000, + -242229600000, + -226508400000, + -210780000000, + -195058800000, + -179330400000, + -163609200000, + -147880800000, + -131554800000, + -116431200000, + -100105200000, + -84376800000, + -68655600000, + -52927200000, + -37206000000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 84013200000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 420 + ], + "population": 11583 + }, + { + "name": "America/Denver", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -1570374000000, + -1551628800000, + -1538924400000, + -1534089600000, + -880210800000, + -769395600000, + -765388800000, + -147884400000, + -131558400000, + -116434800000, + -100108800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 126694800000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 2559000 + }, + { + "name": "America/Detroit", + "abbrs": [ + "LMT", + "CST", + "EST", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -2051202469000, + -1724083200000, + -880218000000, + -769395600000, + -765396000000, + -684349200000, + -671047200000, + -80499600000, + -68666400000, + 104914800000, + 120636000000, + 126687600000, + 152085600000, + 167814000000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 332.1833, + 360, + 300, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 3672000 + }, + { + "name": "America/Dominica", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Edmonton", + "abbrs": [ + "LMT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1998663968000, + -1632063600000, + -1615132800000, + -1600614000000, + -1596816000000, + -1567954800000, + -1551628800000, + -1536505200000, + -1523203200000, + -1504450800000, + -1491753600000, + -1473001200000, + -1459699200000, + -880210800000, + -769395600000, + -765388800000, + -715791600000, + -702489600000, + -84380400000, + -68659200000, + -21481200000, + -5760000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 136371600000, + 152092800000, + 167821200000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 453.8667, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 1040000 + }, + { + "name": "America/Eirunepe", + "abbrs": [ + "LMT", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "AMT", + "ACT" + ], + "untils": [ + -1767208832000, + -1206950400000, + -1191355200000, + -1175367600000, + -1159819200000, + -633812400000, + -622062000000, + -602276400000, + -591825600000, + -570740400000, + -560203200000, + -539118000000, + -531345600000, + -191358000000, + -184190400000, + -155156400000, + -150062400000, + -128890800000, + -121118400000, + -99946800000, + -89582400000, + -68410800000, + -57960000000, + 499755600000, + 511243200000, + 530600400000, + 540273600000, + 562136400000, + 571204800000, + 750834000000, + 761716800000, + 1214283600000, + 1384056000000, + null + ], + "offsets": [ + 279.4667, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 30901 + }, + { + "name": "America/El_Salvador", + "abbrs": [ + "LMT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1546279392000, + 547020000000, + 559717200000, + 578469600000, + 591166800000, + null + ], + "offsets": [ + 356.8, + 360, + 300, + 360, + 300, + 360 + ], + "population": 1100000 + }, + { + "name": "America/Ensenada", + "abbrs": [ + "LMT", + "MST", + "PST", + "MST", + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1514736000000, + -1451667600000, + -1343062800000, + -1234803600000, + -1222963200000, + -1207242000000, + -873820800000, + -769395600000, + -761677200000, + -686073600000, + -661539600000, + -495039600000, + -481734000000, + -463590000000, + -450284400000, + -431535600000, + -418230000000, + -400086000000, + -386780400000, + -368636400000, + -355330800000, + -337186800000, + -323881200000, + -305737200000, + -292431600000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1175421600000, + 1193562000000, + 1207476000000, + 1225011600000, + 1238925600000, + 1256461200000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 468.0667, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 0 + }, + { + "name": "America/Fort_Nelson", + "abbrs": [ + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "MST" + ], + "untils": [ + -1632060000000, + -1615129200000, + -880207200000, + -769395600000, + -765385200000, + -715788000000, + -702486000000, + -684338400000, + -671036400000, + -652888800000, + -639586800000, + -620834400000, + -608137200000, + -589384800000, + -576082800000, + -557935200000, + -544633200000, + -526485600000, + -513183600000, + -495036000000, + -481734000000, + -463586400000, + -450284400000, + -431532000000, + -418230000000, + -400082400000, + -386780400000, + -368632800000, + -355330800000, + -337183200000, + -323881200000, + -305733600000, + -292431600000, + -273679200000, + -260982000000, + -242229600000, + -226508400000, + -210780000000, + -195058800000, + -179330400000, + -163609200000, + -147880800000, + -131554800000, + -116431200000, + -100105200000, + -84376800000, + -68655600000, + -52927200000, + -37206000000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 136375200000, + 152096400000, + 167824800000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420 + ], + "population": 3902 + }, + { + "name": "America/Fort_Wayne", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -900259200000, + -891795600000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -386787600000, + -368640000000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Fortaleza", + "abbrs": [ + "LMT", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT" + ], + "untils": [ + -1767216360000, + -1206957600000, + -1191362400000, + -1175374800000, + -1159826400000, + -633819600000, + -622069200000, + -602283600000, + -591832800000, + -570747600000, + -560210400000, + -539125200000, + -531352800000, + -191365200000, + -184197600000, + -155163600000, + -150069600000, + -128898000000, + -121125600000, + -99954000000, + -89589600000, + -68418000000, + -57967200000, + 499748400000, + 511236000000, + 530593200000, + 540266400000, + 562129200000, + 571197600000, + 592974000000, + 602042400000, + 624423600000, + 634701600000, + 938919600000, + 951616800000, + 970974000000, + 972180000000, + 1003028400000, + 1013911200000, + null + ], + "offsets": [ + 154, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 3401000 + }, + { + "name": "America/Glace_Bay", + "abbrs": [ + "LMT", + "AST", + "ADT", + "AST", + "AWT", + "APT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -2131646412000, + -1632074400000, + -1615143600000, + -880221600000, + -769395600000, + -765399600000, + -526500000000, + -513198000000, + 73461600000, + 89182800000, + 104911200000, + 120632400000, + 136360800000, + 152082000000, + 167810400000, + 183531600000, + 199260000000, + 215586000000, + 230709600000, + 247035600000, + 262764000000, + 278485200000, + 294213600000, + 309934800000, + 325663200000, + 341384400000, + 357112800000, + 372834000000, + 388562400000, + 404888400000, + 420012000000, + 436338000000, + 452066400000, + 467787600000, + 483516000000, + 499237200000, + 514965600000, + 530686800000, + 544600800000, + 562136400000, + 576050400000, + 594190800000, + 607500000000, + 625640400000, + 638949600000, + 657090000000, + 671004000000, + 688539600000, + 702453600000, + 719989200000, + 733903200000, + 752043600000, + 765352800000, + 783493200000, + 796802400000, + 814942800000, + 828856800000, + 846392400000, + 860306400000, + 877842000000, + 891756000000, + 909291600000, + 923205600000, + 941346000000, + 954655200000, + 972795600000, + 986104800000, + 1004245200000, + 1018159200000, + 1035694800000, + 1049608800000, + 1067144400000, + 1081058400000, + 1099198800000, + 1112508000000, + 1130648400000, + 1143957600000, + 1162098000000, + 1173592800000, + 1194152400000, + 1205042400000, + 1225602000000, + 1236492000000, + 1257051600000, + 1268546400000, + 1289106000000, + 1299996000000, + 1320555600000, + 1331445600000, + 1352005200000, + 1362895200000, + 1383454800000, + 1394344800000, + 1414904400000, + 1425794400000, + 1446354000000, + 1457848800000, + 1478408400000, + 1489298400000, + 1509858000000, + 1520748000000, + 1541307600000, + 1552197600000, + 1572757200000, + 1583647200000, + 1604206800000, + 1615701600000, + 1636261200000, + 1647151200000, + 1667710800000, + 1678600800000, + 1699160400000, + 1710050400000, + 1730610000000, + 1741500000000, + 1762059600000, + 1772949600000, + 1793509200000, + 1805004000000, + 1825563600000, + 1836453600000, + 1857013200000, + 1867903200000, + 1888462800000, + 1899352800000, + 1919912400000, + 1930802400000, + 1951362000000, + 1962856800000, + 1983416400000, + 1994306400000, + 2014866000000, + 2025756000000, + 2046315600000, + 2057205600000, + 2077765200000, + 2088655200000, + 2109214800000, + 2120104800000, + 2140664400000, + null + ], + "offsets": [ + 239.8, + 240, + 180, + 240, + 180, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 19076 + }, + { + "name": "America/Godthab", + "abbrs": [ + "LMT", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT", + "WGST", + "WGT" + ], + "untils": [ + -1686083584000, + 323845200000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 206.9333, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 16583 + }, + { + "name": "America/Goose_Bay", + "abbrs": [ + "NST", + "NDT", + "NST", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NWT", + "NPT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADDT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -1632076148000, + -1615145348000, + -1096921748000, + -1061670600000, + -1048973400000, + -1030221000000, + -1017523800000, + -998771400000, + -986074200000, + -966717000000, + -954624600000, + -935267400000, + -922570200000, + -903817800000, + -891120600000, + -872368200000, + -769395600000, + -765401400000, + -746044200000, + -733347000000, + -714594600000, + -701897400000, + -683145000000, + -670447800000, + -651695400000, + -638998200000, + -619641000000, + -606943800000, + -589401000000, + -576099000000, + -557951400000, + -544649400000, + -526501800000, + -513199800000, + -495052200000, + -481750200000, + -463602600000, + -450300600000, + -431548200000, + -418246200000, + -400098600000, + -386796600000, + -368649000000, + -355347000000, + -337199400000, + -323897400000, + -305749800000, + -289423800000, + -273695400000, + -257974200000, + -242245800000, + -226524600000, + -210796200000, + -195075000000, + -179346600000, + -163625400000, + -147897000000, + -131571000000, + -119903400000, + -116445600000, + -100119600000, + -84391200000, + -68670000000, + -52941600000, + -37220400000, + -21492000000, + -5770800000, + 9957600000, + 25678800000, + 41407200000, + 57733200000, + 73461600000, + 89182800000, + 104911200000, + 120632400000, + 136360800000, + 152082000000, + 167810400000, + 183531600000, + 199260000000, + 215586000000, + 230709600000, + 247035600000, + 262764000000, + 278485200000, + 294213600000, + 309934800000, + 325663200000, + 341384400000, + 357112800000, + 372834000000, + 388562400000, + 404888400000, + 420012000000, + 436338000000, + 452066400000, + 467787600000, + 483516000000, + 499237200000, + 514965600000, + 530686800000, + 544593660000, + 562129260000, + 576043260000, + 594180060000, + 607492860000, + 625633260000, + 638942460000, + 657082860000, + 670996860000, + 688532460000, + 702446460000, + 719982060000, + 733896060000, + 752036460000, + 765345660000, + 783486060000, + 796795260000, + 814935660000, + 828849660000, + 846385260000, + 860299260000, + 877834860000, + 891748860000, + 909284460000, + 923198460000, + 941338860000, + 954648060000, + 972788460000, + 986097660000, + 1004238060000, + 1018152060000, + 1035687660000, + 1049601660000, + 1067137260000, + 1081051260000, + 1099191660000, + 1112500860000, + 1130641260000, + 1143950460000, + 1162090860000, + 1173585660000, + 1194145260000, + 1205035260000, + 1225594860000, + 1236484860000, + 1257044460000, + 1268539260000, + 1289098860000, + 1299988860000, + 1320555600000, + 1331445600000, + 1352005200000, + 1362895200000, + 1383454800000, + 1394344800000, + 1414904400000, + 1425794400000, + 1446354000000, + 1457848800000, + 1478408400000, + 1489298400000, + 1509858000000, + 1520748000000, + 1541307600000, + 1552197600000, + 1572757200000, + 1583647200000, + 1604206800000, + 1615701600000, + 1636261200000, + 1647151200000, + 1667710800000, + 1678600800000, + 1699160400000, + 1710050400000, + 1730610000000, + 1741500000000, + 1762059600000, + 1772949600000, + 1793509200000, + 1805004000000, + 1825563600000, + 1836453600000, + 1857013200000, + 1867903200000, + 1888462800000, + 1899352800000, + 1919912400000, + 1930802400000, + 1951362000000, + 1962856800000, + 1983416400000, + 1994306400000, + 2014866000000, + 2025756000000, + 2046315600000, + 2057205600000, + 2077765200000, + 2088655200000, + 2109214800000, + 2120104800000, + 2140664400000, + null + ], + "offsets": [ + 210.8667, + 150.8667, + 210.8667, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 120, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 7552 + }, + { + "name": "America/Grand_Turk", + "abbrs": [ + "KMT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "AST" + ], + "untils": [ + -1827687169000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + null + ], + "offsets": [ + 307.1833, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 240 + ], + "population": 3720 + }, + { + "name": "America/Grenada", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Guadeloupe", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Guatemala", + "abbrs": [ + "LMT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1617040676000, + 123055200000, + 130914000000, + 422344800000, + 433054800000, + 669708000000, + 684219600000, + 1146376800000, + 1159678800000, + null + ], + "offsets": [ + 362.0667, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 1289000 + }, + { + "name": "America/Guayaquil", + "abbrs": [ + "QMT", + "ECT" + ], + "untils": [ + -1230749160000, + null + ], + "offsets": [ + 314, + 300 + ], + "population": 2700000 + }, + { + "name": "America/Guyana", + "abbrs": [ + "LMT", + "GBGT", + "GYT", + "GYT", + "GYT" + ], + "untils": [ + -1730578040000, + -113688900000, + 176010300000, + 662698800000, + null + ], + "offsets": [ + 232.6667, + 225, + 225, + 180, + 240 + ], + "population": 799613 + }, + { + "name": "America/Halifax", + "abbrs": [ + "LMT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "AWT", + "APT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -2131645536000, + -1696276800000, + -1680469200000, + -1632074400000, + -1615143600000, + -1566763200000, + -1557090000000, + -1535486400000, + -1524949200000, + -1504468800000, + -1493413200000, + -1472414400000, + -1461963600000, + -1440964800000, + -1429390800000, + -1409515200000, + -1396731600000, + -1376856000000, + -1366491600000, + -1346616000000, + -1333832400000, + -1313956800000, + -1303678800000, + -1282507200000, + -1272661200000, + -1251057600000, + -1240088400000, + -1219608000000, + -1207429200000, + -1188763200000, + -1175979600000, + -1157313600000, + -1143925200000, + -1124049600000, + -1113771600000, + -1091390400000, + -1081026000000, + -1059854400000, + -1050786000000, + -1030910400000, + -1018126800000, + -999460800000, + -986677200000, + -965592000000, + -955227600000, + -935956800000, + -923173200000, + -904507200000, + -891723600000, + -880221600000, + -769395600000, + -765399600000, + -747252000000, + -733950000000, + -715802400000, + -702500400000, + -684352800000, + -671050800000, + -652903200000, + -639601200000, + -589399200000, + -576097200000, + -557949600000, + -544647600000, + -526500000000, + -513198000000, + -495050400000, + -481748400000, + -431546400000, + -418244400000, + -400096800000, + -386794800000, + -368647200000, + -355345200000, + -337197600000, + -323895600000, + -242244000000, + -226522800000, + -210794400000, + -195073200000, + -179344800000, + -163623600000, + -147895200000, + -131569200000, + -116445600000, + -100119600000, + -84391200000, + -68670000000, + -52941600000, + -37220400000, + -21492000000, + -5770800000, + 9957600000, + 25678800000, + 41407200000, + 57733200000, + 73461600000, + 89182800000, + 104911200000, + 120632400000, + 136360800000, + 152082000000, + 167810400000, + 183531600000, + 199260000000, + 215586000000, + 230709600000, + 247035600000, + 262764000000, + 278485200000, + 294213600000, + 309934800000, + 325663200000, + 341384400000, + 357112800000, + 372834000000, + 388562400000, + 404888400000, + 420012000000, + 436338000000, + 452066400000, + 467787600000, + 483516000000, + 499237200000, + 514965600000, + 530686800000, + 544600800000, + 562136400000, + 576050400000, + 594190800000, + 607500000000, + 625640400000, + 638949600000, + 657090000000, + 671004000000, + 688539600000, + 702453600000, + 719989200000, + 733903200000, + 752043600000, + 765352800000, + 783493200000, + 796802400000, + 814942800000, + 828856800000, + 846392400000, + 860306400000, + 877842000000, + 891756000000, + 909291600000, + 923205600000, + 941346000000, + 954655200000, + 972795600000, + 986104800000, + 1004245200000, + 1018159200000, + 1035694800000, + 1049608800000, + 1067144400000, + 1081058400000, + 1099198800000, + 1112508000000, + 1130648400000, + 1143957600000, + 1162098000000, + 1173592800000, + 1194152400000, + 1205042400000, + 1225602000000, + 1236492000000, + 1257051600000, + 1268546400000, + 1289106000000, + 1299996000000, + 1320555600000, + 1331445600000, + 1352005200000, + 1362895200000, + 1383454800000, + 1394344800000, + 1414904400000, + 1425794400000, + 1446354000000, + 1457848800000, + 1478408400000, + 1489298400000, + 1509858000000, + 1520748000000, + 1541307600000, + 1552197600000, + 1572757200000, + 1583647200000, + 1604206800000, + 1615701600000, + 1636261200000, + 1647151200000, + 1667710800000, + 1678600800000, + 1699160400000, + 1710050400000, + 1730610000000, + 1741500000000, + 1762059600000, + 1772949600000, + 1793509200000, + 1805004000000, + 1825563600000, + 1836453600000, + 1857013200000, + 1867903200000, + 1888462800000, + 1899352800000, + 1919912400000, + 1930802400000, + 1951362000000, + 1962856800000, + 1983416400000, + 1994306400000, + 2014866000000, + 2025756000000, + 2046315600000, + 2057205600000, + 2077765200000, + 2088655200000, + 2109214800000, + 2120104800000, + 2140664400000, + null + ], + "offsets": [ + 254.4, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 390095 + }, + { + "name": "America/Havana", + "abbrs": [ + "HMT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1402813824000, + -1311534000000, + -1300996800000, + -933534000000, + -925675200000, + -902084400000, + -893620800000, + -870030000000, + -862171200000, + -775681200000, + -767822400000, + -744231600000, + -736372800000, + -144702000000, + -134251200000, + -113425200000, + -102542400000, + -86295600000, + -72907200000, + -54154800000, + -41457600000, + -21495600000, + -5774400000, + 9954000000, + 25675200000, + 41403600000, + 57729600000, + 73458000000, + 87364800000, + 104907600000, + 118900800000, + 136357200000, + 150436800000, + 167806800000, + 183528000000, + 199256400000, + 215582400000, + 230706000000, + 247032000000, + 263365200000, + 276667200000, + 290581200000, + 308721600000, + 322030800000, + 340171200000, + 358318800000, + 371620800000, + 389768400000, + 403070400000, + 421218000000, + 434520000000, + 452667600000, + 466574400000, + 484117200000, + 498024000000, + 511333200000, + 529473600000, + 542782800000, + 560923200000, + 574837200000, + 592372800000, + 606286800000, + 623822400000, + 638946000000, + 655876800000, + 671000400000, + 687330000000, + 702450000000, + 718779600000, + 733899600000, + 750229200000, + 765349200000, + 781678800000, + 796798800000, + 813128400000, + 828853200000, + 844578000000, + 860302800000, + 876632400000, + 891147600000, + 909291600000, + 922597200000, + 941346000000, + 954651600000, + 972795600000, + 986101200000, + 1004245200000, + 1018155600000, + 1035694800000, + 1049605200000, + 1067144400000, + 1080450000000, + 1162098000000, + 1173589200000, + 1193547600000, + 1205643600000, + 1224997200000, + 1236488400000, + 1256446800000, + 1268542800000, + 1288501200000, + 1300597200000, + 1321160400000, + 1333256400000, + 1352005200000, + 1362891600000, + 1383454800000, + 1394341200000, + 1414904400000, + 1425790800000, + 1446354000000, + 1457845200000, + 1478408400000, + 1489294800000, + 1509858000000, + 1520744400000, + 1541307600000, + 1552194000000, + 1572757200000, + 1583643600000, + 1604206800000, + 1615698000000, + 1636261200000, + 1647147600000, + 1667710800000, + 1678597200000, + 1699160400000, + 1710046800000, + 1730610000000, + 1741496400000, + 1762059600000, + 1772946000000, + 1793509200000, + 1805000400000, + 1825563600000, + 1836450000000, + 1857013200000, + 1867899600000, + 1888462800000, + 1899349200000, + 1919912400000, + 1930798800000, + 1951362000000, + 1962853200000, + 1983416400000, + 1994302800000, + 2014866000000, + 2025752400000, + 2046315600000, + 2057202000000, + 2077765200000, + 2088651600000, + 2109214800000, + 2120101200000, + 2140664400000, + null + ], + "offsets": [ + 329.6, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 2130000 + }, + { + "name": "America/Hermosillo", + "abbrs": [ + "LMT", + "MST", + "CST", + "MST", + "CST", + "MST", + "CST", + "MST", + "PST", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1514739600000, + -1343066400000, + -1234807200000, + -1220292000000, + -1207159200000, + -1191344400000, + -873828000000, + -661539600000, + 28800000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + null + ], + "offsets": [ + 443.8667, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 480, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 641791 + }, + { + "name": "America/Indiana/Indianapolis", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -900259200000, + -891795600000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -386787600000, + -368640000000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Indiana/Knox", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -447267600000, + -431539200000, + -415818000000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -321469200000, + -305740800000, + -289414800000, + -273686400000, + -257965200000, + -242236800000, + -195066000000, + -84384000000, + -68662800000, + -52934400000, + -37213200000, + -21484800000, + -5763600000, + 9964800000, + 25686000000, + 41414400000, + 57740400000, + 73468800000, + 89190000000, + 104918400000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 1143961200000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "America/Indiana/Marengo", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -589392000000, + -576090000000, + -495043200000, + -481741200000, + -463593600000, + -450291600000, + -431539200000, + -418237200000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -323888400000, + -305740800000, + -292438800000, + -273686400000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 126687600000, + 152089200000, + 162370800000, + 183535200000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Indiana/Petersburg", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "CDT", + "CST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -462996000000, + -450291600000, + -431539200000, + -418237200000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -323888400000, + -305740800000, + -292438800000, + -273686400000, + -257965200000, + -242236800000, + -226515600000, + -210787200000, + -195066000000, + -179337600000, + -163616400000, + -147888000000, + -100112400000, + -84384000000, + -68662800000, + -52934400000, + -37213200000, + -21484800000, + -5763600000, + 9964800000, + 25686000000, + 41414400000, + 57740400000, + 73468800000, + 89190000000, + 104918400000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 1143961200000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 300, + 360, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Indiana/Tell_City", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -462996000000, + -450291600000, + -431539200000, + -418237200000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -323888400000, + -305740800000, + -289414800000, + -273686400000, + -260989200000, + -242236800000, + -226515600000, + -210787200000, + -195066000000, + -179337600000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 1143961200000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "America/Indiana/Vevay", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -495043200000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Indiana/Vincennes", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "CDT", + "CST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -462996000000, + -450291600000, + -431539200000, + -418237200000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -323888400000, + -305740800000, + -289414800000, + -273686400000, + -260989200000, + -242236800000, + -226515600000, + -210787200000, + -195066000000, + -179337600000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 1143961200000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 300, + 360, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Indiana/Winamac", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "CDT", + "CST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -447267600000, + -431539200000, + -415818000000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -323888400000, + -305740800000, + -292438800000, + -273686400000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 1143961200000, + 1162105200000, + 1173600000000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 300, + 360, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Indianapolis", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -900259200000, + -891795600000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -386787600000, + -368640000000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Inuvik", + "abbrs": [ + "-00", + "PST", + "PDDT", + "PST", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -536457600000, + -147888000000, + -131558400000, + 294228000000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 0, + 480, + 360, + 480, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 3463 + }, + { + "name": "America/Iqaluit", + "abbrs": [ + "-00", + "EWT", + "EPT", + "EST", + "EDDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "CST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -865296000000, + -769395600000, + -765396000000, + -147898800000, + -131569200000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954662400000, + 972802800000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 0, + 240, + 240, + 300, + 180, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 360, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 6699 + }, + { + "name": "America/Jamaica", + "abbrs": [ + "KMT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1827687169000, + 126687600000, + 152085600000, + 162370800000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + null + ], + "offsets": [ + 307.1833, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 937700 + }, + { + "name": "America/Jujuy", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "WARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 657086400000, + 669178800000, + 686721600000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 180, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Juneau", + "abbrs": [ + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "YDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "YST", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST" + ], + "untils": [ + -880207200000, + -769395600000, + -765385200000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 126698400000, + 152096400000, + 162381600000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341402400000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 439030800000, + 452084400000, + 467805600000, + 483534000000, + 499255200000, + 514983600000, + 530704800000, + 544618800000, + 562154400000, + 576068400000, + 594208800000, + 607518000000, + 625658400000, + 638967600000, + 657108000000, + 671022000000, + 688557600000, + 702471600000, + 720007200000, + 733921200000, + 752061600000, + 765370800000, + 783511200000, + 796820400000, + 814960800000, + 828874800000, + 846410400000, + 860324400000, + 877860000000, + 891774000000, + 909309600000, + 923223600000, + 941364000000, + 954673200000, + 972813600000, + 986122800000, + 1004263200000, + 1018177200000, + 1035712800000, + 1049626800000, + 1067162400000, + 1081076400000, + 1099216800000, + 1112526000000, + 1130666400000, + 1143975600000, + 1162116000000, + 1173610800000, + 1194170400000, + 1205060400000, + 1225620000000, + 1236510000000, + 1257069600000, + 1268564400000, + 1289124000000, + 1300014000000, + 1320573600000, + 1331463600000, + 1352023200000, + 1362913200000, + 1383472800000, + 1394362800000, + 1414922400000, + 1425812400000, + 1446372000000, + 1457866800000, + 1478426400000, + 1489316400000, + 1509876000000, + 1520766000000, + 1541325600000, + 1552215600000, + 1572775200000, + 1583665200000, + 1604224800000, + 1615719600000, + 1636279200000, + 1647169200000, + 1667728800000, + 1678618800000, + 1699178400000, + 1710068400000, + 1730628000000, + 1741518000000, + 1762077600000, + 1772967600000, + 1793527200000, + 1805022000000, + 1825581600000, + 1836471600000, + 1857031200000, + 1867921200000, + 1888480800000, + 1899370800000, + 1919930400000, + 1930820400000, + 1951380000000, + 1962874800000, + 1983434400000, + 1994324400000, + 2014884000000, + 2025774000000, + 2046333600000, + 2057223600000, + 2077783200000, + 2088673200000, + 2109232800000, + 2120122800000, + 2140682400000, + null + ], + "offsets": [ + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 480, + 480, + 420, + 480, + 420, + 480, + 420, + 540, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540 + ], + "population": 32660 + }, + { + "name": "America/Kentucky/Louisville", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -1535904000000, + -1525280400000, + -905097600000, + -891795600000, + -880214400000, + -769395600000, + -765392400000, + -757360800000, + -744224400000, + -715795200000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -450291600000, + -431539200000, + -415818000000, + -400089600000, + -384368400000, + -368640000000, + -352918800000, + -337190400000, + -321469200000, + -305740800000, + -289414800000, + -273686400000, + -266432400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 126687600000, + 152089200000, + 162370800000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Kentucky/Monticello", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -52934400000, + -37213200000, + -21484800000, + -5763600000, + 9964800000, + 25686000000, + 41414400000, + 57740400000, + 73468800000, + 89190000000, + 104918400000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 702460800000, + 719996400000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Knox_IN", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -447267600000, + -431539200000, + -415818000000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -321469200000, + -305740800000, + -289414800000, + -273686400000, + -257965200000, + -242236800000, + -195066000000, + -84384000000, + -68662800000, + -52934400000, + -37213200000, + -21484800000, + -5763600000, + 9964800000, + 25686000000, + 41414400000, + 57740400000, + 73468800000, + 89190000000, + 104918400000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 1143961200000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "America/Kralendijk", + "abbrs": [ + "LMT", + "ANT", + "AST" + ], + "untils": [ + -1826738653000, + -157750200000, + null + ], + "offsets": [ + 275.7833, + 270, + 240 + ], + "population": 0 + }, + { + "name": "America/La_Paz", + "abbrs": [ + "CMT", + "BOST", + "BOT" + ], + "untils": [ + -1205954844000, + -1192307244000, + null + ], + "offsets": [ + 272.6, + 212.6, + 240 + ], + "population": 1907000 + }, + { + "name": "America/Lima", + "abbrs": [ + "LMT", + "PET", + "PEST", + "PET", + "PEST", + "PET", + "PEST", + "PET", + "PEST", + "PET", + "PEST", + "PET", + "PEST", + "PET", + "PEST", + "PET" + ], + "untils": [ + -1938538284000, + -1009825200000, + -1002052800000, + -986756400000, + -971035200000, + -955306800000, + -939585600000, + 504939600000, + 512712000000, + 536475600000, + 544248000000, + 631170000000, + 638942400000, + 757400400000, + 765172800000, + null + ], + "offsets": [ + 308.6, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 10750000 + }, + { + "name": "America/Los_Angeles", + "abbrs": [ + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1633269600000, + -1615129200000, + -1601820000000, + -1583679600000, + -880207200000, + -769395600000, + -765385200000, + -687967140000, + -662655600000, + -620838000000, + -608137200000, + -589388400000, + -576082800000, + -557938800000, + -544633200000, + -526489200000, + -513183600000, + -495039600000, + -481734000000, + -463590000000, + -450284400000, + -431535600000, + -418230000000, + -400086000000, + -386780400000, + -368636400000, + -355330800000, + -337186800000, + -323881200000, + -305737200000, + -292431600000, + -273682800000, + -260982000000, + -242233200000, + -226508400000, + -210783600000, + -195058800000, + -179334000000, + -163609200000, + -147884400000, + -131554800000, + -116434800000, + -100105200000, + -84376800000, + -68655600000, + -52927200000, + -37206000000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 126698400000, + 152096400000, + 162381600000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 15058000 + }, + { + "name": "America/Louisville", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -1535904000000, + -1525280400000, + -905097600000, + -891795600000, + -880214400000, + -769395600000, + -765392400000, + -757360800000, + -744224400000, + -715795200000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -450291600000, + -431539200000, + -415818000000, + -400089600000, + -384368400000, + -368640000000, + -352918800000, + -337190400000, + -321469200000, + -305740800000, + -289414800000, + -273686400000, + -266432400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 126687600000, + 152089200000, + 162370800000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Lower_Princes", + "abbrs": [ + "LMT", + "ANT", + "AST" + ], + "untils": [ + -1826738653000, + -157750200000, + null + ], + "offsets": [ + 275.7833, + 270, + 240 + ], + "population": 0 + }, + { + "name": "America/Maceio", + "abbrs": [ + "LMT", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT" + ], + "untils": [ + -1767217028000, + -1206957600000, + -1191362400000, + -1175374800000, + -1159826400000, + -633819600000, + -622069200000, + -602283600000, + -591832800000, + -570747600000, + -560210400000, + -539125200000, + -531352800000, + -191365200000, + -184197600000, + -155163600000, + -150069600000, + -128898000000, + -121125600000, + -99954000000, + -89589600000, + -68418000000, + -57967200000, + 499748400000, + 511236000000, + 530593200000, + 540266400000, + 562129200000, + 571197600000, + 592974000000, + 602042400000, + 624423600000, + 634701600000, + 813726000000, + 824004000000, + 938919600000, + 951616800000, + 970974000000, + 972180000000, + 1003028400000, + 1013911200000, + null + ], + "offsets": [ + 142.8667, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 932078 + }, + { + "name": "America/Managua", + "abbrs": [ + "MMT", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1121105688000, + 105084000000, + 161758800000, + 290584800000, + 299134800000, + 322034400000, + 330584400000, + 694260000000, + 717310800000, + 725868000000, + 852094800000, + 1113112800000, + 1128229200000, + 1146384000000, + 1159682400000, + null + ], + "offsets": [ + 345.2, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 2223000 + }, + { + "name": "America/Manaus", + "abbrs": [ + "LMT", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT" + ], + "untils": [ + -1767211196000, + -1206954000000, + -1191358800000, + -1175371200000, + -1159822800000, + -633816000000, + -622065600000, + -602280000000, + -591829200000, + -570744000000, + -560206800000, + -539121600000, + -531349200000, + -191361600000, + -184194000000, + -155160000000, + -150066000000, + -128894400000, + -121122000000, + -99950400000, + -89586000000, + -68414400000, + -57963600000, + 499752000000, + 511239600000, + 530596800000, + 540270000000, + 562132800000, + 571201200000, + 750830400000, + 761713200000, + null + ], + "offsets": [ + 240.0667, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 1893000 + }, + { + "name": "America/Marigot", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Martinique", + "abbrs": [ + "FFMT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -1851537340000, + 323841600000, + 338958000000, + null + ], + "offsets": [ + 244.3333, + 240, + 180, + 240 + ], + "population": 386486 + }, + { + "name": "America/Matamoros", + "abbrs": [ + "LMT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1514743200000, + 576057600000, + 594198000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 989136000000, + 1001833200000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1175414400000, + 1193554800000, + 1207468800000, + 1225004400000, + 1238918400000, + 1256454000000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 400, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 449815 + }, + { + "name": "America/Mazatlan", + "abbrs": [ + "LMT", + "MST", + "CST", + "MST", + "CST", + "MST", + "CST", + "MST", + "PST", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1514739600000, + -1343066400000, + -1234807200000, + -1220292000000, + -1207159200000, + -1191344400000, + -873828000000, + -661539600000, + 28800000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 989139600000, + 1001836800000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1175418000000, + 1193558400000, + 1207472400000, + 1225008000000, + 1238922000000, + 1256457600000, + 1270371600000, + 1288512000000, + 1301821200000, + 1319961600000, + 1333270800000, + 1351411200000, + 1365325200000, + 1382860800000, + 1396774800000, + 1414310400000, + 1428224400000, + 1445760000000, + 1459674000000, + 1477814400000, + 1491123600000, + 1509264000000, + 1522573200000, + 1540713600000, + 1554627600000, + 1572163200000, + 1586077200000, + 1603612800000, + 1617526800000, + 1635667200000, + 1648976400000, + 1667116800000, + 1680426000000, + 1698566400000, + 1712480400000, + 1730016000000, + 1743930000000, + 1761465600000, + 1775379600000, + 1792915200000, + 1806829200000, + 1824969600000, + 1838278800000, + 1856419200000, + 1869728400000, + 1887868800000, + 1901782800000, + 1919318400000, + 1933232400000, + 1950768000000, + 1964682000000, + 1982822400000, + 1996131600000, + 2014272000000, + 2027581200000, + 2045721600000, + 2059030800000, + 2077171200000, + 2091085200000, + 2108620800000, + 2122534800000, + 2140070400000, + null + ], + "offsets": [ + 425.6667, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 480, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 438434 + }, + { + "name": "America/Mendoza", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "WARST", + "WART", + "WARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "WART", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 655963200000, + 667796400000, + 687499200000, + 699418800000, + 719380800000, + 731469600000, + 938919600000, + 952052400000, + 1085281200000, + 1096171200000, + 1198983600000, + 1205632800000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 180, + 240, + 180, + 240, + 120, + 180, + 180, + 180, + 240, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Menominee", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -116438400000, + -100112400000, + -21484800000, + 104914800000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 702460800000, + 719996400000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986112000000, + 1004252400000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 8494 + }, + { + "name": "America/Merida", + "abbrs": [ + "LMT", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1514743200000, + 377935200000, + 407653200000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 989136000000, + 1001833200000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1175414400000, + 1193554800000, + 1207468800000, + 1225004400000, + 1238918400000, + 1256454000000, + 1270368000000, + 1288508400000, + 1301817600000, + 1319958000000, + 1333267200000, + 1351407600000, + 1365321600000, + 1382857200000, + 1396771200000, + 1414306800000, + 1428220800000, + 1445756400000, + 1459670400000, + 1477810800000, + 1491120000000, + 1509260400000, + 1522569600000, + 1540710000000, + 1554624000000, + 1572159600000, + 1586073600000, + 1603609200000, + 1617523200000, + 1635663600000, + 1648972800000, + 1667113200000, + 1680422400000, + 1698562800000, + 1712476800000, + 1730012400000, + 1743926400000, + 1761462000000, + 1775376000000, + 1792911600000, + 1806825600000, + 1824966000000, + 1838275200000, + 1856415600000, + 1869724800000, + 1887865200000, + 1901779200000, + 1919314800000, + 1933228800000, + 1950764400000, + 1964678400000, + 1982818800000, + 1996128000000, + 2014268400000, + 2027577600000, + 2045718000000, + 2059027200000, + 2077167600000, + 2091081600000, + 2108617200000, + 2122531200000, + 2140066800000, + null + ], + "offsets": [ + 358.4667, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 1111000 + }, + { + "name": "America/Metlakatla", + "abbrs": [ + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST" + ], + "untils": [ + -880207200000, + -769395600000, + -765385200000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 126698400000, + 152096400000, + 162381600000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 1446372000000, + 1457866800000, + 1478426400000, + 1489316400000, + 1509876000000, + 1520766000000, + 1541325600000, + 1552215600000, + 1572775200000, + 1583665200000, + 1604224800000, + 1615719600000, + 1636279200000, + 1647169200000, + 1667728800000, + 1678618800000, + 1699178400000, + 1710068400000, + 1730628000000, + 1741518000000, + 1762077600000, + 1772967600000, + 1793527200000, + 1805022000000, + 1825581600000, + 1836471600000, + 1857031200000, + 1867921200000, + 1888480800000, + 1899370800000, + 1919930400000, + 1930820400000, + 1951380000000, + 1962874800000, + 1983434400000, + 1994324400000, + 2014884000000, + 2025774000000, + 2046333600000, + 2057223600000, + 2077783200000, + 2088673200000, + 2109232800000, + 2120122800000, + 2140682400000, + null + ], + "offsets": [ + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540 + ], + "population": 1375 + }, + { + "name": "America/Mexico_City", + "abbrs": [ + "LMT", + "MST", + "CST", + "MST", + "CST", + "MST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1514739600000, + -1343066400000, + -1234807200000, + -1220292000000, + -1207159200000, + -1191344400000, + -975261600000, + -963169200000, + -917114400000, + -907354800000, + -821901600000, + -810068400000, + -627501600000, + -612990000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 989136000000, + 1001833200000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1175414400000, + 1193554800000, + 1207468800000, + 1225004400000, + 1238918400000, + 1256454000000, + 1270368000000, + 1288508400000, + 1301817600000, + 1319958000000, + 1333267200000, + 1351407600000, + 1365321600000, + 1382857200000, + 1396771200000, + 1414306800000, + 1428220800000, + 1445756400000, + 1459670400000, + 1477810800000, + 1491120000000, + 1509260400000, + 1522569600000, + 1540710000000, + 1554624000000, + 1572159600000, + 1586073600000, + 1603609200000, + 1617523200000, + 1635663600000, + 1648972800000, + 1667113200000, + 1680422400000, + 1698562800000, + 1712476800000, + 1730012400000, + 1743926400000, + 1761462000000, + 1775376000000, + 1792911600000, + 1806825600000, + 1824966000000, + 1838275200000, + 1856415600000, + 1869724800000, + 1887865200000, + 1901779200000, + 1919314800000, + 1933228800000, + 1950764400000, + 1964678400000, + 1982818800000, + 1996128000000, + 2014268400000, + 2027577600000, + 2045718000000, + 2059027200000, + 2077167600000, + 2091081600000, + 2108617200000, + 2122531200000, + 2140066800000, + null + ], + "offsets": [ + 396.6, + 420, + 360, + 420, + 360, + 420, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 20063000 + }, + { + "name": "America/Miquelon", + "abbrs": [ + "LMT", + "AST", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST", + "PMDT", + "PMST" + ], + "untils": [ + -1850328920000, + 326001600000, + 544597200000, + 562132800000, + 576046800000, + 594187200000, + 607496400000, + 625636800000, + 638946000000, + 657086400000, + 671000400000, + 688536000000, + 702450000000, + 719985600000, + 733899600000, + 752040000000, + 765349200000, + 783489600000, + 796798800000, + 814939200000, + 828853200000, + 846388800000, + 860302800000, + 877838400000, + 891752400000, + 909288000000, + 923202000000, + 941342400000, + 954651600000, + 972792000000, + 986101200000, + 1004241600000, + 1018155600000, + 1035691200000, + 1049605200000, + 1067140800000, + 1081054800000, + 1099195200000, + 1112504400000, + 1130644800000, + 1143954000000, + 1162094400000, + 1173589200000, + 1194148800000, + 1205038800000, + 1225598400000, + 1236488400000, + 1257048000000, + 1268542800000, + 1289102400000, + 1299992400000, + 1320552000000, + 1331442000000, + 1352001600000, + 1362891600000, + 1383451200000, + 1394341200000, + 1414900800000, + 1425790800000, + 1446350400000, + 1457845200000, + 1478404800000, + 1489294800000, + 1509854400000, + 1520744400000, + 1541304000000, + 1552194000000, + 1572753600000, + 1583643600000, + 1604203200000, + 1615698000000, + 1636257600000, + 1647147600000, + 1667707200000, + 1678597200000, + 1699156800000, + 1710046800000, + 1730606400000, + 1741496400000, + 1762056000000, + 1772946000000, + 1793505600000, + 1805000400000, + 1825560000000, + 1836450000000, + 1857009600000, + 1867899600000, + 1888459200000, + 1899349200000, + 1919908800000, + 1930798800000, + 1951358400000, + 1962853200000, + 1983412800000, + 1994302800000, + 2014862400000, + 2025752400000, + 2046312000000, + 2057202000000, + 2077761600000, + 2088651600000, + 2109211200000, + 2120101200000, + 2140660800000, + null + ], + "offsets": [ + 224.6667, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 6080 + }, + { + "name": "America/Moncton", + "abbrs": [ + "EST", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "AWT", + "APT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -2131642800000, + -1632074400000, + -1615143600000, + -1153681200000, + -1145822400000, + -1122231600000, + -1114372800000, + -1090782000000, + -1082923200000, + -1059332400000, + -1051473600000, + -1027882800000, + -1020024000000, + -996433200000, + -988574400000, + -965674800000, + -955396800000, + -934743600000, + -923947200000, + -904503600000, + -891892800000, + -880221600000, + -769395600000, + -765399600000, + -747252000000, + -733950000000, + -715802400000, + -702500400000, + -684352800000, + -671050800000, + -652903200000, + -639601200000, + -620848800000, + -608151600000, + -589399200000, + -576097200000, + -557949600000, + -544647600000, + -526500000000, + -513198000000, + -495050400000, + -481748400000, + -463600800000, + -450298800000, + -431546400000, + -418244400000, + -400096800000, + -384375600000, + -368647200000, + -352926000000, + -337197600000, + -321476400000, + -305748000000, + -289422000000, + -273693600000, + -257972400000, + -242244000000, + -226522800000, + -210794400000, + -195073200000, + -179344800000, + -163623600000, + -147895200000, + -131569200000, + -116445600000, + -100119600000, + -84391200000, + -68670000000, + -52941600000, + -37220400000, + -21492000000, + -5770800000, + 9957600000, + 25678800000, + 41407200000, + 57733200000, + 73461600000, + 89182800000, + 136360800000, + 152082000000, + 167810400000, + 183531600000, + 199260000000, + 215586000000, + 230709600000, + 247035600000, + 262764000000, + 278485200000, + 294213600000, + 309934800000, + 325663200000, + 341384400000, + 357112800000, + 372834000000, + 388562400000, + 404888400000, + 420012000000, + 436338000000, + 452066400000, + 467787600000, + 483516000000, + 499237200000, + 514965600000, + 530686800000, + 544600800000, + 562136400000, + 576050400000, + 594190800000, + 607500000000, + 625640400000, + 638949600000, + 657090000000, + 671004000000, + 688539600000, + 702453600000, + 719989200000, + 733896060000, + 752036460000, + 765345660000, + 783486060000, + 796795260000, + 814935660000, + 828849660000, + 846385260000, + 860299260000, + 877834860000, + 891748860000, + 909284460000, + 923198460000, + 941338860000, + 954648060000, + 972788460000, + 986097660000, + 1004238060000, + 1018152060000, + 1035687660000, + 1049601660000, + 1067137260000, + 1081051260000, + 1099191660000, + 1112500860000, + 1130641260000, + 1143950460000, + 1162090860000, + 1173592800000, + 1194152400000, + 1205042400000, + 1225602000000, + 1236492000000, + 1257051600000, + 1268546400000, + 1289106000000, + 1299996000000, + 1320555600000, + 1331445600000, + 1352005200000, + 1362895200000, + 1383454800000, + 1394344800000, + 1414904400000, + 1425794400000, + 1446354000000, + 1457848800000, + 1478408400000, + 1489298400000, + 1509858000000, + 1520748000000, + 1541307600000, + 1552197600000, + 1572757200000, + 1583647200000, + 1604206800000, + 1615701600000, + 1636261200000, + 1647151200000, + 1667710800000, + 1678600800000, + 1699160400000, + 1710050400000, + 1730610000000, + 1741500000000, + 1762059600000, + 1772949600000, + 1793509200000, + 1805004000000, + 1825563600000, + 1836453600000, + 1857013200000, + 1867903200000, + 1888462800000, + 1899352800000, + 1919912400000, + 1930802400000, + 1951362000000, + 1962856800000, + 1983416400000, + 1994306400000, + 2014866000000, + 2025756000000, + 2046315600000, + 2057205600000, + 2077765200000, + 2088655200000, + 2109214800000, + 2120104800000, + 2140664400000, + null + ], + "offsets": [ + 300, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 64128 + }, + { + "name": "America/Monterrey", + "abbrs": [ + "LMT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1514743200000, + 576057600000, + 594198000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 989136000000, + 1001833200000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1175414400000, + 1193554800000, + 1207468800000, + 1225004400000, + 1238918400000, + 1256454000000, + 1270368000000, + 1288508400000, + 1301817600000, + 1319958000000, + 1333267200000, + 1351407600000, + 1365321600000, + 1382857200000, + 1396771200000, + 1414306800000, + 1428220800000, + 1445756400000, + 1459670400000, + 1477810800000, + 1491120000000, + 1509260400000, + 1522569600000, + 1540710000000, + 1554624000000, + 1572159600000, + 1586073600000, + 1603609200000, + 1617523200000, + 1635663600000, + 1648972800000, + 1667113200000, + 1680422400000, + 1698562800000, + 1712476800000, + 1730012400000, + 1743926400000, + 1761462000000, + 1775376000000, + 1792911600000, + 1806825600000, + 1824966000000, + 1838275200000, + 1856415600000, + 1869724800000, + 1887865200000, + 1901779200000, + 1919314800000, + 1933228800000, + 1950764400000, + 1964678400000, + 1982818800000, + 1996128000000, + 2014268400000, + 2027577600000, + 2045718000000, + 2059027200000, + 2077167600000, + 2091081600000, + 2108617200000, + 2122531200000, + 2140066800000, + null + ], + "offsets": [ + 401.2667, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 4083000 + }, + { + "name": "America/Montevideo", + "abbrs": [ + "MMT", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYHST", + "UYT", + "UYST", + "UYT", + "UYHST", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT", + "UYST", + "UYT" + ], + "untils": [ + -1567455316000, + -1459542600000, + -1443819600000, + -1428006600000, + -1412283600000, + -1396470600000, + -1380747600000, + -1141590600000, + -1128286800000, + -1110141000000, + -1096837200000, + -1078691400000, + -1065387600000, + -1046637000000, + -1033938000000, + -1015187400000, + -1002488400000, + -983737800000, + -971038800000, + -952288200000, + -938984400000, + -920838600000, + -907534800000, + -896819400000, + -883602000000, + -853619400000, + -845848800000, + -334789200000, + -319672800000, + -314226000000, + -309996000000, + -149720400000, + -134604000000, + -118270800000, + -100044000000, + -86821200000, + -68508000000, + -50446800000, + -34119000000, + -18910800000, + -2583000000, + 12625200000, + 28953000000, + 72932400000, + 82692000000, + 132116400000, + 156911400000, + 212983200000, + 250052400000, + 260244000000, + 307594800000, + 325994400000, + 566449200000, + 574308000000, + 597812400000, + 605671200000, + 625633200000, + 636516000000, + 656478000000, + 667965600000, + 688532400000, + 699415200000, + 719377200000, + 730864800000, + 1095562800000, + 1111896000000, + 1128834000000, + 1142136000000, + 1159678800000, + 1173585600000, + 1191733200000, + 1205035200000, + 1223182800000, + 1236484800000, + 1254632400000, + 1268539200000, + 1286082000000, + 1299988800000, + 1317531600000, + 1331438400000, + 1349586000000, + 1362888000000, + 1381035600000, + 1394337600000, + 1412485200000, + 1425787200000, + null + ], + "offsets": [ + 224.7333, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 180, + 210, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 150, + 180, + 150, + 180, + 150, + 180, + 120, + 180, + 150, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 1700000 + }, + { + "name": "America/Montreal", + "abbrs": [ + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1632070800000, + -1615140000000, + -1601753400000, + -1583697600000, + -1567357200000, + -1554667200000, + -1534698000000, + -1524074400000, + -1503248400000, + -1492365600000, + -1471798800000, + -1460916000000, + -1440954000000, + -1428861600000, + -1409504400000, + -1397412000000, + -1378054800000, + -1365962400000, + -1346605200000, + -1333908000000, + -1315155600000, + -1301853600000, + -1283706000000, + -1270404000000, + -1252256400000, + -1238954400000, + -1220806800000, + -1207504800000, + -1188752400000, + -1176055200000, + -1157302800000, + -1144000800000, + -1125853200000, + -1112551200000, + -1094403600000, + -1081101600000, + -1062954000000, + -1049652000000, + -1031504400000, + -1018202400000, + -1000054800000, + -986752800000, + -968000400000, + -955303200000, + -936550800000, + -880218000000, + -769395600000, + -765396000000, + -747248400000, + -733946400000, + -715806000000, + -702504000000, + -684356400000, + -671054400000, + -652906800000, + -634161600000, + -620845200000, + -602704800000, + -589395600000, + -576093600000, + -557946000000, + -544644000000, + -526496400000, + -513194400000, + -495046800000, + -481744800000, + -463597200000, + -450295200000, + -431542800000, + -418240800000, + -400093200000, + -384372000000, + -368643600000, + -352922400000, + -337194000000, + -321472800000, + -305744400000, + -289418400000, + -273690000000, + -257968800000, + -242240400000, + -226519200000, + -210790800000, + -195069600000, + -179341200000, + -163620000000, + -147891600000, + -131565600000, + -116442000000, + -100116000000, + -84387600000, + -68666400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 136364400000, + 152085600000, + 167814000000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Montserrat", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Nassau", + "abbrs": [ + "LMT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1825095030000, + -179341200000, + -163620000000, + -147891600000, + -131565600000, + -116442000000, + -100116000000, + -84387600000, + -68666400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 136364400000, + 152085600000, + 167814000000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 309.5, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 244400 + }, + { + "name": "America/New_York", + "abbrs": [ + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633280400000, + -1615140000000, + -1601830800000, + -1583690400000, + -1570381200000, + -1551636000000, + -1536512400000, + -1523210400000, + -1504458000000, + -1491760800000, + -1473008400000, + -1459706400000, + -1441558800000, + -1428256800000, + -1410109200000, + -1396807200000, + -1378659600000, + -1365357600000, + -1347210000000, + -1333908000000, + -1315155600000, + -1301853600000, + -1283706000000, + -1270404000000, + -1252256400000, + -1238954400000, + -1220806800000, + -1207504800000, + -1189357200000, + -1176055200000, + -1157302800000, + -1144605600000, + -1125853200000, + -1112551200000, + -1094403600000, + -1081101600000, + -1062954000000, + -1049652000000, + -1031504400000, + -1018202400000, + -1000054800000, + -986752800000, + -968000400000, + -955303200000, + -936550800000, + -923248800000, + -905101200000, + -891799200000, + -880218000000, + -769395600000, + -765396000000, + -747248400000, + -733946400000, + -715798800000, + -702496800000, + -684349200000, + -671047200000, + -652899600000, + -639597600000, + -620845200000, + -608148000000, + -589395600000, + -576093600000, + -557946000000, + -544644000000, + -526496400000, + -513194400000, + -495046800000, + -481744800000, + -463597200000, + -447271200000, + -431542800000, + -415821600000, + -400093200000, + -384372000000, + -368643600000, + -352922400000, + -337194000000, + -321472800000, + -305744400000, + -289418400000, + -273690000000, + -257968800000, + -242240400000, + -226519200000, + -210790800000, + -195069600000, + -179341200000, + -163620000000, + -147891600000, + -131565600000, + -116442000000, + -100116000000, + -84387600000, + -68666400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 126687600000, + 152085600000, + 162370800000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 20630000 + }, + { + "name": "America/Nipigon", + "abbrs": [ + "EST", + "EDT", + "EST", + "EDT", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1632070800000, + -1615140000000, + -923252400000, + -880218000000, + -769395600000, + -765396000000, + 136364400000, + 152085600000, + 167814000000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 300, + 240, + 300, + 240, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 1631 + }, + { + "name": "America/Nome", + "abbrs": [ + "NST", + "NWT", + "NPT", + "NST", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "YST", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST" + ], + "untils": [ + -880196400000, + -769395600000, + -765374400000, + -86878800000, + -21466800000, + -5745600000, + 9982800000, + 25704000000, + 41432400000, + 57758400000, + 73486800000, + 89208000000, + 104936400000, + 120657600000, + 126709200000, + 152107200000, + 162392400000, + 183556800000, + 199285200000, + 215611200000, + 230734800000, + 247060800000, + 262789200000, + 278510400000, + 294238800000, + 309960000000, + 325688400000, + 341409600000, + 357138000000, + 372859200000, + 388587600000, + 404913600000, + 420037200000, + 436363200000, + 439030800000, + 452084400000, + 467805600000, + 483534000000, + 499255200000, + 514983600000, + 530704800000, + 544618800000, + 562154400000, + 576068400000, + 594208800000, + 607518000000, + 625658400000, + 638967600000, + 657108000000, + 671022000000, + 688557600000, + 702471600000, + 720007200000, + 733921200000, + 752061600000, + 765370800000, + 783511200000, + 796820400000, + 814960800000, + 828874800000, + 846410400000, + 860324400000, + 877860000000, + 891774000000, + 909309600000, + 923223600000, + 941364000000, + 954673200000, + 972813600000, + 986122800000, + 1004263200000, + 1018177200000, + 1035712800000, + 1049626800000, + 1067162400000, + 1081076400000, + 1099216800000, + 1112526000000, + 1130666400000, + 1143975600000, + 1162116000000, + 1173610800000, + 1194170400000, + 1205060400000, + 1225620000000, + 1236510000000, + 1257069600000, + 1268564400000, + 1289124000000, + 1300014000000, + 1320573600000, + 1331463600000, + 1352023200000, + 1362913200000, + 1383472800000, + 1394362800000, + 1414922400000, + 1425812400000, + 1446372000000, + 1457866800000, + 1478426400000, + 1489316400000, + 1509876000000, + 1520766000000, + 1541325600000, + 1552215600000, + 1572775200000, + 1583665200000, + 1604224800000, + 1615719600000, + 1636279200000, + 1647169200000, + 1667728800000, + 1678618800000, + 1699178400000, + 1710068400000, + 1730628000000, + 1741518000000, + 1762077600000, + 1772967600000, + 1793527200000, + 1805022000000, + 1825581600000, + 1836471600000, + 1857031200000, + 1867921200000, + 1888480800000, + 1899370800000, + 1919930400000, + 1930820400000, + 1951380000000, + 1962874800000, + 1983434400000, + 1994324400000, + 2014884000000, + 2025774000000, + 2046333600000, + 2057223600000, + 2077783200000, + 2088673200000, + 2109232800000, + 2120122800000, + 2140682400000, + null + ], + "offsets": [ + 660, + 600, + 600, + 660, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 540, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540 + ], + "population": 3797 + }, + { + "name": "America/Noronha", + "abbrs": [ + "LMT", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT" + ], + "untils": [ + -1767217820000, + -1206961200000, + -1191366000000, + -1175378400000, + -1159830000000, + -633823200000, + -622072800000, + -602287200000, + -591836400000, + -570751200000, + -560214000000, + -539128800000, + -531356400000, + -191368800000, + -184201200000, + -155167200000, + -150073200000, + -128901600000, + -121129200000, + -99957600000, + -89593200000, + -68421600000, + -57970800000, + 499744800000, + 511232400000, + 530589600000, + 540262800000, + 562125600000, + 571194000000, + 592970400000, + 602038800000, + 624420000000, + 634698000000, + 938916000000, + 951613200000, + 970970400000, + 971571600000, + 1003024800000, + 1013907600000, + null + ], + "offsets": [ + 129.6667, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120 + ], + "population": 3012 + }, + { + "name": "America/North_Dakota/Beulah", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -880210800000, + -769395600000, + -765388800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 126694800000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "America/North_Dakota/Center", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -880210800000, + -769395600000, + -765388800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 126694800000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986112000000, + 1004252400000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "America/North_Dakota/New_Salem", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -880210800000, + -769395600000, + -765388800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 126694800000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "America/Ojinaga", + "abbrs": [ + "LMT", + "MST", + "CST", + "MST", + "CST", + "MST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1514739600000, + -1343066400000, + -1234807200000, + -1220292000000, + -1207159200000, + -1191344400000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 989139600000, + 1001836800000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1175418000000, + 1193558400000, + 1207472400000, + 1225008000000, + 1238922000000, + 1256457600000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 417.6667, + 420, + 360, + 420, + 360, + 420, + 360, + 300, + 360, + 300, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 22744 + }, + { + "name": "America/Panama", + "abbrs": [ + "CMT", + "EST" + ], + "untils": [ + -1946918424000, + null + ], + "offsets": [ + 319.6, + 300 + ], + "population": 1498000 + }, + { + "name": "America/Pangnirtung", + "abbrs": [ + "-00", + "AST", + "AWT", + "APT", + "AST", + "ADDT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "CST", + "CDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1546300800000, + -880221600000, + -769395600000, + -765399600000, + -147902400000, + -131572800000, + 325663200000, + 341384400000, + 357112800000, + 372834000000, + 388562400000, + 404888400000, + 420012000000, + 436338000000, + 452066400000, + 467787600000, + 483516000000, + 499237200000, + 514965600000, + 530686800000, + 544600800000, + 562136400000, + 576050400000, + 594190800000, + 607500000000, + 625640400000, + 638949600000, + 657090000000, + 671004000000, + 688539600000, + 702453600000, + 719989200000, + 733903200000, + 752043600000, + 765352800000, + 783493200000, + 796802400000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954662400000, + 972802800000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 0, + 240, + 180, + 180, + 240, + 120, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 360, + 300, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 1425 + }, + { + "name": "America/Paramaribo", + "abbrs": [ + "LMT", + "PMT", + "PMT", + "NEGT", + "SRT", + "SRT" + ], + "untils": [ + -1861906760000, + -1104524348000, + -765317964000, + 185686200000, + 465449400000, + null + ], + "offsets": [ + 220.6667, + 220.8667, + 220.6, + 210, + 210, + 180 + ], + "population": 243556 + }, + { + "name": "America/Phoenix", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MST", + "MWT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -880210800000, + -820519140000, + -812653140000, + -796845540000, + -84380400000, + -68659200000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 4194000 + }, + { + "name": "America/Port-au-Prince", + "abbrs": [ + "PPMT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1670483460000, + 421218000000, + 436334400000, + 452062800000, + 467784000000, + 483512400000, + 499233600000, + 514962000000, + 530683200000, + 546411600000, + 562132800000, + 576050400000, + 594194400000, + 607500000000, + 625644000000, + 638949600000, + 657093600000, + 671004000000, + 688543200000, + 702453600000, + 719992800000, + 733903200000, + 752047200000, + 765352800000, + 783496800000, + 796802400000, + 814946400000, + 828856800000, + 846396000000, + 860306400000, + 877845600000, + 1112504400000, + 1130644800000, + 1143954000000, + 1162094400000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + null + ], + "offsets": [ + 289, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 2332000 + }, + { + "name": "America/Port_of_Spain", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 43396 + }, + { + "name": "America/Porto_Acre", + "abbrs": [ + "LMT", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "AMT", + "ACT" + ], + "untils": [ + -1767209328000, + -1206950400000, + -1191355200000, + -1175367600000, + -1159819200000, + -633812400000, + -622062000000, + -602276400000, + -591825600000, + -570740400000, + -560203200000, + -539118000000, + -531345600000, + -191358000000, + -184190400000, + -155156400000, + -150062400000, + -128890800000, + -121118400000, + -99946800000, + -89582400000, + -68410800000, + -57960000000, + 499755600000, + 511243200000, + 530600400000, + 540273600000, + 562136400000, + 571204800000, + 1214283600000, + 1384056000000, + null + ], + "offsets": [ + 271.2, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "America/Porto_Velho", + "abbrs": [ + "LMT", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT" + ], + "untils": [ + -1767210264000, + -1206954000000, + -1191358800000, + -1175371200000, + -1159822800000, + -633816000000, + -622065600000, + -602280000000, + -591829200000, + -570744000000, + -560206800000, + -539121600000, + -531349200000, + -191361600000, + -184194000000, + -155160000000, + -150066000000, + -128894400000, + -121122000000, + -99950400000, + -89586000000, + -68414400000, + -57963600000, + 499752000000, + 511239600000, + 530596800000, + 540270000000, + 562132800000, + 571201200000, + null + ], + "offsets": [ + 255.6, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 369259 + }, + { + "name": "America/Puerto_Rico", + "abbrs": [ + "AST", + "AWT", + "APT", + "AST" + ], + "untils": [ + -873057600000, + -769395600000, + -765399600000, + null + ], + "offsets": [ + 240, + 180, + 180, + 240 + ], + "population": 2350126 + }, + { + "name": "America/Rainy_River", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1632067200000, + -1615136400000, + -923248800000, + -880214400000, + -769395600000, + -765392400000, + 136368000000, + 152089200000, + 167817600000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 702460800000, + 719996400000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986112000000, + 1004252400000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 842 + }, + { + "name": "America/Rankin_Inlet", + "abbrs": [ + "-00", + "CST", + "CDDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -410227200000, + -147895200000, + -131565600000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 702460800000, + 719996400000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986112000000, + 1004252400000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 0, + 360, + 240, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 2577 + }, + { + "name": "America/Recife", + "abbrs": [ + "LMT", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT" + ], + "untils": [ + -1767217224000, + -1206957600000, + -1191362400000, + -1175374800000, + -1159826400000, + -633819600000, + -622069200000, + -602283600000, + -591832800000, + -570747600000, + -560210400000, + -539125200000, + -531352800000, + -191365200000, + -184197600000, + -155163600000, + -150069600000, + -128898000000, + -121125600000, + -99954000000, + -89589600000, + -68418000000, + -57967200000, + 499748400000, + 511236000000, + 530593200000, + 540266400000, + 562129200000, + 571197600000, + 592974000000, + 602042400000, + 624423600000, + 634701600000, + 938919600000, + 951616800000, + 970974000000, + 971575200000, + 1003028400000, + 1013911200000, + null + ], + "offsets": [ + 139.6, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180 + ], + "population": 3347000 + }, + { + "name": "America/Regina", + "abbrs": [ + "LMT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "CST" + ], + "untils": [ + -2030202084000, + -1632063600000, + -1615132800000, + -1251651600000, + -1238349600000, + -1220202000000, + -1206900000000, + -1188752400000, + -1175450400000, + -1156698000000, + -1144000800000, + -1125248400000, + -1111946400000, + -1032714000000, + -1016992800000, + -1001264400000, + -986148000000, + -969814800000, + -954093600000, + -937760400000, + -922039200000, + -906310800000, + -890589600000, + -880210800000, + -769395600000, + -765388800000, + -748450800000, + -732729600000, + -715791600000, + -702489600000, + -684342000000, + -671040000000, + -652892400000, + -639590400000, + -620838000000, + -608140800000, + -589388400000, + -576086400000, + -557938800000, + -544636800000, + -526489200000, + -513187200000, + -495039600000, + -481737600000, + -463590000000, + -450288000000, + -431535600000, + -418233600000, + -400086000000, + -386784000000, + -337186800000, + -321465600000, + -305737200000, + null + ], + "offsets": [ + 418.6, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360 + ], + "population": 193100 + }, + { + "name": "America/Resolute", + "abbrs": [ + "-00", + "CST", + "CDDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -704937600000, + -147895200000, + -131565600000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 702460800000, + 719996400000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986112000000, + 1004252400000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 0, + 360, + 240, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 229 + }, + { + "name": "America/Rio_Branco", + "abbrs": [ + "LMT", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "AMT", + "ACT" + ], + "untils": [ + -1767209328000, + -1206950400000, + -1191355200000, + -1175367600000, + -1159819200000, + -633812400000, + -622062000000, + -602276400000, + -591825600000, + -570740400000, + -560203200000, + -539118000000, + -531345600000, + -191358000000, + -184190400000, + -155156400000, + -150062400000, + -128890800000, + -121118400000, + -99946800000, + -89582400000, + -68410800000, + -57960000000, + 499755600000, + 511243200000, + 530600400000, + 540273600000, + 562136400000, + 571204800000, + 1214283600000, + 1384056000000, + null + ], + "offsets": [ + 271.2, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 308545 + }, + { + "name": "America/Rosario", + "abbrs": [ + "CMT", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "WART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART" + ], + "untils": [ + -1567453392000, + -1233432000000, + -1222981200000, + -1205956800000, + -1194037200000, + -1172865600000, + -1162501200000, + -1141329600000, + -1130965200000, + -1109793600000, + -1099429200000, + -1078257600000, + -1067806800000, + -1046635200000, + -1036270800000, + -1015099200000, + -1004734800000, + -983563200000, + -973198800000, + -952027200000, + -941576400000, + -931032000000, + -900882000000, + -890337600000, + -833749200000, + -827265600000, + -752274000000, + -733780800000, + -197326800000, + -190843200000, + -184194000000, + -164491200000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 596948400000, + 605066400000, + 624423600000, + 636516000000, + 656478000000, + 667965600000, + 687931200000, + 699415200000, + 719377200000, + 731469600000, + 938919600000, + 952052400000, + 1198983600000, + 1205632800000, + 1224385200000, + 1237082400000, + null + ], + "offsets": [ + 256.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 240, + 120, + 180, + 120, + 180, + 180, + 180, + 120, + 180, + 120, + 180 + ], + "population": 0 + }, + { + "name": "America/Santa_Isabel", + "abbrs": [ + "LMT", + "MST", + "PST", + "MST", + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1514736000000, + -1451667600000, + -1343062800000, + -1234803600000, + -1222963200000, + -1207242000000, + -873820800000, + -769395600000, + -761677200000, + -686073600000, + -661539600000, + -495039600000, + -481734000000, + -463590000000, + -450284400000, + -431535600000, + -418230000000, + -400086000000, + -386780400000, + -368636400000, + -355330800000, + -337186800000, + -323881200000, + -305737200000, + -292431600000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1175421600000, + 1193562000000, + 1207476000000, + 1225011600000, + 1238925600000, + 1256461200000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 468.0667, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 23389 + }, + { + "name": "America/Santarem", + "abbrs": [ + "LMT", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "BRT" + ], + "untils": [ + -1767212472000, + -1206954000000, + -1191358800000, + -1175371200000, + -1159822800000, + -633816000000, + -622065600000, + -602280000000, + -591829200000, + -570744000000, + -560206800000, + -539121600000, + -531349200000, + -191361600000, + -184194000000, + -155160000000, + -150066000000, + -128894400000, + -121122000000, + -99950400000, + -89586000000, + -68414400000, + -57963600000, + 499752000000, + 511239600000, + 530596800000, + 540270000000, + 562132800000, + 571201200000, + 1214280000000, + null + ], + "offsets": [ + 218.8, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180 + ], + "population": 205711 + }, + { + "name": "America/Santiago", + "abbrs": [ + "SMT", + "CLT", + "SMT", + "CLT", + "SMT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLT", + "CLT", + "CLT", + "CLST", + "CLT", + "CLT", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST" + ], + "untils": [ + -1892661434000, + -1688410800000, + -1619205434000, + -1593806400000, + -1335986234000, + -1317585600000, + -1304362800000, + -1286049600000, + -1272826800000, + -1254513600000, + -1241290800000, + -1222977600000, + -1209754800000, + -1191355200000, + -1178132400000, + -870552000000, + -865278000000, + -740520000000, + -736376400000, + -718056000000, + -713649600000, + -36619200000, + -23922000000, + -3355200000, + 7527600000, + 24465600000, + 37767600000, + 55915200000, + 69217200000, + 87969600000, + 100666800000, + 118209600000, + 132116400000, + 150868800000, + 163566000000, + 182318400000, + 195620400000, + 213768000000, + 227070000000, + 245217600000, + 258519600000, + 277272000000, + 289969200000, + 308721600000, + 321418800000, + 340171200000, + 353473200000, + 371620800000, + 384922800000, + 403070400000, + 416372400000, + 434520000000, + 447822000000, + 466574400000, + 479271600000, + 498024000000, + 510721200000, + 529473600000, + 545194800000, + 560923200000, + 574225200000, + 592372800000, + 605674800000, + 624427200000, + 637124400000, + 653457600000, + 668574000000, + 687326400000, + 700628400000, + 718776000000, + 732078000000, + 750225600000, + 763527600000, + 781675200000, + 794977200000, + 813729600000, + 826426800000, + 845179200000, + 859690800000, + 876628800000, + 889930800000, + 906868800000, + 923194800000, + 939528000000, + 952830000000, + 971582400000, + 984279600000, + 1003032000000, + 1015729200000, + 1034481600000, + 1047178800000, + 1065931200000, + 1079233200000, + 1097380800000, + 1110682800000, + 1128830400000, + 1142132400000, + 1160884800000, + 1173582000000, + 1192334400000, + 1206846000000, + 1223784000000, + 1237086000000, + 1255233600000, + 1270350000000, + 1286683200000, + 1304823600000, + 1313899200000, + 1335668400000, + 1346558400000, + 1367118000000, + 1378612800000, + 1398567600000, + 1410062400000, + 1463281200000, + 1471147200000, + 1494730800000, + 1502596800000, + 1526180400000, + 1534046400000, + 1557630000000, + 1565496000000, + 1589079600000, + 1596945600000, + 1620529200000, + 1629000000000, + 1652583600000, + 1660449600000, + 1684033200000, + 1691899200000, + 1715482800000, + 1723348800000, + 1746932400000, + 1754798400000, + 1778382000000, + 1786248000000, + 1809831600000, + 1818302400000, + 1841886000000, + 1849752000000, + 1873335600000, + 1881201600000, + 1904785200000, + 1912651200000, + 1936234800000, + 1944100800000, + 1967684400000, + 1976155200000, + 1999738800000, + 2007604800000, + 2031188400000, + 2039054400000, + 2062638000000, + 2070504000000, + 2094087600000, + 2101953600000, + 2125537200000, + 2133403200000, + null + ], + "offsets": [ + 282.7667, + 300, + 282.7667, + 240, + 282.7667, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 180, + 240, + 300, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180 + ], + "population": 6225000 + }, + { + "name": "America/Santo_Domingo", + "abbrs": [ + "SDMT", + "EST", + "EDT", + "EST", + "EHDT", + "EST", + "EHDT", + "EST", + "EHDT", + "EST", + "EHDT", + "EST", + "EHDT", + "EST", + "AST", + "EST", + "AST" + ], + "untils": [ + -1159773600000, + -100119600000, + -89668800000, + -5770800000, + 4422600000, + 25678800000, + 33193800000, + 57733200000, + 64816200000, + 89182800000, + 96438600000, + 120632400000, + 127974600000, + 152082000000, + 972799200000, + 975823200000, + null + ], + "offsets": [ + 280, + 300, + 240, + 300, + 270, + 300, + 270, + 300, + 270, + 300, + 270, + 300, + 270, + 300, + 240, + 300, + 240 + ], + "population": 2925000 + }, + { + "name": "America/Sao_Paulo", + "abbrs": [ + "LMT", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST" + ], + "untils": [ + -1767214412000, + -1206957600000, + -1191362400000, + -1175374800000, + -1159826400000, + -633819600000, + -622069200000, + -602283600000, + -591832800000, + -570747600000, + -560210400000, + -539125200000, + -531352800000, + -195426000000, + -184197600000, + -155163600000, + -150069600000, + -128898000000, + -121125600000, + -99954000000, + -89589600000, + -68418000000, + -57967200000, + 499748400000, + 511236000000, + 530593200000, + 540266400000, + 562129200000, + 571197600000, + 592974000000, + 602042400000, + 624423600000, + 634701600000, + 656478000000, + 666756000000, + 687927600000, + 697600800000, + 719982000000, + 728445600000, + 750826800000, + 761709600000, + 782276400000, + 793159200000, + 813726000000, + 824004000000, + 844570800000, + 856058400000, + 876106800000, + 888717600000, + 908074800000, + 919562400000, + 938919600000, + 951616800000, + 970974000000, + 982461600000, + 1003028400000, + 1013911200000, + 1036292400000, + 1045360800000, + 1066532400000, + 1076810400000, + 1099364400000, + 1108864800000, + 1129431600000, + 1140314400000, + 1162695600000, + 1172368800000, + 1192330800000, + 1203213600000, + 1224385200000, + 1234663200000, + 1255834800000, + 1266717600000, + 1287284400000, + 1298167200000, + 1318734000000, + 1330221600000, + 1350788400000, + 1361066400000, + 1382238000000, + 1392516000000, + 1413687600000, + 1424570400000, + 1445137200000, + 1456020000000, + 1476586800000, + 1487469600000, + 1508036400000, + 1518919200000, + 1540090800000, + 1550368800000, + 1571540400000, + 1581818400000, + 1602990000000, + 1613872800000, + 1634439600000, + 1645322400000, + 1665889200000, + 1677376800000, + 1697338800000, + 1708221600000, + 1729393200000, + 1739671200000, + 1760842800000, + 1771725600000, + 1792292400000, + 1803175200000, + 1823742000000, + 1834624800000, + 1855191600000, + 1866074400000, + 1887246000000, + 1897524000000, + 1918695600000, + 1928973600000, + 1950145200000, + 1960423200000, + 1981594800000, + 1992477600000, + 2013044400000, + 2024532000000, + 2044494000000, + 2055376800000, + 2076548400000, + 2086826400000, + 2107998000000, + 2118880800000, + 2139447600000, + null + ], + "offsets": [ + 186.4667, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120 + ], + "population": 20365000 + }, + { + "name": "America/Scoresbysund", + "abbrs": [ + "LMT", + "CGT", + "CGST", + "CGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT", + "EGST", + "EGT" + ], + "untils": [ + -1686090728000, + 323841600000, + 338961600000, + 354679200000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 87.8667, + 120, + 60, + 120, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60 + ], + "population": 452 + }, + { + "name": "America/Shiprock", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -1570374000000, + -1551628800000, + -1538924400000, + -1534089600000, + -880210800000, + -769395600000, + -765388800000, + -147884400000, + -131558400000, + -116434800000, + -100108800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 126694800000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 0 + }, + { + "name": "America/Sitka", + "abbrs": [ + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "YST", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST" + ], + "untils": [ + -880207200000, + -769395600000, + -765385200000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 126698400000, + 152096400000, + 162381600000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 439030800000, + 452084400000, + 467805600000, + 483534000000, + 499255200000, + 514983600000, + 530704800000, + 544618800000, + 562154400000, + 576068400000, + 594208800000, + 607518000000, + 625658400000, + 638967600000, + 657108000000, + 671022000000, + 688557600000, + 702471600000, + 720007200000, + 733921200000, + 752061600000, + 765370800000, + 783511200000, + 796820400000, + 814960800000, + 828874800000, + 846410400000, + 860324400000, + 877860000000, + 891774000000, + 909309600000, + 923223600000, + 941364000000, + 954673200000, + 972813600000, + 986122800000, + 1004263200000, + 1018177200000, + 1035712800000, + 1049626800000, + 1067162400000, + 1081076400000, + 1099216800000, + 1112526000000, + 1130666400000, + 1143975600000, + 1162116000000, + 1173610800000, + 1194170400000, + 1205060400000, + 1225620000000, + 1236510000000, + 1257069600000, + 1268564400000, + 1289124000000, + 1300014000000, + 1320573600000, + 1331463600000, + 1352023200000, + 1362913200000, + 1383472800000, + 1394362800000, + 1414922400000, + 1425812400000, + 1446372000000, + 1457866800000, + 1478426400000, + 1489316400000, + 1509876000000, + 1520766000000, + 1541325600000, + 1552215600000, + 1572775200000, + 1583665200000, + 1604224800000, + 1615719600000, + 1636279200000, + 1647169200000, + 1667728800000, + 1678618800000, + 1699178400000, + 1710068400000, + 1730628000000, + 1741518000000, + 1762077600000, + 1772967600000, + 1793527200000, + 1805022000000, + 1825581600000, + 1836471600000, + 1857031200000, + 1867921200000, + 1888480800000, + 1899370800000, + 1919930400000, + 1930820400000, + 1951380000000, + 1962874800000, + 1983434400000, + 1994324400000, + 2014884000000, + 2025774000000, + 2046333600000, + 2057223600000, + 2077783200000, + 2088673200000, + 2109232800000, + 2120122800000, + 2140682400000, + null + ], + "offsets": [ + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 540, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540 + ], + "population": 9020 + }, + { + "name": "America/St_Barthelemy", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/St_Johns", + "abbrs": [ + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NWT", + "NPT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST" + ], + "untils": [ + -1664130548000, + -1650137348000, + -1632076148000, + -1615145348000, + -1598650148000, + -1590100148000, + -1567286948000, + -1551565748000, + -1535837348000, + -1520116148000, + -1503782948000, + -1488666548000, + -1472333348000, + -1457216948000, + -1440883748000, + -1425767348000, + -1409434148000, + -1394317748000, + -1377984548000, + -1362263348000, + -1346534948000, + -1330813748000, + -1314480548000, + -1299364148000, + -1283030948000, + -1267914548000, + -1251581348000, + -1236464948000, + -1220131748000, + -1205015348000, + -1188682148000, + -1172960948000, + -1156627748000, + -1141511348000, + -1125178148000, + -1110061748000, + -1096921748000, + -1093728600000, + -1078612200000, + -1061670600000, + -1048973400000, + -1030221000000, + -1017523800000, + -998771400000, + -986074200000, + -966717000000, + -954624600000, + -935267400000, + -922570200000, + -903817800000, + -891120600000, + -872368200000, + -769395600000, + -765401400000, + -746044200000, + -733347000000, + -714594600000, + -701897400000, + -683145000000, + -670447800000, + -651695400000, + -638998200000, + -619641000000, + -606943800000, + -589401000000, + -576099000000, + -557951400000, + -544649400000, + -526501800000, + -513199800000, + -495052200000, + -481750200000, + -463602600000, + -450300600000, + -431548200000, + -418246200000, + -400098600000, + -386796600000, + -368649000000, + -355347000000, + -337199400000, + -323897400000, + -305749800000, + -289423800000, + -273695400000, + -257974200000, + -242245800000, + -226524600000, + -210796200000, + -195075000000, + -179346600000, + -163625400000, + -147897000000, + -131571000000, + -116447400000, + -100121400000, + -84393000000, + -68671800000, + -52943400000, + -37222200000, + -21493800000, + -5772600000, + 9955800000, + 25677000000, + 41405400000, + 57731400000, + 73459800000, + 89181000000, + 104909400000, + 120630600000, + 136359000000, + 152080200000, + 167808600000, + 183529800000, + 199258200000, + 215584200000, + 230707800000, + 247033800000, + 262762200000, + 278483400000, + 294211800000, + 309933000000, + 325661400000, + 341382600000, + 357111000000, + 372832200000, + 388560600000, + 404886600000, + 420010200000, + 436336200000, + 452064600000, + 467785800000, + 483514200000, + 499235400000, + 514963800000, + 530685000000, + 544591860000, + 562127460000, + 576041460000, + 594178260000, + 607491060000, + 625631460000, + 638940660000, + 657081060000, + 670995060000, + 688530660000, + 702444660000, + 719980260000, + 733894260000, + 752034660000, + 765343860000, + 783484260000, + 796793460000, + 814933860000, + 828847860000, + 846383460000, + 860297460000, + 877833060000, + 891747060000, + 909282660000, + 923196660000, + 941337060000, + 954646260000, + 972786660000, + 986095860000, + 1004236260000, + 1018150260000, + 1035685860000, + 1049599860000, + 1067135460000, + 1081049460000, + 1099189860000, + 1112499060000, + 1130639460000, + 1143948660000, + 1162089060000, + 1173583860000, + 1194143460000, + 1205033460000, + 1225593060000, + 1236483060000, + 1257042660000, + 1268537460000, + 1289097060000, + 1299987060000, + 1320553800000, + 1331443800000, + 1352003400000, + 1362893400000, + 1383453000000, + 1394343000000, + 1414902600000, + 1425792600000, + 1446352200000, + 1457847000000, + 1478406600000, + 1489296600000, + 1509856200000, + 1520746200000, + 1541305800000, + 1552195800000, + 1572755400000, + 1583645400000, + 1604205000000, + 1615699800000, + 1636259400000, + 1647149400000, + 1667709000000, + 1678599000000, + 1699158600000, + 1710048600000, + 1730608200000, + 1741498200000, + 1762057800000, + 1772947800000, + 1793507400000, + 1805002200000, + 1825561800000, + 1836451800000, + 1857011400000, + 1867901400000, + 1888461000000, + 1899351000000, + 1919910600000, + 1930800600000, + 1951360200000, + 1962855000000, + 1983414600000, + 1994304600000, + 2014864200000, + 2025754200000, + 2046313800000, + 2057203800000, + 2077763400000, + 2088653400000, + 2109213000000, + 2120103000000, + 2140662600000, + null + ], + "offsets": [ + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 90, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210 + ], + "population": 106172 + }, + { + "name": "America/St_Kitts", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/St_Lucia", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/St_Thomas", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/St_Vincent", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Swift_Current", + "abbrs": [ + "LMT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "CST" + ], + "untils": [ + -2030201320000, + -1632063600000, + -1615132800000, + -880210800000, + -769395600000, + -765388800000, + -747241200000, + -732729600000, + -715791600000, + -702489600000, + -684342000000, + -671040000000, + -652892400000, + -639590400000, + -400086000000, + -384364800000, + -337186800000, + -321465600000, + -305737200000, + -292435200000, + -273682800000, + -260985600000, + 73472400000, + null + ], + "offsets": [ + 431.3333, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360 + ], + "population": 15503 + }, + { + "name": "America/Tegucigalpa", + "abbrs": [ + "LMT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1538503868000, + 547020000000, + 559717200000, + 578469600000, + 591166800000, + 1146981600000, + 1154926800000, + null + ], + "offsets": [ + 348.8667, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 1120000 + }, + { + "name": "America/Thule", + "abbrs": [ + "LMT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -1686079492000, + 670399200000, + 686120400000, + 701848800000, + 717570000000, + 733903200000, + 752043600000, + 765352800000, + 783493200000, + 796802400000, + 814942800000, + 828856800000, + 846392400000, + 860306400000, + 877842000000, + 891756000000, + 909291600000, + 923205600000, + 941346000000, + 954655200000, + 972795600000, + 986104800000, + 1004245200000, + 1018159200000, + 1035694800000, + 1049608800000, + 1067144400000, + 1081058400000, + 1099198800000, + 1112508000000, + 1130648400000, + 1143957600000, + 1162098000000, + 1173592800000, + 1194152400000, + 1205042400000, + 1225602000000, + 1236492000000, + 1257051600000, + 1268546400000, + 1289106000000, + 1299996000000, + 1320555600000, + 1331445600000, + 1352005200000, + 1362895200000, + 1383454800000, + 1394344800000, + 1414904400000, + 1425794400000, + 1446354000000, + 1457848800000, + 1478408400000, + 1489298400000, + 1509858000000, + 1520748000000, + 1541307600000, + 1552197600000, + 1572757200000, + 1583647200000, + 1604206800000, + 1615701600000, + 1636261200000, + 1647151200000, + 1667710800000, + 1678600800000, + 1699160400000, + 1710050400000, + 1730610000000, + 1741500000000, + 1762059600000, + 1772949600000, + 1793509200000, + 1805004000000, + 1825563600000, + 1836453600000, + 1857013200000, + 1867903200000, + 1888462800000, + 1899352800000, + 1919912400000, + 1930802400000, + 1951362000000, + 1962856800000, + 1983416400000, + 1994306400000, + 2014866000000, + 2025756000000, + 2046315600000, + 2057205600000, + 2077765200000, + 2088655200000, + 2109214800000, + 2120104800000, + 2140664400000, + null + ], + "offsets": [ + 275.1333, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 656 + }, + { + "name": "America/Thunder_Bay", + "abbrs": [ + "CST", + "EST", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1893434400000, + -880218000000, + -769395600000, + -765396000000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 136364400000, + 152085600000, + 167814000000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 109140 + }, + { + "name": "America/Tijuana", + "abbrs": [ + "LMT", + "MST", + "PST", + "MST", + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1514736000000, + -1451667600000, + -1343062800000, + -1234803600000, + -1222963200000, + -1207242000000, + -873820800000, + -769395600000, + -761677200000, + -686073600000, + -661539600000, + -495039600000, + -481734000000, + -463590000000, + -450284400000, + -431535600000, + -418230000000, + -400086000000, + -386780400000, + -368636400000, + -355330800000, + -337186800000, + -323881200000, + -305737200000, + -292431600000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1175421600000, + 1193562000000, + 1207476000000, + 1225011600000, + 1238925600000, + 1256461200000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 468.0667, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 1968000 + }, + { + "name": "America/Toronto", + "abbrs": [ + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1632070800000, + -1615140000000, + -1601753400000, + -1583697600000, + -1567357200000, + -1554667200000, + -1534698000000, + -1524074400000, + -1503248400000, + -1492365600000, + -1471798800000, + -1460916000000, + -1440954000000, + -1428861600000, + -1409504400000, + -1397412000000, + -1378054800000, + -1365962400000, + -1346605200000, + -1333908000000, + -1315155600000, + -1301853600000, + -1283706000000, + -1270404000000, + -1252256400000, + -1238954400000, + -1220806800000, + -1207504800000, + -1188752400000, + -1176055200000, + -1157302800000, + -1144000800000, + -1125853200000, + -1112551200000, + -1094403600000, + -1081101600000, + -1062954000000, + -1049652000000, + -1031504400000, + -1018202400000, + -1000054800000, + -986752800000, + -968000400000, + -955303200000, + -936550800000, + -880218000000, + -769395600000, + -765396000000, + -747248400000, + -733946400000, + -715806000000, + -702504000000, + -684356400000, + -671054400000, + -652906800000, + -634161600000, + -620845200000, + -602704800000, + -589395600000, + -576093600000, + -557946000000, + -544644000000, + -526496400000, + -513194400000, + -495046800000, + -481744800000, + -463597200000, + -450295200000, + -431542800000, + -418240800000, + -400093200000, + -384372000000, + -368643600000, + -352922400000, + -337194000000, + -321472800000, + -305744400000, + -289418400000, + -273690000000, + -257968800000, + -242240400000, + -226519200000, + -210790800000, + -195069600000, + -179341200000, + -163620000000, + -147891600000, + -131565600000, + -116442000000, + -100116000000, + -84387600000, + -68666400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 136364400000, + 152085600000, + 167814000000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 6456000 + }, + { + "name": "America/Tortola", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Vancouver", + "abbrs": [ + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1632060000000, + -1615129200000, + -880207200000, + -769395600000, + -765385200000, + -747237600000, + -732726000000, + -715788000000, + -702486000000, + -684338400000, + -671036400000, + -652888800000, + -639586800000, + -620834400000, + -608137200000, + -589384800000, + -576082800000, + -557935200000, + -544633200000, + -526485600000, + -513183600000, + -495036000000, + -481734000000, + -463586400000, + -450284400000, + -431532000000, + -418230000000, + -400082400000, + -386780400000, + -368632800000, + -355330800000, + -337183200000, + -323881200000, + -305733600000, + -292431600000, + -273679200000, + -260982000000, + -242229600000, + -226508400000, + -210780000000, + -195058800000, + -179330400000, + -163609200000, + -147880800000, + -131554800000, + -116431200000, + -100105200000, + -84376800000, + -68655600000, + -52927200000, + -37206000000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 136375200000, + 152096400000, + 167824800000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 2313000 + }, + { + "name": "America/Virgin", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -1825098836000, + null + ], + "offsets": [ + 246.0667, + 240 + ], + "population": 0 + }, + { + "name": "America/Whitehorse", + "abbrs": [ + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YWT", + "YPT", + "YST", + "YDDT", + "YST", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1632056400000, + -1615125600000, + -1596978000000, + -1583164800000, + -880203600000, + -769395600000, + -765381600000, + -147884400000, + -131554800000, + -81961200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 540, + 480, + 540, + 480, + 540, + 480, + 480, + 540, + 420, + 540, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 23276 + }, + { + "name": "America/Winnipeg", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1694368800000, + -1681671600000, + -1632067200000, + -1615136400000, + -1029686400000, + -1018198800000, + -880214400000, + -769395600000, + -765392400000, + -746035200000, + -732733200000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620755200000, + -607626000000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -450291600000, + -431539200000, + -418237200000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -321469200000, + -305740800000, + -292438800000, + -210787200000, + -198090000000, + -116438400000, + -100108800000, + -84384000000, + -68659200000, + -52934400000, + -37209600000, + -21484800000, + -5760000000, + 9964800000, + 25689600000, + 41414400000, + 57744000000, + 73468800000, + 89193600000, + 104918400000, + 120643200000, + 136368000000, + 152092800000, + 167817600000, + 183542400000, + 199267200000, + 215596800000, + 230716800000, + 247046400000, + 262771200000, + 278496000000, + 294220800000, + 309945600000, + 325670400000, + 341395200000, + 357120000000, + 372844800000, + 388569600000, + 404899200000, + 420019200000, + 436348800000, + 452073600000, + 467798400000, + 483523200000, + 499248000000, + 514972800000, + 530697600000, + 544608000000, + 562147200000, + 576057600000, + 594201600000, + 607507200000, + 625651200000, + 638956800000, + 657100800000, + 671011200000, + 688550400000, + 702460800000, + 720000000000, + 733910400000, + 752054400000, + 765360000000, + 783504000000, + 796809600000, + 814953600000, + 828864000000, + 846403200000, + 860313600000, + 877852800000, + 891763200000, + 909302400000, + 923212800000, + 941356800000, + 954662400000, + 972806400000, + 986112000000, + 1004256000000, + 1018166400000, + 1035705600000, + 1049616000000, + 1067155200000, + 1081065600000, + 1099209600000, + 1112515200000, + 1130659200000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 663615 + }, + { + "name": "America/Yakutat", + "abbrs": [ + "YST", + "YWT", + "YPT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YDT", + "YST", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST" + ], + "untils": [ + -880203600000, + -769395600000, + -765381600000, + -21474000000, + -5752800000, + 9975600000, + 25696800000, + 41425200000, + 57751200000, + 73479600000, + 89200800000, + 104929200000, + 120650400000, + 126702000000, + 152100000000, + 162385200000, + 183549600000, + 199278000000, + 215604000000, + 230727600000, + 247053600000, + 262782000000, + 278503200000, + 294231600000, + 309952800000, + 325681200000, + 341402400000, + 357130800000, + 372852000000, + 388580400000, + 404906400000, + 420030000000, + 436356000000, + 439030800000, + 452084400000, + 467805600000, + 483534000000, + 499255200000, + 514983600000, + 530704800000, + 544618800000, + 562154400000, + 576068400000, + 594208800000, + 607518000000, + 625658400000, + 638967600000, + 657108000000, + 671022000000, + 688557600000, + 702471600000, + 720007200000, + 733921200000, + 752061600000, + 765370800000, + 783511200000, + 796820400000, + 814960800000, + 828874800000, + 846410400000, + 860324400000, + 877860000000, + 891774000000, + 909309600000, + 923223600000, + 941364000000, + 954673200000, + 972813600000, + 986122800000, + 1004263200000, + 1018177200000, + 1035712800000, + 1049626800000, + 1067162400000, + 1081076400000, + 1099216800000, + 1112526000000, + 1130666400000, + 1143975600000, + 1162116000000, + 1173610800000, + 1194170400000, + 1205060400000, + 1225620000000, + 1236510000000, + 1257069600000, + 1268564400000, + 1289124000000, + 1300014000000, + 1320573600000, + 1331463600000, + 1352023200000, + 1362913200000, + 1383472800000, + 1394362800000, + 1414922400000, + 1425812400000, + 1446372000000, + 1457866800000, + 1478426400000, + 1489316400000, + 1509876000000, + 1520766000000, + 1541325600000, + 1552215600000, + 1572775200000, + 1583665200000, + 1604224800000, + 1615719600000, + 1636279200000, + 1647169200000, + 1667728800000, + 1678618800000, + 1699178400000, + 1710068400000, + 1730628000000, + 1741518000000, + 1762077600000, + 1772967600000, + 1793527200000, + 1805022000000, + 1825581600000, + 1836471600000, + 1857031200000, + 1867921200000, + 1888480800000, + 1899370800000, + 1919930400000, + 1930820400000, + 1951380000000, + 1962874800000, + 1983434400000, + 1994324400000, + 2014884000000, + 2025774000000, + 2046333600000, + 2057223600000, + 2077783200000, + 2088673200000, + 2109232800000, + 2120122800000, + 2140682400000, + null + ], + "offsets": [ + 540, + 480, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540 + ], + "population": 642 + }, + { + "name": "America/Yellowknife", + "abbrs": [ + "-00", + "MST", + "MWT", + "MPT", + "MST", + "MDDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1104537600000, + -880210800000, + -769395600000, + -765388800000, + -147891600000, + -131562000000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 0, + 420, + 360, + 360, + 420, + 300, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 19234 + }, + { + "name": "Antarctica/Casey", + "abbrs": [ + "-00", + "+08", + "+11", + "+08", + "+11", + "+08", + "+11" + ], + "untils": [ + -31536000000, + 1255802400000, + 1267714800000, + 1319738400000, + 1329843600000, + 1477065600000, + null + ], + "offsets": [ + 0, + -480, + -660, + -480, + -660, + -480, + -660 + ], + "population": 10 + }, + { + "name": "Antarctica/Davis", + "abbrs": [ + "-00", + "+07", + "-00", + "+07", + "+05", + "+07", + "+05", + "+07" + ], + "untils": [ + -409190400000, + -163062000000, + -28857600000, + 1255806000000, + 1268251200000, + 1319742000000, + 1329854400000, + null + ], + "offsets": [ + 0, + -420, + 0, + -420, + -300, + -420, + -300, + -420 + ], + "population": 70 + }, + { + "name": "Antarctica/DumontDUrville", + "abbrs": [ + "-00", + "+10", + "-00", + "+10" + ], + "untils": [ + -725846400000, + -566992800000, + -415497600000, + null + ], + "offsets": [ + 0, + -600, + 0, + -600 + ], + "population": 80 + }, + { + "name": "Antarctica/Macquarie", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "-00", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "MIST" + ], + "untils": [ + -1680508800000, + -1665392400000, + -1601719200000, + -687052800000, + -71136000000, + -55411200000, + -37267200000, + -25776000000, + -5817600000, + 5673600000, + 25632000000, + 37728000000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 386092800000, + 404841600000, + 417542400000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 510076800000, + 530035200000, + 542736000000, + 562089600000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 637689600000, + 657043200000, + 670348800000, + 686678400000, + 701798400000, + 718128000000, + 733248000000, + 749577600000, + 764697600000, + 781027200000, + 796147200000, + 812476800000, + 828201600000, + 844531200000, + 859651200000, + 875980800000, + 891100800000, + 907430400000, + 922550400000, + 938880000000, + 954000000000, + 967305600000, + 985449600000, + 1002384000000, + 1017504000000, + 1033833600000, + 1048953600000, + 1065283200000, + 1080403200000, + 1096732800000, + 1111852800000, + 1128182400000, + 1143907200000, + 1159632000000, + 1174752000000, + 1191686400000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + null + ], + "offsets": [ + -600, + -660, + -600, + 0, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -660 + ], + "population": 1 + }, + { + "name": "Antarctica/Mawson", + "abbrs": [ + "-00", + "+06", + "+05" + ], + "untils": [ + -501206400000, + 1255809600000, + null + ], + "offsets": [ + 0, + -360, + -300 + ], + "population": 60 + }, + { + "name": "Antarctica/McMurdo", + "abbrs": [ + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT" + ], + "untils": [ + -1330335000000, + -1320057000000, + -1300699800000, + -1287396000000, + -1269250200000, + -1255946400000, + -1237800600000, + -1224496800000, + -1206351000000, + -1192442400000, + -1174901400000, + -1160992800000, + -1143451800000, + -1125914400000, + -1112607000000, + -1094464800000, + -1081157400000, + -1063015200000, + -1049707800000, + -1031565600000, + -1018258200000, + -1000116000000, + -986808600000, + -968061600000, + -955359000000, + -936612000000, + -923304600000, + 152632800000, + 162309600000, + 183477600000, + 194968800000, + 215532000000, + 226418400000, + 246981600000, + 257868000000, + 278431200000, + 289317600000, + 309880800000, + 320767200000, + 341330400000, + 352216800000, + 372780000000, + 384271200000, + 404834400000, + 415720800000, + 436284000000, + 447170400000, + 467733600000, + 478620000000, + 499183200000, + 510069600000, + 530632800000, + 541519200000, + 562082400000, + 573573600000, + 594136800000, + 605023200000, + 623772000000, + 637682400000, + 655221600000, + 669132000000, + 686671200000, + 700581600000, + 718120800000, + 732636000000, + 749570400000, + 764085600000, + 781020000000, + 795535200000, + 812469600000, + 826984800000, + 844524000000, + 858434400000, + 875973600000, + 889884000000, + 907423200000, + 921938400000, + 938872800000, + 953388000000, + 970322400000, + 984837600000, + 1002376800000, + 1016287200000, + 1033826400000, + 1047736800000, + 1065276000000, + 1079791200000, + 1096725600000, + 1111240800000, + 1128175200000, + 1142690400000, + 1159624800000, + 1174140000000, + 1191074400000, + 1207404000000, + 1222524000000, + 1238853600000, + 1253973600000, + 1270303200000, + 1285423200000, + 1301752800000, + 1316872800000, + 1333202400000, + 1348927200000, + 1365256800000, + 1380376800000, + 1396706400000, + 1411826400000, + 1428156000000, + 1443276000000, + 1459605600000, + 1474725600000, + 1491055200000, + 1506175200000, + 1522504800000, + 1538229600000, + 1554559200000, + 1569679200000, + 1586008800000, + 1601128800000, + 1617458400000, + 1632578400000, + 1648908000000, + 1664028000000, + 1680357600000, + 1695477600000, + 1712412000000, + 1727532000000, + 1743861600000, + 1758981600000, + 1775311200000, + 1790431200000, + 1806760800000, + 1821880800000, + 1838210400000, + 1853330400000, + 1869660000000, + 1885384800000, + 1901714400000, + 1916834400000, + 1933164000000, + 1948284000000, + 1964613600000, + 1979733600000, + 1996063200000, + 2011183200000, + 2027512800000, + 2042632800000, + 2058962400000, + 2074687200000, + 2091016800000, + 2106136800000, + 2122466400000, + 2137586400000, + null + ], + "offsets": [ + -690, + -750, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780 + ], + "population": 0 + }, + { + "name": "Antarctica/Palmer", + "abbrs": [ + "-00", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ARST", + "ART", + "ART", + "ARST", + "ART", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST" + ], + "untils": [ + -157766400000, + -152658000000, + -132955200000, + -121122000000, + -101419200000, + -86821200000, + -71092800000, + -54766800000, + -39038400000, + -23317200000, + -7588800000, + 128142000000, + 136605600000, + 389070000000, + 403070400000, + 416372400000, + 434520000000, + 447822000000, + 466574400000, + 479271600000, + 498024000000, + 510721200000, + 529473600000, + 545194800000, + 560923200000, + 574225200000, + 592372800000, + 605674800000, + 624427200000, + 637124400000, + 653457600000, + 668574000000, + 687326400000, + 700628400000, + 718776000000, + 732078000000, + 750225600000, + 763527600000, + 781675200000, + 794977200000, + 813729600000, + 826426800000, + 845179200000, + 859690800000, + 876628800000, + 889930800000, + 906868800000, + 923194800000, + 939528000000, + 952830000000, + 971582400000, + 984279600000, + 1003032000000, + 1015729200000, + 1034481600000, + 1047178800000, + 1065931200000, + 1079233200000, + 1097380800000, + 1110682800000, + 1128830400000, + 1142132400000, + 1160884800000, + 1173582000000, + 1192334400000, + 1206846000000, + 1223784000000, + 1237086000000, + 1255233600000, + 1270350000000, + 1286683200000, + 1304823600000, + 1313899200000, + 1335668400000, + 1346558400000, + 1367118000000, + 1378612800000, + 1398567600000, + 1410062400000, + 1463281200000, + 1471147200000, + 1494730800000, + 1502596800000, + 1526180400000, + 1534046400000, + 1557630000000, + 1565496000000, + 1589079600000, + 1596945600000, + 1620529200000, + 1629000000000, + 1652583600000, + 1660449600000, + 1684033200000, + 1691899200000, + 1715482800000, + 1723348800000, + 1746932400000, + 1754798400000, + 1778382000000, + 1786248000000, + 1809831600000, + 1818302400000, + 1841886000000, + 1849752000000, + 1873335600000, + 1881201600000, + 1904785200000, + 1912651200000, + 1936234800000, + 1944100800000, + 1967684400000, + 1976155200000, + 1999738800000, + 2007604800000, + 2031188400000, + 2039054400000, + 2062638000000, + 2070504000000, + 2094087600000, + 2101953600000, + 2125537200000, + 2133403200000, + null + ], + "offsets": [ + 0, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180 + ], + "population": 40 + }, + { + "name": "Antarctica/Rothera", + "abbrs": [ + "-00", + "-03" + ], + "untils": [ + 218246400000, + null + ], + "offsets": [ + 0, + 180 + ], + "population": 130 + }, + { + "name": "Antarctica/South_Pole", + "abbrs": [ + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT" + ], + "untils": [ + -1330335000000, + -1320057000000, + -1300699800000, + -1287396000000, + -1269250200000, + -1255946400000, + -1237800600000, + -1224496800000, + -1206351000000, + -1192442400000, + -1174901400000, + -1160992800000, + -1143451800000, + -1125914400000, + -1112607000000, + -1094464800000, + -1081157400000, + -1063015200000, + -1049707800000, + -1031565600000, + -1018258200000, + -1000116000000, + -986808600000, + -968061600000, + -955359000000, + -936612000000, + -923304600000, + 152632800000, + 162309600000, + 183477600000, + 194968800000, + 215532000000, + 226418400000, + 246981600000, + 257868000000, + 278431200000, + 289317600000, + 309880800000, + 320767200000, + 341330400000, + 352216800000, + 372780000000, + 384271200000, + 404834400000, + 415720800000, + 436284000000, + 447170400000, + 467733600000, + 478620000000, + 499183200000, + 510069600000, + 530632800000, + 541519200000, + 562082400000, + 573573600000, + 594136800000, + 605023200000, + 623772000000, + 637682400000, + 655221600000, + 669132000000, + 686671200000, + 700581600000, + 718120800000, + 732636000000, + 749570400000, + 764085600000, + 781020000000, + 795535200000, + 812469600000, + 826984800000, + 844524000000, + 858434400000, + 875973600000, + 889884000000, + 907423200000, + 921938400000, + 938872800000, + 953388000000, + 970322400000, + 984837600000, + 1002376800000, + 1016287200000, + 1033826400000, + 1047736800000, + 1065276000000, + 1079791200000, + 1096725600000, + 1111240800000, + 1128175200000, + 1142690400000, + 1159624800000, + 1174140000000, + 1191074400000, + 1207404000000, + 1222524000000, + 1238853600000, + 1253973600000, + 1270303200000, + 1285423200000, + 1301752800000, + 1316872800000, + 1333202400000, + 1348927200000, + 1365256800000, + 1380376800000, + 1396706400000, + 1411826400000, + 1428156000000, + 1443276000000, + 1459605600000, + 1474725600000, + 1491055200000, + 1506175200000, + 1522504800000, + 1538229600000, + 1554559200000, + 1569679200000, + 1586008800000, + 1601128800000, + 1617458400000, + 1632578400000, + 1648908000000, + 1664028000000, + 1680357600000, + 1695477600000, + 1712412000000, + 1727532000000, + 1743861600000, + 1758981600000, + 1775311200000, + 1790431200000, + 1806760800000, + 1821880800000, + 1838210400000, + 1853330400000, + 1869660000000, + 1885384800000, + 1901714400000, + 1916834400000, + 1933164000000, + 1948284000000, + 1964613600000, + 1979733600000, + 1996063200000, + 2011183200000, + 2027512800000, + 2042632800000, + 2058962400000, + 2074687200000, + 2091016800000, + 2106136800000, + 2122466400000, + 2137586400000, + null + ], + "offsets": [ + -690, + -750, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780 + ], + "population": 0 + }, + { + "name": "Antarctica/Syowa", + "abbrs": [ + "-00", + "+03" + ], + "untils": [ + -407808000000, + null + ], + "offsets": [ + 0, + -180 + ], + "population": 20 + }, + { + "name": "Antarctica/Troll", + "abbrs": [ + "-00", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00", + "+02", + "+00" + ], + "untils": [ + 1108166400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0, + -120, + 0 + ], + "population": 40 + }, + { + "name": "Antarctica/Vostok", + "abbrs": [ + "-00", + "+06" + ], + "untils": [ + -380073600000, + null + ], + "offsets": [ + 0, + -360 + ], + "population": 25 + }, + { + "name": "Arctic/Longyearbyen", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1691884800000, + -1680573600000, + -927511200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -765327600000, + -340844400000, + -324514800000, + -308790000000, + -293065200000, + -277340400000, + -261615600000, + -245890800000, + -230166000000, + -214441200000, + -198716400000, + -182991600000, + -166662000000, + -147913200000, + -135212400000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Asia/Aden", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -719636812000, + null + ], + "offsets": [ + -186.8667, + -180 + ], + "population": 0 + }, + { + "name": "Asia/Almaty", + "abbrs": [ + "LMT", + "+05", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+05", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06" + ], + "untils": [ + -1441170468000, + -1247547600000, + 354909600000, + 370717200000, + 386445600000, + 402253200000, + 417981600000, + 433789200000, + 449604000000, + 465336000000, + 481060800000, + 496785600000, + 512510400000, + 528235200000, + 543960000000, + 559684800000, + 575409600000, + 591134400000, + 606859200000, + 622584000000, + 638308800000, + 654638400000, + 686091600000, + 695768400000, + 701812800000, + 717537600000, + 733262400000, + 748987200000, + 764712000000, + 780436800000, + 796161600000, + 811886400000, + 828216000000, + 846360000000, + 859665600000, + 877809600000, + 891115200000, + 909259200000, + 922564800000, + 941313600000, + 954014400000, + 972763200000, + 985464000000, + 1004212800000, + 1017518400000, + 1035662400000, + 1048968000000, + 1067112000000, + 1080417600000, + 1099166400000, + null + ], + "offsets": [ + -307.8, + -300, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -300, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360 + ], + "population": 1500000 + }, + { + "name": "Asia/Amman", + "abbrs": [ + "LMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1230776624000, + 108165600000, + 118270800000, + 136591200000, + 149806800000, + 168127200000, + 181342800000, + 199749600000, + 215643600000, + 231285600000, + 244501200000, + 262735200000, + 275950800000, + 481154400000, + 496962000000, + 512949600000, + 528670800000, + 544399200000, + 560120400000, + 575848800000, + 592174800000, + 610581600000, + 623624400000, + 641167200000, + 655074000000, + 671839200000, + 685918800000, + 702856800000, + 717973200000, + 733701600000, + 749422800000, + 765151200000, + 779662800000, + 797205600000, + 811116000000, + 828655200000, + 843170400000, + 860104800000, + 874620000000, + 891554400000, + 906069600000, + 930780000000, + 938124000000, + 954367200000, + 970178400000, + 985816800000, + 1001628000000, + 1017352800000, + 1033077600000, + 1048802400000, + 1066946400000, + 1080252000000, + 1097791200000, + 1112306400000, + 1128031200000, + 1143756000000, + 1161900000000, + 1175205600000, + 1193349600000, + 1206655200000, + 1225404000000, + 1238104800000, + 1256853600000, + 1269554400000, + 1288303200000, + 1301608800000, + 1319752800000, + 1333058400000, + 1387486800000, + 1395957600000, + 1414706400000, + 1427407200000, + 1446156000000, + 1459461600000, + 1477605600000, + 1490911200000, + 1509055200000, + 1522360800000, + 1540504800000, + 1553810400000, + 1571954400000, + 1585260000000, + 1604008800000, + 1616709600000, + 1635458400000, + 1648764000000, + 1666908000000, + 1680213600000, + 1698357600000, + 1711663200000, + 1729807200000, + 1743112800000, + 1761861600000, + 1774562400000, + 1793311200000, + 1806012000000, + 1824760800000, + 1838066400000, + 1856210400000, + 1869516000000, + 1887660000000, + 1900965600000, + 1919109600000, + 1932415200000, + 1951164000000, + 1963864800000, + 1982613600000, + 1995919200000, + 2014063200000, + 2027368800000, + 2045512800000, + 2058818400000, + 2076962400000, + 2090268000000, + 2109016800000, + 2121717600000, + 2140466400000, + null + ], + "offsets": [ + -143.7333, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 2468000 + }, + { + "name": "Asia/Anadyr", + "abbrs": [ + "LMT", + "+12", + "+13", + "+14", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+11", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+11", + "+12" + ], + "untils": [ + -1441194596000, + -1247572800000, + 354884400000, + 370692000000, + 402231600000, + 417960000000, + 433767600000, + 449582400000, + 465314400000, + 481039200000, + 496764000000, + 512488800000, + 528213600000, + 543938400000, + 559663200000, + 575388000000, + 591112800000, + 606837600000, + 622562400000, + 638287200000, + 654616800000, + 686070000000, + 695746800000, + 701791200000, + 717516000000, + 733240800000, + 748965600000, + 764690400000, + 780415200000, + 796140000000, + 811864800000, + 828194400000, + 846338400000, + 859644000000, + 877788000000, + 891093600000, + 909237600000, + 922543200000, + 941292000000, + 953992800000, + 972741600000, + 985442400000, + 1004191200000, + 1017496800000, + 1035640800000, + 1048946400000, + 1067090400000, + 1080396000000, + 1099144800000, + 1111845600000, + 1130594400000, + 1143295200000, + 1162044000000, + 1174744800000, + 1193493600000, + 1206799200000, + 1224943200000, + 1238248800000, + 1256392800000, + 1288450800000, + 1301151600000, + null + ], + "offsets": [ + -709.9333, + -720, + -780, + -840, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -660, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -660, + -720 + ], + "population": 13045 + }, + { + "name": "Asia/Aqtau", + "abbrs": [ + "LMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05" + ], + "untils": [ + -1441164064000, + -1247544000000, + 370724400000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 606862800000, + 622587600000, + 638312400000, + 654642000000, + 686095200000, + 695772000000, + 701816400000, + 717541200000, + 733266000000, + 748990800000, + 764715600000, + 780440400000, + 796168800000, + 811893600000, + 828223200000, + 846367200000, + 859672800000, + 877816800000, + 891122400000, + 909266400000, + 922572000000, + 941320800000, + 954021600000, + 972770400000, + 985471200000, + 1004220000000, + 1017525600000, + 1035669600000, + 1048975200000, + 1067119200000, + 1080424800000, + null + ], + "offsets": [ + -201.0667, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300 + ], + "population": 152227 + }, + { + "name": "Asia/Aqtobe", + "abbrs": [ + "LMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05" + ], + "untils": [ + -1441165720000, + -1247544000000, + 354913200000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 606862800000, + 622587600000, + 638312400000, + 654642000000, + 686095200000, + 695772000000, + 701816400000, + 717541200000, + 733266000000, + 748990800000, + 764715600000, + 780440400000, + 796165200000, + 811890000000, + 828219600000, + 846363600000, + 859669200000, + 877813200000, + 891118800000, + 909262800000, + 922568400000, + 941317200000, + 954018000000, + 972766800000, + 985467600000, + 1004216400000, + 1017522000000, + 1035666000000, + 1048971600000, + 1067115600000, + 1080421200000, + 1099170000000, + null + ], + "offsets": [ + -228.6667, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300 + ], + "population": 273599 + }, + { + "name": "Asia/Ashgabat", + "abbrs": [ + "LMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+04", + "+05" + ], + "untils": [ + -1441166012000, + -1247544000000, + 354913200000, + 370720800000, + 386449200000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 606862800000, + 622587600000, + 638312400000, + 654642000000, + 686095200000, + 695772000000, + null + ], + "offsets": [ + -233.5333, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -240, + -300 + ], + "population": 407000 + }, + { + "name": "Asia/Ashkhabad", + "abbrs": [ + "LMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+04", + "+05" + ], + "untils": [ + -1441166012000, + -1247544000000, + 354913200000, + 370720800000, + 386449200000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 606862800000, + 622587600000, + 638312400000, + 654642000000, + 686095200000, + 695772000000, + null + ], + "offsets": [ + -233.5333, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -240, + -300 + ], + "population": 0 + }, + { + "name": "Asia/Atyrau", + "abbrs": [ + "LMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05" + ], + "untils": [ + -1441164464000, + -1247544000000, + 370724400000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 606862800000, + 622587600000, + 638312400000, + 654642000000, + 686095200000, + 695772000000, + 701816400000, + 717541200000, + 733266000000, + 748990800000, + 764715600000, + 780440400000, + 796165200000, + 811890000000, + 828219600000, + 846363600000, + 859669200000, + 877813200000, + 891118800000, + 909262800000, + 941320800000, + 954021600000, + 972770400000, + 985471200000, + 1004220000000, + 1017525600000, + 1035669600000, + 1048975200000, + 1067119200000, + 1080424800000, + null + ], + "offsets": [ + -207.7333, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300 + ], + "population": 0 + }, + { + "name": "Asia/Baghdad", + "abbrs": [ + "BMT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -1641005856000, + 389048400000, + 402264000000, + 417906000000, + 433800000000, + 449614800000, + 465422400000, + 481150800000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 575416800000, + 591141600000, + 606866400000, + 622591200000, + 638316000000, + 654645600000, + 670464000000, + 686275200000, + 702086400000, + 717897600000, + 733622400000, + 749433600000, + 765158400000, + 780969600000, + 796694400000, + 812505600000, + 828316800000, + 844128000000, + 859852800000, + 875664000000, + 891388800000, + 907200000000, + 922924800000, + 938736000000, + 954547200000, + 970358400000, + 986083200000, + 1001894400000, + 1017619200000, + 1033430400000, + 1049155200000, + 1064966400000, + 1080777600000, + 1096588800000, + 1112313600000, + 1128124800000, + 1143849600000, + 1159660800000, + 1175385600000, + 1191196800000, + null + ], + "offsets": [ + -177.6, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180 + ], + "population": 6625000 + }, + { + "name": "Asia/Bahrain", + "abbrs": [ + "LMT", + "GST", + "AST" + ], + "untils": [ + -1577935568000, + 76190400000, + null + ], + "offsets": [ + -206.1333, + -240, + -180 + ], + "population": 0 + }, + { + "name": "Asia/Baku", + "abbrs": [ + "LMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04" + ], + "untils": [ + -1441163964000, + -405140400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 575416800000, + 591141600000, + 606866400000, + 622591200000, + 638316000000, + 654645600000, + 686098800000, + 701823600000, + 828234000000, + 846378000000, + 859680000000, + 877824000000, + 891129600000, + 909273600000, + 922579200000, + 941328000000, + 954028800000, + 972777600000, + 985478400000, + 1004227200000, + 1017532800000, + 1035676800000, + 1048982400000, + 1067126400000, + 1080432000000, + 1099180800000, + 1111881600000, + 1130630400000, + 1143331200000, + 1162080000000, + 1174780800000, + 1193529600000, + 1206835200000, + 1224979200000, + 1238284800000, + 1256428800000, + 1269734400000, + 1288483200000, + 1301184000000, + 1319932800000, + 1332633600000, + 1351382400000, + 1364688000000, + 1382832000000, + 1396137600000, + 1414281600000, + 1427587200000, + 1445731200000, + null + ], + "offsets": [ + -199.4, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240 + ], + "population": 2661000 + }, + { + "name": "Asia/Bangkok", + "abbrs": [ + "BMT", + "ICT" + ], + "untils": [ + -1570084924000, + null + ], + "offsets": [ + -402.0667, + -420 + ], + "population": 14998000 + }, + { + "name": "Asia/Barnaul", + "abbrs": [ + "LMT", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07" + ], + "untils": [ + -1579844100000, + -1247551200000, + 354906000000, + 370713600000, + 386442000000, + 402249600000, + 417978000000, + 433785600000, + 449600400000, + 465332400000, + 481057200000, + 496782000000, + 512506800000, + 528231600000, + 543956400000, + 559681200000, + 575406000000, + 591130800000, + 606855600000, + 622580400000, + 638305200000, + 654634800000, + 686088000000, + 695764800000, + 701809200000, + 717534000000, + 733258800000, + 748983600000, + 764708400000, + 780433200000, + 796158000000, + 801590400000, + 811886400000, + 828216000000, + 846360000000, + 859665600000, + 877809600000, + 891115200000, + 909259200000, + 922564800000, + 941313600000, + 954014400000, + 972763200000, + 985464000000, + 1004212800000, + 1017518400000, + 1035662400000, + 1048968000000, + 1067112000000, + 1080417600000, + 1099166400000, + 1111867200000, + 1130616000000, + 1143316800000, + 1162065600000, + 1174766400000, + 1193515200000, + 1206820800000, + 1224964800000, + 1238270400000, + 1256414400000, + 1269720000000, + 1288468800000, + 1301169600000, + 1414263600000, + 1459022400000, + null + ], + "offsets": [ + -335, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420 + ], + "population": 0 + }, + { + "name": "Asia/Beirut", + "abbrs": [ + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1570413600000, + -1552186800000, + -1538359200000, + -1522551600000, + -1507514400000, + -1490583600000, + -1473645600000, + -1460948400000, + -399866400000, + -386650800000, + -368330400000, + -355114800000, + -336794400000, + -323578800000, + -305172000000, + -291956400000, + -273636000000, + -260420400000, + 78012000000, + 86734800000, + 105055200000, + 118270800000, + 136591200000, + 149806800000, + 168127200000, + 181342800000, + 199749600000, + 212965200000, + 231285600000, + 244501200000, + 262735200000, + 275950800000, + 452210400000, + 466722000000, + 483746400000, + 498258000000, + 515282400000, + 529794000000, + 546818400000, + 561330000000, + 581119200000, + 592952400000, + 610754400000, + 624488400000, + 641512800000, + 656024400000, + 673048800000, + 687560400000, + 704671200000, + 718146000000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796168800000, + 811890000000, + 828223200000, + 843944400000, + 859672800000, + 875394000000, + 891122400000, + 906843600000, + 922572000000, + 941317200000, + 954021600000, + 972766800000, + 985471200000, + 1004216400000, + 1017525600000, + 1035666000000, + 1048975200000, + 1067115600000, + 1080424800000, + 1099170000000, + 1111874400000, + 1130619600000, + 1143324000000, + 1162069200000, + 1174773600000, + 1193518800000, + 1206828000000, + 1224968400000, + 1238277600000, + 1256418000000, + 1269727200000, + 1288472400000, + 1301176800000, + 1319922000000, + 1332626400000, + 1351371600000, + 1364680800000, + 1382821200000, + 1396130400000, + 1414270800000, + 1427580000000, + 1445720400000, + 1459029600000, + 1477774800000, + 1490479200000, + 1509224400000, + 1521928800000, + 1540674000000, + 1553983200000, + 1572123600000, + 1585432800000, + 1603573200000, + 1616882400000, + 1635627600000, + 1648332000000, + 1667077200000, + 1679781600000, + 1698526800000, + 1711836000000, + 1729976400000, + 1743285600000, + 1761426000000, + 1774735200000, + 1792875600000, + 1806184800000, + 1824930000000, + 1837634400000, + 1856379600000, + 1869084000000, + 1887829200000, + 1901138400000, + 1919278800000, + 1932588000000, + 1950728400000, + 1964037600000, + 1982782800000, + 1995487200000, + 2014232400000, + 2026936800000, + 2045682000000, + 2058386400000, + 2077131600000, + 2090440800000, + 2108581200000, + 2121890400000, + 2140030800000, + null + ], + "offsets": [ + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 2200000 + }, + { + "name": "Asia/Bishkek", + "abbrs": [ + "LMT", + "+05", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06" + ], + "untils": [ + -1441169904000, + -1247547600000, + 354909600000, + 370717200000, + 386445600000, + 402253200000, + 417981600000, + 433789200000, + 449604000000, + 465336000000, + 481060800000, + 496785600000, + 512510400000, + 528235200000, + 543960000000, + 559684800000, + 575409600000, + 591134400000, + 606859200000, + 622584000000, + 638308800000, + 654638400000, + 683582400000, + 703018800000, + 717530400000, + 734468400000, + 748980000000, + 765918000000, + 780429600000, + 797367600000, + 811879200000, + 828817200000, + 843933600000, + 859671000000, + 877811400000, + 891120600000, + 909261000000, + 922570200000, + 941315400000, + 954019800000, + 972765000000, + 985469400000, + 1004214600000, + 1017523800000, + 1035664200000, + 1048973400000, + 1067113800000, + 1080423000000, + 1099168200000, + 1111872600000, + null + ], + "offsets": [ + -298.4, + -300, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360 + ], + "population": 870663 + }, + { + "name": "Asia/Brunei", + "abbrs": [ + "LMT", + "BNT", + "BNT" + ], + "untils": [ + -1383464380000, + -1167636600000, + null + ], + "offsets": [ + -459.6667, + -450, + -480 + ], + "population": 417784 + }, + { + "name": "Asia/Calcutta", + "abbrs": [ + "HMT", + "BURT", + "IST", + "IST", + "IST" + ], + "untils": [ + -891582800000, + -872058600000, + -862637400000, + -764145000000, + null + ], + "offsets": [ + -353.3333, + -390, + -330, + -390, + -330 + ], + "population": 0 + }, + { + "name": "Asia/Chita", + "abbrs": [ + "LMT", + "+08", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+08", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+08", + "+09" + ], + "untils": [ + -1579419232000, + -1247558400000, + 354898800000, + 370706400000, + 386434800000, + 402242400000, + 417970800000, + 433778400000, + 449593200000, + 465325200000, + 481050000000, + 496774800000, + 512499600000, + 528224400000, + 543949200000, + 559674000000, + 575398800000, + 591123600000, + 606848400000, + 622573200000, + 638298000000, + 654627600000, + 686080800000, + 695757600000, + 701802000000, + 717526800000, + 733251600000, + 748976400000, + 764701200000, + 780426000000, + 796150800000, + 811875600000, + 828205200000, + 846349200000, + 859654800000, + 877798800000, + 891104400000, + 909248400000, + 922554000000, + 941302800000, + 954003600000, + 972752400000, + 985453200000, + 1004202000000, + 1017507600000, + 1035651600000, + 1048957200000, + 1067101200000, + 1080406800000, + 1099155600000, + 1111856400000, + 1130605200000, + 1143306000000, + 1162054800000, + 1174755600000, + 1193504400000, + 1206810000000, + 1224954000000, + 1238259600000, + 1256403600000, + 1269709200000, + 1288458000000, + 1301158800000, + 1414252800000, + 1459015200000, + null + ], + "offsets": [ + -453.8667, + -480, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -480, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -480, + -540 + ], + "population": 329391 + }, + { + "name": "Asia/Choibalsan", + "abbrs": [ + "LMT", + "ULAT", + "ULAT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT", + "CHOST", + "CHOT" + ], + "untils": [ + -2032933080000, + 252435600000, + 417974400000, + 433778400000, + 449593200000, + 465314400000, + 481042800000, + 496764000000, + 512492400000, + 528213600000, + 543942000000, + 559663200000, + 575391600000, + 591112800000, + 606841200000, + 622562400000, + 638290800000, + 654616800000, + 670345200000, + 686066400000, + 701794800000, + 717516000000, + 733244400000, + 748965600000, + 764694000000, + 780415200000, + 796143600000, + 811864800000, + 828198000000, + 843919200000, + 859647600000, + 875368800000, + 891097200000, + 906818400000, + 988390800000, + 1001692800000, + 1017421200000, + 1033142400000, + 1048870800000, + 1064592000000, + 1080320400000, + 1096041600000, + 1111770000000, + 1127491200000, + 1143219600000, + 1159545600000, + 1206889200000, + 1427479200000, + 1443193200000, + 1458928800000, + 1474642800000, + 1490378400000, + 1506697200000, + 1522432800000, + 1538146800000, + 1553882400000, + 1569596400000, + 1585332000000, + 1601046000000, + 1616781600000, + 1632495600000, + 1648231200000, + 1663945200000, + 1679680800000, + 1695999600000, + 1711735200000, + 1727449200000, + 1743184800000, + 1758898800000, + 1774634400000, + 1790348400000, + 1806084000000, + 1821798000000, + 1837533600000, + 1853852400000, + 1869588000000, + 1885302000000, + 1901037600000, + 1916751600000, + 1932487200000, + 1948201200000, + 1963936800000, + 1979650800000, + 1995386400000, + 2011100400000, + 2026836000000, + 2043154800000, + 2058890400000, + 2074604400000, + 2090340000000, + 2106054000000, + 2121789600000, + 2137503600000, + null + ], + "offsets": [ + -458, + -420, + -480, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 38150 + }, + { + "name": "Asia/Chongqing", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -933494400000, + -923130000000, + -908784000000, + -891594000000, + 515520000000, + 527007600000, + 545155200000, + 558457200000, + 576604800000, + 589906800000, + 608659200000, + 621961200000, + 640108800000, + 653410800000, + 671558400000, + 684860400000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "Asia/Chungking", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -933494400000, + -923130000000, + -908784000000, + -891594000000, + 515520000000, + 527007600000, + 545155200000, + 558457200000, + 576604800000, + 589906800000, + 608659200000, + 621961200000, + 640108800000, + 653410800000, + 671558400000, + 684860400000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "Asia/Colombo", + "abbrs": [ + "MMT", + "+0530", + "+06", + "+0630", + "+0530", + "+0630", + "+06", + "+0530" + ], + "untils": [ + -2019705572000, + -883287000000, + -862639200000, + -764051400000, + 832962600000, + 846266400000, + 1145039400000, + null + ], + "offsets": [ + -319.5333, + -330, + -360, + -390, + -330, + -390, + -360, + -330 + ], + "population": 2180000 + }, + { + "name": "Asia/Dacca", + "abbrs": [ + "HMT", + "BURT", + "IST", + "BURT", + "DACT", + "BDT", + "BDST", + "BDT" + ], + "untils": [ + -891582800000, + -872058600000, + -862637400000, + -576138600000, + 38772000000, + 1245430800000, + 1262278800000, + null + ], + "offsets": [ + -353.3333, + -390, + -330, + -390, + -360, + -360, + -420, + -360 + ], + "population": 0 + }, + { + "name": "Asia/Damascus", + "abbrs": [ + "LMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1577931912000, + -1568592000000, + -1554080400000, + -1537142400000, + -1522630800000, + -1505692800000, + -1491181200000, + -1474243200000, + -1459126800000, + -242265600000, + -228877200000, + -210556800000, + -197427600000, + -178934400000, + -165718800000, + -147398400000, + -134269200000, + -116467200000, + -102646800000, + -84326400000, + -71110800000, + -52704000000, + -39488400000, + -21168000000, + -7952400000, + 10368000000, + 23583600000, + 41904000000, + 55119600000, + 73526400000, + 86742000000, + 105062400000, + 118278000000, + 136598400000, + 149814000000, + 168134400000, + 181350000000, + 199756800000, + 212972400000, + 231292800000, + 241916400000, + 262828800000, + 273452400000, + 418694400000, + 433810800000, + 450316800000, + 465433200000, + 508896000000, + 529196400000, + 541555200000, + 562633200000, + 574387200000, + 594255600000, + 607305600000, + 623199600000, + 638928000000, + 654649200000, + 670456800000, + 686264400000, + 702684000000, + 717886800000, + 733096800000, + 748904400000, + 765151200000, + 780958800000, + 796687200000, + 812494800000, + 828309600000, + 844117200000, + 859759200000, + 875653200000, + 891208800000, + 907189200000, + 922917600000, + 938725200000, + 954540000000, + 970347600000, + 986076000000, + 1001883600000, + 1017612000000, + 1033419600000, + 1049148000000, + 1064955600000, + 1080770400000, + 1096578000000, + 1112306400000, + 1128114000000, + 1143842400000, + 1158872400000, + 1175205600000, + 1193950800000, + 1207260000000, + 1225486800000, + 1238104800000, + 1256850000000, + 1270159200000, + 1288299600000, + 1301608800000, + 1319749200000, + 1333058400000, + 1351198800000, + 1364508000000, + 1382648400000, + 1395957600000, + 1414702800000, + 1427407200000, + 1446152400000, + 1458856800000, + 1477602000000, + 1490911200000, + 1509051600000, + 1522360800000, + 1540501200000, + 1553810400000, + 1571950800000, + 1585260000000, + 1604005200000, + 1616709600000, + 1635454800000, + 1648159200000, + 1666904400000, + 1680213600000, + 1698354000000, + 1711663200000, + 1729803600000, + 1743112800000, + 1761858000000, + 1774562400000, + 1793307600000, + 1806012000000, + 1824757200000, + 1838066400000, + 1856206800000, + 1869516000000, + 1887656400000, + 1900965600000, + 1919106000000, + 1932415200000, + 1951160400000, + 1963864800000, + 1982610000000, + 1995314400000, + 2014059600000, + 2027368800000, + 2045509200000, + 2058818400000, + 2076958800000, + 2090268000000, + 2109013200000, + 2121717600000, + 2140462800000, + null + ], + "offsets": [ + -145.2, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 2560000 + }, + { + "name": "Asia/Dhaka", + "abbrs": [ + "HMT", + "BURT", + "IST", + "BURT", + "DACT", + "BDT", + "BDST", + "BDT" + ], + "untils": [ + -891582800000, + -872058600000, + -862637400000, + -576138600000, + 38772000000, + 1245430800000, + 1262278800000, + null + ], + "offsets": [ + -353.3333, + -390, + -330, + -390, + -360, + -360, + -420, + -360 + ], + "population": 15669000 + }, + { + "name": "Asia/Dili", + "abbrs": [ + "LMT", + "TLT", + "JST", + "TLT", + "WITA", + "TLT" + ], + "untils": [ + -1830414140000, + -879152400000, + -766054800000, + 199897200000, + 969120000000, + null + ], + "offsets": [ + -502.3333, + -480, + -540, + -540, + -480, + -540 + ], + "population": 193563 + }, + { + "name": "Asia/Dubai", + "abbrs": [ + "LMT", + "GST" + ], + "untils": [ + -1577936472000, + null + ], + "offsets": [ + -221.2, + -240 + ], + "population": 3933000 + }, + { + "name": "Asia/Dushanbe", + "abbrs": [ + "LMT", + "+05", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+05" + ], + "untils": [ + -1441168512000, + -1247547600000, + 354909600000, + 370717200000, + 386445600000, + 402253200000, + 417981600000, + 433789200000, + 449604000000, + 465336000000, + 481060800000, + 496785600000, + 512510400000, + 528235200000, + 543960000000, + 559684800000, + 575409600000, + 591134400000, + 606859200000, + 622584000000, + 638308800000, + 654638400000, + 684363600000, + null + ], + "offsets": [ + -275.2, + -300, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -300 + ], + "population": 756143 + }, + { + "name": "Asia/Famagusta", + "abbrs": [ + "LMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "+03" + ], + "untils": [ + -1518920148000, + 166572000000, + 182293200000, + 200959200000, + 213829200000, + 228866400000, + 243982800000, + 260316000000, + 276123600000, + 291765600000, + 307486800000, + 323820000000, + 338936400000, + 354664800000, + 370386000000, + 386114400000, + 401835600000, + 417564000000, + 433285200000, + 449013600000, + 465339600000, + 481068000000, + 496789200000, + 512517600000, + 528238800000, + 543967200000, + 559688400000, + 575416800000, + 591138000000, + 606866400000, + 622587600000, + 638316000000, + 654642000000, + 670370400000, + 686091600000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796168800000, + 811890000000, + 828223200000, + 843944400000, + 859672800000, + 875394000000, + 891122400000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1473282000000, + null + ], + "offsets": [ + -135.8, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -180 + ], + "population": 0 + }, + { + "name": "Asia/Gaza", + "abbrs": [ + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -933645600000, + -857358000000, + -844300800000, + -825822000000, + -812685600000, + -794199600000, + -779853600000, + -762656400000, + -748310400000, + -731127600000, + -399088800000, + -386650800000, + -368330400000, + -355114800000, + -336790800000, + -323654400000, + -305168400000, + -292032000000, + -273632400000, + -260496000000, + -242096400000, + -228960000000, + -210560400000, + -197424000000, + -178938000000, + -165801600000, + -147402000000, + -134265600000, + -115866000000, + -102643200000, + -84330000000, + -81313200000, + 142380000000, + 150843600000, + 167176800000, + 178664400000, + 482277600000, + 495579600000, + 516751200000, + 526424400000, + 545436000000, + 558478800000, + 576626400000, + 589323600000, + 609890400000, + 620773200000, + 638316000000, + 651618000000, + 669765600000, + 683672400000, + 701820000000, + 715726800000, + 733701600000, + 747176400000, + 765151200000, + 778021200000, + 796600800000, + 810075600000, + 820447200000, + 828655200000, + 843170400000, + 860104800000, + 874620000000, + 891554400000, + 906069600000, + 924213600000, + 939934800000, + 956268000000, + 971989200000, + 987717600000, + 1003438800000, + 1019167200000, + 1034888400000, + 1050616800000, + 1066338000000, + 1082066400000, + 1096581600000, + 1113516000000, + 1128380400000, + 1143842400000, + 1158872400000, + 1175378400000, + 1189638000000, + 1206655200000, + 1219957200000, + 1238104800000, + 1252015200000, + 1269640860000, + 1281474000000, + 1301608860000, + 1312146000000, + 1333058400000, + 1348178400000, + 1364508000000, + 1380229200000, + 1395957600000, + 1414098000000, + 1427493600000, + 1445547600000, + 1458946800000, + 1477692000000, + 1490396400000, + 1509141600000, + 1522450800000, + 1540591200000, + 1553900400000, + 1572040800000, + 1585350000000, + 1604095200000, + 1616799600000, + 1635544800000, + 1648249200000, + 1666994400000, + 1679698800000, + 1698444000000, + 1711753200000, + 1729893600000, + 1743202800000, + 1761343200000, + 1774652400000, + 1793397600000, + 1806102000000, + 1824847200000, + 1837551600000, + 1856296800000, + 1869606000000, + 1887746400000, + 1901055600000, + 1919196000000, + 1932505200000, + 1950645600000, + 1963954800000, + 1982700000000, + 1995404400000, + 2014149600000, + 2026854000000, + 2045599200000, + 2058908400000, + 2077048800000, + 2090358000000, + 2108498400000, + 2121807600000, + 2140552800000, + null + ], + "offsets": [ + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 1816000 + }, + { + "name": "Asia/Harbin", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -933494400000, + -923130000000, + -908784000000, + -891594000000, + 515520000000, + 527007600000, + 545155200000, + 558457200000, + 576604800000, + 589906800000, + 608659200000, + 621961200000, + 640108800000, + 653410800000, + 671558400000, + 684860400000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "Asia/Hebron", + "abbrs": [ + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -933645600000, + -857358000000, + -844300800000, + -825822000000, + -812685600000, + -794199600000, + -779853600000, + -762656400000, + -748310400000, + -731127600000, + -399088800000, + -386650800000, + -368330400000, + -355114800000, + -336790800000, + -323654400000, + -305168400000, + -292032000000, + -273632400000, + -260496000000, + -242096400000, + -228960000000, + -210560400000, + -197424000000, + -178938000000, + -165801600000, + -147402000000, + -134265600000, + -115866000000, + -102643200000, + -84330000000, + -81313200000, + 142380000000, + 150843600000, + 167176800000, + 178664400000, + 482277600000, + 495579600000, + 516751200000, + 526424400000, + 545436000000, + 558478800000, + 576626400000, + 589323600000, + 609890400000, + 620773200000, + 638316000000, + 651618000000, + 669765600000, + 683672400000, + 701820000000, + 715726800000, + 733701600000, + 747176400000, + 765151200000, + 778021200000, + 796600800000, + 810075600000, + 820447200000, + 828655200000, + 843170400000, + 860104800000, + 874620000000, + 891554400000, + 906069600000, + 924213600000, + 939934800000, + 956268000000, + 971989200000, + 987717600000, + 1003438800000, + 1019167200000, + 1034888400000, + 1050616800000, + 1066338000000, + 1082066400000, + 1096581600000, + 1113516000000, + 1128380400000, + 1143842400000, + 1158872400000, + 1175378400000, + 1189638000000, + 1206655200000, + 1220216400000, + 1238104800000, + 1252015200000, + 1269554400000, + 1281474000000, + 1301608860000, + 1312146000000, + 1314655200000, + 1317330000000, + 1333058400000, + 1348178400000, + 1364508000000, + 1380229200000, + 1395957600000, + 1414098000000, + 1427493600000, + 1445547600000, + 1458946800000, + 1477692000000, + 1490396400000, + 1509141600000, + 1522450800000, + 1540591200000, + 1553900400000, + 1572040800000, + 1585350000000, + 1604095200000, + 1616799600000, + 1635544800000, + 1648249200000, + 1666994400000, + 1679698800000, + 1698444000000, + 1711753200000, + 1729893600000, + 1743202800000, + 1761343200000, + 1774652400000, + 1793397600000, + 1806102000000, + 1824847200000, + 1837551600000, + 1856296800000, + 1869606000000, + 1887746400000, + 1901055600000, + 1919196000000, + 1932505200000, + 1950645600000, + 1963954800000, + 1982700000000, + 1995404400000, + 2014149600000, + 2026854000000, + 2045599200000, + 2058908400000, + 2077048800000, + 2090358000000, + 2108498400000, + 2121807600000, + 2140552800000, + null + ], + "offsets": [ + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 250000 + }, + { + "name": "Asia/Ho_Chi_Minh", + "abbrs": [ + "LMT", + "PLMT", + "ICT", + "IDT", + "JST", + "ICT", + "IDT", + "ICT", + "IDT", + "ICT" + ], + "untils": [ + -2004073600000, + -1851577590000, + -852105600000, + -782643600000, + -767869200000, + -718095600000, + -457776000000, + -315648000000, + 171820800000, + null + ], + "offsets": [ + -426.6667, + -426.5, + -420, + -480, + -540, + -420, + -480, + -420, + -480, + -420 + ], + "population": 8957000 + }, + { + "name": "Asia/Hong_Kong", + "abbrs": [ + "LMT", + "HKT", + "HKST", + "HKT", + "JST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT" + ], + "untils": [ + -2056693002000, + -907389000000, + -891667800000, + -884246400000, + -766746000000, + -747981000000, + -728544600000, + -717049800000, + -694503000000, + -683785800000, + -668064600000, + -654755400000, + -636615000000, + -623305800000, + -605165400000, + -591856200000, + -573715800000, + -559801800000, + -542352600000, + -528352200000, + -510211800000, + -498112200000, + -478762200000, + -466662600000, + -446707800000, + -435213000000, + -415258200000, + -403158600000, + -383808600000, + -371709000000, + -352359000000, + -340259400000, + -320909400000, + -308809800000, + -288855000000, + -277360200000, + -257405400000, + -245910600000, + -225955800000, + -213856200000, + -194506200000, + -182406600000, + -163056600000, + -148537800000, + -132816600000, + -117088200000, + -101367000000, + -85638600000, + -69312600000, + -53584200000, + -37863000000, + -22134600000, + -6413400000, + 9315000000, + 25036200000, + 40764600000, + 56485800000, + 72214200000, + 88540200000, + 104268600000, + 119989800000, + 126041400000, + 151439400000, + 167167800000, + 182889000000, + 198617400000, + 214338600000, + 295385400000, + 309292200000, + null + ], + "offsets": [ + -456.7, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 7275000 + }, + { + "name": "Asia/Hovd", + "abbrs": [ + "LMT", + "HOVT", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT", + "HOVST", + "HOVT" + ], + "untils": [ + -2032927596000, + 252439200000, + 417978000000, + 433785600000, + 449600400000, + 465321600000, + 481050000000, + 496771200000, + 512499600000, + 528220800000, + 543949200000, + 559670400000, + 575398800000, + 591120000000, + 606848400000, + 622569600000, + 638298000000, + 654624000000, + 670352400000, + 686073600000, + 701802000000, + 717523200000, + 733251600000, + 748972800000, + 764701200000, + 780422400000, + 796150800000, + 811872000000, + 828205200000, + 843926400000, + 859654800000, + 875376000000, + 891104400000, + 906825600000, + 988398000000, + 1001700000000, + 1017428400000, + 1033149600000, + 1048878000000, + 1064599200000, + 1080327600000, + 1096048800000, + 1111777200000, + 1127498400000, + 1143226800000, + 1159552800000, + 1427482800000, + 1443196800000, + 1458932400000, + 1474646400000, + 1490382000000, + 1506700800000, + 1522436400000, + 1538150400000, + 1553886000000, + 1569600000000, + 1585335600000, + 1601049600000, + 1616785200000, + 1632499200000, + 1648234800000, + 1663948800000, + 1679684400000, + 1696003200000, + 1711738800000, + 1727452800000, + 1743188400000, + 1758902400000, + 1774638000000, + 1790352000000, + 1806087600000, + 1821801600000, + 1837537200000, + 1853856000000, + 1869591600000, + 1885305600000, + 1901041200000, + 1916755200000, + 1932490800000, + 1948204800000, + 1963940400000, + 1979654400000, + 1995390000000, + 2011104000000, + 2026839600000, + 2043158400000, + 2058894000000, + 2074608000000, + 2090343600000, + 2106057600000, + 2121793200000, + 2137507200000, + null + ], + "offsets": [ + -366.6, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420 + ], + "population": 81479 + }, + { + "name": "Asia/Irkutsk", + "abbrs": [ + "IMT", + "+07", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+07", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08", + "+09", + "+08" + ], + "untils": [ + -1575874625000, + -1247554800000, + 354902400000, + 370710000000, + 386438400000, + 402246000000, + 417974400000, + 433782000000, + 449596800000, + 465328800000, + 481053600000, + 496778400000, + 512503200000, + 528228000000, + 543952800000, + 559677600000, + 575402400000, + 591127200000, + 606852000000, + 622576800000, + 638301600000, + 654631200000, + 686084400000, + 695761200000, + 701805600000, + 717530400000, + 733255200000, + 748980000000, + 764704800000, + 780429600000, + 796154400000, + 811879200000, + 828208800000, + 846352800000, + 859658400000, + 877802400000, + 891108000000, + 909252000000, + 922557600000, + 941306400000, + 954007200000, + 972756000000, + 985456800000, + 1004205600000, + 1017511200000, + 1035655200000, + 1048960800000, + 1067104800000, + 1080410400000, + 1099159200000, + 1111860000000, + 1130608800000, + 1143309600000, + 1162058400000, + 1174759200000, + 1193508000000, + 1206813600000, + 1224957600000, + 1238263200000, + 1256407200000, + 1269712800000, + 1288461600000, + 1301162400000, + 1414256400000, + null + ], + "offsets": [ + -417.0833, + -420, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -420, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 601993 + }, + { + "name": "Asia/Istanbul", + "abbrs": [ + "IMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "+03" + ], + "untils": [ + -1869875816000, + -1693706400000, + -1680490800000, + -1570413600000, + -1552186800000, + -1538359200000, + -1522551600000, + -1507514400000, + -1490583600000, + -1440208800000, + -1428030000000, + -1409709600000, + -1396494000000, + -931140000000, + -922762800000, + -917834400000, + -892436400000, + -875844000000, + -857358000000, + -781063200000, + -764737200000, + -744343200000, + -733806000000, + -716436000000, + -701924400000, + -684986400000, + -670474800000, + -654141600000, + -639025200000, + -621828000000, + -606970800000, + -590032800000, + -575434800000, + -235620000000, + -228279600000, + -177732000000, + -165726000000, + 10533600000, + 23835600000, + 41983200000, + 55285200000, + 74037600000, + 87339600000, + 107910000000, + 121219200000, + 133920000000, + 152676000000, + 165362400000, + 183502800000, + 202428000000, + 215557200000, + 228866400000, + 245797200000, + 260316000000, + 277246800000, + 308779200000, + 323827200000, + 340228800000, + 354672000000, + 371678400000, + 386121600000, + 403128000000, + 428446800000, + 433886400000, + 482792400000, + 496702800000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 686098800000, + 701823600000, + 717548400000, + 733273200000, + 748998000000, + 764118000000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301274000000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396227600000, + 1414285200000, + 1427590800000, + 1446944400000, + 1459040400000, + 1473195600000, + null + ], + "offsets": [ + -116.9333, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -180 + ], + "population": 0 + }, + { + "name": "Asia/Jakarta", + "abbrs": [ + "BMT", + "JAVT", + "WIB", + "JST", + "WIB", + "WIB", + "WIB", + "WIB" + ], + "untils": [ + -1451719200000, + -1172906400000, + -876641400000, + -766054800000, + -683883000000, + -620812800000, + -189415800000, + null + ], + "offsets": [ + -427.2, + -440, + -450, + -540, + -450, + -480, + -450, + -420 + ], + "population": 30539000 + }, + { + "name": "Asia/Jayapura", + "abbrs": [ + "LMT", + "WIT", + "ACST", + "WIT" + ], + "untils": [ + -1172913768000, + -799491600000, + -189423000000, + null + ], + "offsets": [ + -562.8, + -540, + -570, + -540 + ], + "population": 256705 + }, + { + "name": "Asia/Jerusalem", + "abbrs": [ + "JMT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDDT", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST" + ], + "untils": [ + -1641003640000, + -933645600000, + -857358000000, + -844300800000, + -825822000000, + -812685600000, + -794199600000, + -779853600000, + -762656400000, + -748310400000, + -731127600000, + -681962400000, + -673243200000, + -667962000000, + -652327200000, + -636426000000, + -622087200000, + -608947200000, + -591847200000, + -572486400000, + -558576000000, + -542851200000, + -527731200000, + -514425600000, + -490845600000, + -482986800000, + -459475200000, + -451537200000, + -428551200000, + -418262400000, + -400032000000, + -387428400000, + 142380000000, + 150843600000, + 167176800000, + 178664400000, + 482277600000, + 495579600000, + 516751200000, + 526424400000, + 545436000000, + 558478800000, + 576626400000, + 589323600000, + 609890400000, + 620773200000, + 638316000000, + 651618000000, + 669765600000, + 683672400000, + 701820000000, + 715726800000, + 733701600000, + 747176400000, + 765151200000, + 778021200000, + 796600800000, + 810075600000, + 826840800000, + 842821200000, + 858895200000, + 874184400000, + 890344800000, + 905029200000, + 923011200000, + 936313200000, + 955670400000, + 970783200000, + 986770800000, + 1001282400000, + 1017356400000, + 1033941600000, + 1048806000000, + 1065132000000, + 1081292400000, + 1095804000000, + 1112313600000, + 1128812400000, + 1143763200000, + 1159657200000, + 1175212800000, + 1189897200000, + 1206662400000, + 1223161200000, + 1238112000000, + 1254006000000, + 1269561600000, + 1284246000000, + 1301616000000, + 1317510000000, + 1333065600000, + 1348354800000, + 1364515200000, + 1382828400000, + 1395964800000, + 1414278000000, + 1427414400000, + 1445727600000, + 1458864000000, + 1477782000000, + 1490313600000, + 1509231600000, + 1521763200000, + 1540681200000, + 1553817600000, + 1572130800000, + 1585267200000, + 1603580400000, + 1616716800000, + 1635634800000, + 1648166400000, + 1667084400000, + 1679616000000, + 1698534000000, + 1711670400000, + 1729983600000, + 1743120000000, + 1761433200000, + 1774569600000, + 1792882800000, + 1806019200000, + 1824937200000, + 1837468800000, + 1856386800000, + 1868918400000, + 1887836400000, + 1900972800000, + 1919286000000, + 1932422400000, + 1950735600000, + 1963872000000, + 1982790000000, + 1995321600000, + 2014239600000, + 2026771200000, + 2045689200000, + 2058220800000, + 2077138800000, + 2090275200000, + 2108588400000, + 2121724800000, + 2140038000000, + null + ], + "offsets": [ + -140.6667, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -240, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 809112 + }, + { + "name": "Asia/Kabul", + "abbrs": [ + "AFT", + "AFT" + ], + "untils": [ + -788932800000, + null + ], + "offsets": [ + -240, + -270 + ], + "population": 4635000 + }, + { + "name": "Asia/Kamchatka", + "abbrs": [ + "LMT", + "+11", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+11", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+13", + "+12", + "+11", + "+12" + ], + "untils": [ + -1487759676000, + -1247569200000, + 354888000000, + 370695600000, + 386424000000, + 402231600000, + 417960000000, + 433767600000, + 449582400000, + 465314400000, + 481039200000, + 496764000000, + 512488800000, + 528213600000, + 543938400000, + 559663200000, + 575388000000, + 591112800000, + 606837600000, + 622562400000, + 638287200000, + 654616800000, + 686070000000, + 695746800000, + 701791200000, + 717516000000, + 733240800000, + 748965600000, + 764690400000, + 780415200000, + 796140000000, + 811864800000, + 828194400000, + 846338400000, + 859644000000, + 877788000000, + 891093600000, + 909237600000, + 922543200000, + 941292000000, + 953992800000, + 972741600000, + 985442400000, + 1004191200000, + 1017496800000, + 1035640800000, + 1048946400000, + 1067090400000, + 1080396000000, + 1099144800000, + 1111845600000, + 1130594400000, + 1143295200000, + 1162044000000, + 1174744800000, + 1193493600000, + 1206799200000, + 1224943200000, + 1238248800000, + 1256392800000, + 1288450800000, + 1301151600000, + null + ], + "offsets": [ + -634.6, + -660, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -660, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -660, + -720 + ], + "population": 179526 + }, + { + "name": "Asia/Karachi", + "abbrs": [ + "LMT", + "IST", + "IST", + "IST", + "KART", + "PKT", + "PKST", + "PKT", + "PKST", + "PKT", + "PKST", + "PKT" + ], + "untils": [ + -1988166492000, + -862637400000, + -764145000000, + -576135000000, + 38775600000, + 1018119600000, + 1033840800000, + 1212260400000, + 1225476000000, + 1239735600000, + 1257012000000, + null + ], + "offsets": [ + -268.2, + -330, + -390, + -330, + -300, + -300, + -360, + -300, + -360, + -300, + -360, + -300 + ], + "population": 23500000 + }, + { + "name": "Asia/Kashgar", + "abbrs": [ + "LMT", + "XJT" + ], + "untils": [ + -1325483420000, + null + ], + "offsets": [ + -350.3333, + -360 + ], + "population": 0 + }, + { + "name": "Asia/Kathmandu", + "abbrs": [ + "LMT", + "IST", + "NPT" + ], + "untils": [ + -1577943676000, + 504901800000, + null + ], + "offsets": [ + -341.2667, + -330, + -345 + ], + "population": 1180000 + }, + { + "name": "Asia/Katmandu", + "abbrs": [ + "LMT", + "IST", + "NPT" + ], + "untils": [ + -1577943676000, + 504901800000, + null + ], + "offsets": [ + -341.2667, + -330, + -345 + ], + "population": 0 + }, + { + "name": "Asia/Khandyga", + "abbrs": [ + "LMT", + "+08", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+08", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+09" + ], + "untils": [ + -1579424533000, + -1247558400000, + 354898800000, + 370706400000, + 386434800000, + 402242400000, + 417970800000, + 433778400000, + 449593200000, + 465325200000, + 481050000000, + 496774800000, + 512499600000, + 528224400000, + 543949200000, + 559674000000, + 575398800000, + 591123600000, + 606848400000, + 622573200000, + 638298000000, + 654627600000, + 686080800000, + 695757600000, + 701802000000, + 717526800000, + 733251600000, + 748976400000, + 764701200000, + 780426000000, + 796150800000, + 811875600000, + 828205200000, + 846349200000, + 859654800000, + 877798800000, + 891104400000, + 909248400000, + 922554000000, + 941302800000, + 954003600000, + 972752400000, + 985453200000, + 1004202000000, + 1017507600000, + 1035651600000, + 1048957200000, + 1067101200000, + 1072882800000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143302400000, + 1162051200000, + 1174752000000, + 1193500800000, + 1206806400000, + 1224950400000, + 1238256000000, + 1256400000000, + 1269705600000, + 1288454400000, + 1301155200000, + 1315832400000, + 1414252800000, + null + ], + "offsets": [ + -542.2167, + -480, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -480, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -540 + ], + "population": 6638 + }, + { + "name": "Asia/Kolkata", + "abbrs": [ + "HMT", + "BURT", + "IST", + "IST", + "IST" + ], + "untils": [ + -891582800000, + -872058600000, + -862637400000, + -764145000000, + null + ], + "offsets": [ + -353.3333, + -390, + -330, + -390, + -330 + ], + "population": 14667000 + }, + { + "name": "Asia/Krasnoyarsk", + "abbrs": [ + "LMT", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07" + ], + "untils": [ + -1577513486000, + -1247551200000, + 354906000000, + 370713600000, + 386442000000, + 402249600000, + 417978000000, + 433785600000, + 449600400000, + 465332400000, + 481057200000, + 496782000000, + 512506800000, + 528231600000, + 543956400000, + 559681200000, + 575406000000, + 591130800000, + 606855600000, + 622580400000, + 638305200000, + 654634800000, + 686088000000, + 695764800000, + 701809200000, + 717534000000, + 733258800000, + 748983600000, + 764708400000, + 780433200000, + 796158000000, + 811882800000, + 828212400000, + 846356400000, + 859662000000, + 877806000000, + 891111600000, + 909255600000, + 922561200000, + 941310000000, + 954010800000, + 972759600000, + 985460400000, + 1004209200000, + 1017514800000, + 1035658800000, + 1048964400000, + 1067108400000, + 1080414000000, + 1099162800000, + 1111863600000, + 1130612400000, + 1143313200000, + 1162062000000, + 1174762800000, + 1193511600000, + 1206817200000, + 1224961200000, + 1238266800000, + 1256410800000, + 1269716400000, + 1288465200000, + 1301166000000, + 1414260000000, + null + ], + "offsets": [ + -371.4333, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420 + ], + "population": 1007000 + }, + { + "name": "Asia/Kuala_Lumpur", + "abbrs": [ + "SMT", + "MALT", + "MALST", + "MALT", + "MALT", + "JST", + "MALT", + "MYT" + ], + "untils": [ + -2038200925000, + -1167634800000, + -1073028000000, + -894180000000, + -879665400000, + -767005200000, + 378664200000, + null + ], + "offsets": [ + -415.4167, + -420, + -440, + -440, + -450, + -540, + -450, + -480 + ], + "population": 7088000 + }, + { + "name": "Asia/Kuching", + "abbrs": [ + "LMT", + "BORT", + "BORT", + "BORTST", + "BORT", + "BORTST", + "BORT", + "BORTST", + "BORT", + "BORTST", + "BORT", + "BORTST", + "BORT", + "BORTST", + "BORT", + "BORTST", + "BORT", + "JST", + "BORT", + "MYT" + ], + "untils": [ + -1383463280000, + -1167636600000, + -1082448000000, + -1074586800000, + -1050825600000, + -1042964400000, + -1019289600000, + -1011428400000, + -987753600000, + -979892400000, + -956217600000, + -948356400000, + -924595200000, + -916734000000, + -893059200000, + -885198000000, + -879667200000, + -767005200000, + 378662400000, + null + ], + "offsets": [ + -441.3333, + -450, + -480, + -500, + -480, + -500, + -480, + -500, + -480, + -500, + -480, + -500, + -480, + -500, + -480, + -500, + -480, + -540, + -480, + -480 + ], + "population": 134317 + }, + { + "name": "Asia/Kuwait", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -719636812000, + null + ], + "offsets": [ + -186.8667, + -180 + ], + "population": 0 + }, + { + "name": "Asia/Macao", + "abbrs": [ + "LMT", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "CST" + ], + "untils": [ + -1830411260000, + -277360200000, + -257405400000, + -245910600000, + -225955800000, + -214473600000, + -194506200000, + -182406600000, + -163056600000, + -150969600000, + -131619600000, + -117088200000, + -101367000000, + -85638600000, + -69312600000, + -53584200000, + -37863000000, + -22134600000, + -6413400000, + 9315000000, + 25036200000, + 40764600000, + 56485800000, + 72201600000, + 87922800000, + 103651200000, + 119977200000, + 135705600000, + 151439400000, + 167167800000, + 182889000000, + 198617400000, + 214338600000, + 230067000000, + 245788200000, + 261504000000, + 277225200000, + 292953600000, + 309279600000, + 325008000000, + 340729200000, + 945619200000, + null + ], + "offsets": [ + -454.3333, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -480 + ], + "population": 0 + }, + { + "name": "Asia/Macau", + "abbrs": [ + "LMT", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "MOST", + "MOT", + "CST" + ], + "untils": [ + -1830411260000, + -277360200000, + -257405400000, + -245910600000, + -225955800000, + -214473600000, + -194506200000, + -182406600000, + -163056600000, + -150969600000, + -131619600000, + -117088200000, + -101367000000, + -85638600000, + -69312600000, + -53584200000, + -37863000000, + -22134600000, + -6413400000, + 9315000000, + 25036200000, + 40764600000, + 56485800000, + 72201600000, + 87922800000, + 103651200000, + 119977200000, + 135705600000, + 151439400000, + 167167800000, + 182889000000, + 198617400000, + 214338600000, + 230067000000, + 245788200000, + 261504000000, + 277225200000, + 292953600000, + 309279600000, + 325008000000, + 340729200000, + 945619200000, + null + ], + "offsets": [ + -454.3333, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -480 + ], + "population": 566375 + }, + { + "name": "Asia/Magadan", + "abbrs": [ + "LMT", + "+10", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+10", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+10", + "+11" + ], + "untils": [ + -1441188192000, + -1247565600000, + 354891600000, + 370699200000, + 386427600000, + 402235200000, + 417963600000, + 433771200000, + 449586000000, + 465318000000, + 481042800000, + 496767600000, + 512492400000, + 528217200000, + 543942000000, + 559666800000, + 575391600000, + 591116400000, + 606841200000, + 622566000000, + 638290800000, + 654620400000, + 686073600000, + 695750400000, + 701794800000, + 717519600000, + 733244400000, + 748969200000, + 764694000000, + 780418800000, + 796143600000, + 811868400000, + 828198000000, + 846342000000, + 859647600000, + 877791600000, + 891097200000, + 909241200000, + 922546800000, + 941295600000, + 953996400000, + 972745200000, + 985446000000, + 1004194800000, + 1017500400000, + 1035644400000, + 1048950000000, + 1067094000000, + 1080399600000, + 1099148400000, + 1111849200000, + 1130598000000, + 1143298800000, + 1162047600000, + 1174748400000, + 1193497200000, + 1206802800000, + 1224946800000, + 1238252400000, + 1256396400000, + 1269702000000, + 1288450800000, + 1301151600000, + 1414245600000, + 1461427200000, + null + ], + "offsets": [ + -603.2, + -600, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -600, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -600, + -660 + ], + "population": 95263 + }, + { + "name": "Asia/Makassar", + "abbrs": [ + "LMT", + "MMT", + "WITA", + "JST", + "WITA" + ], + "untils": [ + -1577951856000, + -1172908656000, + -880272000000, + -766054800000, + null + ], + "offsets": [ + -477.6, + -477.6, + -480, + -540, + -480 + ], + "population": 1484000 + }, + { + "name": "Asia/Manila", + "abbrs": [ + "PHT", + "PHST", + "PHT", + "JST", + "PHT", + "PHST", + "PHT", + "PHST", + "PHT" + ], + "untils": [ + -1046678400000, + -1038733200000, + -873273600000, + -794221200000, + -496224000000, + -489315600000, + 259344000000, + 275151600000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 24123000 + }, + { + "name": "Asia/Muscat", + "abbrs": [ + "LMT", + "GST" + ], + "untils": [ + -1577936472000, + null + ], + "offsets": [ + -221.2, + -240 + ], + "population": 0 + }, + { + "name": "Asia/Nicosia", + "abbrs": [ + "LMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1518920008000, + 166572000000, + 182293200000, + 200959200000, + 213829200000, + 228866400000, + 243982800000, + 260316000000, + 276123600000, + 291765600000, + 307486800000, + 323820000000, + 338936400000, + 354664800000, + 370386000000, + 386114400000, + 401835600000, + 417564000000, + 433285200000, + 449013600000, + 465339600000, + 481068000000, + 496789200000, + 512517600000, + 528238800000, + 543967200000, + 559688400000, + 575416800000, + 591138000000, + 606866400000, + 622587600000, + 638316000000, + 654642000000, + 670370400000, + 686091600000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796168800000, + 811890000000, + 828223200000, + 843944400000, + 859672800000, + 875394000000, + 891122400000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -133.4667, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 321816 + }, + { + "name": "Asia/Novokuznetsk", + "abbrs": [ + "LMT", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07" + ], + "untils": [ + -1441259328000, + -1247551200000, + 354906000000, + 370713600000, + 386442000000, + 402249600000, + 417978000000, + 433785600000, + 449600400000, + 465332400000, + 481057200000, + 496782000000, + 512506800000, + 528231600000, + 543956400000, + 559681200000, + 575406000000, + 591130800000, + 606855600000, + 622580400000, + 638305200000, + 654634800000, + 686088000000, + 695764800000, + 701809200000, + 717534000000, + 733258800000, + 748983600000, + 764708400000, + 780433200000, + 796158000000, + 811882800000, + 828212400000, + 846356400000, + 859662000000, + 877806000000, + 891111600000, + 909255600000, + 922561200000, + 941310000000, + 954010800000, + 972759600000, + 985460400000, + 1004209200000, + 1017514800000, + 1035658800000, + 1048964400000, + 1067108400000, + 1080414000000, + 1099162800000, + 1111863600000, + 1130612400000, + 1143313200000, + 1162062000000, + 1174762800000, + 1193511600000, + 1206817200000, + 1224961200000, + 1238266800000, + 1256410800000, + 1288468800000, + 1301169600000, + null + ], + "offsets": [ + -348.8, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -360, + -420 + ], + "population": 549383 + }, + { + "name": "Asia/Novosibirsk", + "abbrs": [ + "LMT", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07" + ], + "untils": [ + -1579476700000, + -1247551200000, + 354906000000, + 370713600000, + 386442000000, + 402249600000, + 417978000000, + 433785600000, + 449600400000, + 465332400000, + 481057200000, + 496782000000, + 512506800000, + 528231600000, + 543956400000, + 559681200000, + 575406000000, + 591130800000, + 606855600000, + 622580400000, + 638305200000, + 654634800000, + 686088000000, + 695764800000, + 701809200000, + 717534000000, + 733258800000, + 738086400000, + 748987200000, + 764712000000, + 780436800000, + 796161600000, + 811886400000, + 828216000000, + 846360000000, + 859665600000, + 877809600000, + 891115200000, + 909259200000, + 922564800000, + 941313600000, + 954014400000, + 972763200000, + 985464000000, + 1004212800000, + 1017518400000, + 1035662400000, + 1048968000000, + 1067112000000, + 1080417600000, + 1099166400000, + 1111867200000, + 1130616000000, + 1143316800000, + 1162065600000, + 1174766400000, + 1193515200000, + 1206820800000, + 1224964800000, + 1238270400000, + 1256414400000, + 1269720000000, + 1288468800000, + 1301169600000, + 1414263600000, + 1469304000000, + null + ], + "offsets": [ + -331.6667, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -360, + -420, + -480, + -420, + -480, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420 + ], + "population": 1486000 + }, + { + "name": "Asia/Omsk", + "abbrs": [ + "LMT", + "+05", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+05", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06" + ], + "untils": [ + -1582088010000, + -1247547600000, + 354909600000, + 370717200000, + 386445600000, + 402253200000, + 417981600000, + 433789200000, + 449604000000, + 465336000000, + 481060800000, + 496785600000, + 512510400000, + 528235200000, + 543960000000, + 559684800000, + 575409600000, + 591134400000, + 606859200000, + 622584000000, + 638308800000, + 654638400000, + 686091600000, + 695768400000, + 701812800000, + 717537600000, + 733262400000, + 748987200000, + 764712000000, + 780436800000, + 796161600000, + 811886400000, + 828216000000, + 846360000000, + 859665600000, + 877809600000, + 891115200000, + 909259200000, + 922564800000, + 941313600000, + 954014400000, + 972763200000, + 985464000000, + 1004212800000, + 1017518400000, + 1035662400000, + 1048968000000, + 1067112000000, + 1080417600000, + 1099166400000, + 1111867200000, + 1130616000000, + 1143316800000, + 1162065600000, + 1174766400000, + 1193515200000, + 1206820800000, + 1224964800000, + 1238270400000, + 1256414400000, + 1269720000000, + 1288468800000, + 1301169600000, + 1414263600000, + null + ], + "offsets": [ + -293.5, + -300, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -300, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360 + ], + "population": 1154000 + }, + { + "name": "Asia/Oral", + "abbrs": [ + "LMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05" + ], + "untils": [ + -1441164324000, + -1247544000000, + 354913200000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 622591200000, + 638316000000, + 654645600000, + 670370400000, + 686095200000, + 695772000000, + 717544800000, + 733269600000, + 748994400000, + 764719200000, + 780444000000, + 796168800000, + 811893600000, + 828223200000, + 846367200000, + 859672800000, + 877816800000, + 891122400000, + 909266400000, + 922572000000, + 941320800000, + 954021600000, + 972770400000, + 985471200000, + 1004220000000, + 1017525600000, + 1035669600000, + 1048975200000, + 1067119200000, + 1080424800000, + null + ], + "offsets": [ + -205.4, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300 + ], + "population": 271900 + }, + { + "name": "Asia/Phnom_Penh", + "abbrs": [ + "BMT", + "ICT" + ], + "untils": [ + -1570084924000, + null + ], + "offsets": [ + -402.0667, + -420 + ], + "population": 0 + }, + { + "name": "Asia/Pontianak", + "abbrs": [ + "LMT", + "PMT", + "WIB", + "JST", + "WIB", + "WIB", + "WIB", + "WITA", + "WIB" + ], + "untils": [ + -1946186240000, + -1172906240000, + -881220600000, + -766054800000, + -683883000000, + -620812800000, + -189415800000, + 567964800000, + null + ], + "offsets": [ + -437.3333, + -437.3333, + -450, + -540, + -450, + -480, + -450, + -480, + -420 + ], + "population": 234021 + }, + { + "name": "Asia/Pyongyang", + "abbrs": [ + "LMT", + "KST", + "JCST", + "JST", + "KST", + "KST" + ], + "untils": [ + -1948782180000, + -1830414600000, + -1017824400000, + -768646800000, + 1439564400000, + null + ], + "offsets": [ + -503, + -510, + -540, + -540, + -540, + -510 + ], + "population": 2850000 + }, + { + "name": "Asia/Qatar", + "abbrs": [ + "LMT", + "GST", + "AST" + ], + "untils": [ + -1577935568000, + 76190400000, + null + ], + "offsets": [ + -206.1333, + -240, + -180 + ], + "population": 956460 + }, + { + "name": "Asia/Qyzylorda", + "abbrs": [ + "LMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06" + ], + "untils": [ + -1441167712000, + -1247544000000, + 354913200000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 606862800000, + 622587600000, + 638312400000, + 654642000000, + 695768400000, + 717541200000, + 733266000000, + 748990800000, + 764715600000, + 780440400000, + 796165200000, + 811890000000, + 828219600000, + 846363600000, + 859669200000, + 877813200000, + 891118800000, + 909262800000, + 922568400000, + 941317200000, + 954018000000, + 972766800000, + 985467600000, + 1004216400000, + 1017522000000, + 1035666000000, + 1048971600000, + 1067115600000, + 1080421200000, + null + ], + "offsets": [ + -261.8667, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360 + ], + "population": 727990 + }, + { + "name": "Asia/Rangoon", + "abbrs": [ + "RMT", + "BURT", + "JST", + "MMT" + ], + "untils": [ + -1577946280000, + -873268200000, + -778410000000, + null + ], + "offsets": [ + -384.6667, + -390, + -540, + -390 + ], + "population": 4800000 + }, + { + "name": "Asia/Riyadh", + "abbrs": [ + "LMT", + "AST" + ], + "untils": [ + -719636812000, + null + ], + "offsets": [ + -186.8667, + -180 + ], + "population": 5666000 + }, + { + "name": "Asia/Saigon", + "abbrs": [ + "LMT", + "PLMT", + "ICT", + "IDT", + "JST", + "ICT", + "IDT", + "ICT", + "IDT", + "ICT" + ], + "untils": [ + -2004073600000, + -1851577590000, + -852105600000, + -782643600000, + -767869200000, + -718095600000, + -457776000000, + -315648000000, + 171820800000, + null + ], + "offsets": [ + -426.6667, + -426.5, + -420, + -480, + -540, + -420, + -480, + -420, + -480, + -420 + ], + "population": 0 + }, + { + "name": "Asia/Sakhalin", + "abbrs": [ + "LMT", + "+09", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+10", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11" + ], + "untils": [ + -2031039048000, + -768560400000, + 354891600000, + 370699200000, + 386427600000, + 402235200000, + 417963600000, + 433771200000, + 449586000000, + 465318000000, + 481042800000, + 496767600000, + 512492400000, + 528217200000, + 543942000000, + 559666800000, + 575391600000, + 591116400000, + 606841200000, + 622566000000, + 638290800000, + 654620400000, + 686073600000, + 695750400000, + 701794800000, + 717519600000, + 733244400000, + 748969200000, + 764694000000, + 780418800000, + 796143600000, + 811868400000, + 828198000000, + 846342000000, + 877795200000, + 891100800000, + 909244800000, + 922550400000, + 941299200000, + 954000000000, + 972748800000, + 985449600000, + 1004198400000, + 1017504000000, + 1035648000000, + 1048953600000, + 1067097600000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143302400000, + 1162051200000, + 1174752000000, + 1193500800000, + 1206806400000, + 1224950400000, + 1238256000000, + 1256400000000, + 1269705600000, + 1288454400000, + 1301155200000, + 1414249200000, + 1459008000000, + null + ], + "offsets": [ + -570.8, + -540, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -600, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 580000 + }, + { + "name": "Asia/Samarkand", + "abbrs": [ + "LMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05" + ], + "untils": [ + -1441168073000, + -1247544000000, + 354913200000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 606862800000, + 622587600000, + 638312400000, + 654642000000, + 670366800000, + 686091600000, + null + ], + "offsets": [ + -267.8833, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300 + ], + "population": 361339 + }, + { + "name": "Asia/Seoul", + "abbrs": [ + "LMT", + "KST", + "JCST", + "JST", + "KST", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KST", + "KDT", + "KST", + "KDT", + "KST" + ], + "untils": [ + -1948782472000, + -1830414600000, + -1017824400000, + -767350800000, + -498128400000, + -462702600000, + -451733400000, + -429784200000, + -418296600000, + -399544200000, + -387451800000, + -368094600000, + -356002200000, + -336645000000, + -324552600000, + -305195400000, + -293103000000, + -264933000000, + 547578000000, + 560883600000, + 579027600000, + 592333200000, + null + ], + "offsets": [ + -507.8667, + -510, + -540, + -540, + -540, + -510, + -570, + -510, + -570, + -510, + -570, + -510, + -570, + -510, + -570, + -510, + -570, + -510, + -540, + -600, + -540, + -600, + -540 + ], + "population": 23480000 + }, + { + "name": "Asia/Shanghai", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -933494400000, + -923130000000, + -908784000000, + -891594000000, + 515520000000, + 527007600000, + 545155200000, + 558457200000, + 576604800000, + 589906800000, + 608659200000, + 621961200000, + 640108800000, + 653410800000, + 671558400000, + 684860400000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 23416000 + }, + { + "name": "Asia/Singapore", + "abbrs": [ + "SMT", + "MALT", + "MALST", + "MALT", + "MALT", + "JST", + "MALT", + "SGT", + "SGT" + ], + "untils": [ + -2038200925000, + -1167634800000, + -1073028000000, + -894180000000, + -879665400000, + -767005200000, + -138785400000, + 378664200000, + null + ], + "offsets": [ + -415.4167, + -420, + -440, + -440, + -450, + -540, + -450, + -450, + -480 + ], + "population": 5624000 + }, + { + "name": "Asia/Srednekolymsk", + "abbrs": [ + "LMT", + "+10", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+10", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11" + ], + "untils": [ + -1441188892000, + -1247565600000, + 354891600000, + 370699200000, + 386427600000, + 402235200000, + 417963600000, + 433771200000, + 449586000000, + 465318000000, + 481042800000, + 496767600000, + 512492400000, + 528217200000, + 543942000000, + 559666800000, + 575391600000, + 591116400000, + 606841200000, + 622566000000, + 638290800000, + 654620400000, + 686073600000, + 695750400000, + 701794800000, + 717519600000, + 733244400000, + 748969200000, + 764694000000, + 780418800000, + 796143600000, + 811868400000, + 828198000000, + 846342000000, + 859647600000, + 877791600000, + 891097200000, + 909241200000, + 922546800000, + 941295600000, + 953996400000, + 972745200000, + 985446000000, + 1004194800000, + 1017500400000, + 1035644400000, + 1048950000000, + 1067094000000, + 1080399600000, + 1099148400000, + 1111849200000, + 1130598000000, + 1143298800000, + 1162047600000, + 1174748400000, + 1193497200000, + 1206802800000, + 1224946800000, + 1238252400000, + 1256396400000, + 1269702000000, + 1288450800000, + 1301151600000, + 1414245600000, + null + ], + "offsets": [ + -614.8667, + -600, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -600, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660 + ], + "population": 3525 + }, + { + "name": "Asia/Taipei", + "abbrs": [ + "JWST", + "JST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1017820800000, + -766224000000, + -745833600000, + -733827600000, + -716889600000, + -699613200000, + -683884800000, + -670669200000, + -652348800000, + -639133200000, + -620812800000, + -607597200000, + -589276800000, + -576061200000, + -562924800000, + -541760400000, + -528710400000, + -510224400000, + -497174400000, + -478688400000, + -465638400000, + -449830800000, + -434016000000, + -418208400000, + -402480000000, + -386672400000, + -370944000000, + -355136400000, + -339408000000, + -323600400000, + -302515200000, + -291978000000, + -270979200000, + -260442000000, + 133977600000, + 149785200000, + 165513600000, + 181321200000, + 299606400000, + 307551600000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 7438000 + }, + { + "name": "Asia/Tashkent", + "abbrs": [ + "LMT", + "+05", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+05" + ], + "untils": [ + -1441168631000, + -1247547600000, + 354909600000, + 370717200000, + 386445600000, + 402253200000, + 417981600000, + 433789200000, + 449604000000, + 465336000000, + 481060800000, + 496785600000, + 512510400000, + 528235200000, + 543960000000, + 559684800000, + 575409600000, + 591134400000, + 606859200000, + 622584000000, + 638308800000, + 654638400000, + 686091600000, + null + ], + "offsets": [ + -277.1833, + -300, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -300 + ], + "population": 2250000 + }, + { + "name": "Asia/Tbilisi", + "abbrs": [ + "TBMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04" + ], + "untils": [ + -1441162751000, + -405140400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 575416800000, + 591141600000, + 606866400000, + 622591200000, + 638316000000, + 654645600000, + 686098800000, + 701816400000, + 717537600000, + 733266000000, + 748987200000, + 764715600000, + 796161600000, + 811882800000, + 828216000000, + 877806000000, + 891115200000, + 909255600000, + 922564800000, + 941310000000, + 954014400000, + 972759600000, + 985464000000, + 1004209200000, + 1017518400000, + 1035658800000, + 1048968000000, + 1067108400000, + 1080417600000, + 1088276400000, + 1099177200000, + 1111878000000, + null + ], + "offsets": [ + -179.1833, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240 + ], + "population": 1125000 + }, + { + "name": "Asia/Tehran", + "abbrs": [ + "LMT", + "TMT", + "IRST", + "IRST", + "IRDT", + "IRST", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST" + ], + "untils": [ + -1704165944000, + -757394744000, + 247177800000, + 259272000000, + 277758000000, + 283982400000, + 290809800000, + 306531000000, + 322432200000, + 338499000000, + 673216200000, + 685481400000, + 701209800000, + 717103800000, + 732745800000, + 748639800000, + 764281800000, + 780175800000, + 795817800000, + 811711800000, + 827353800000, + 843247800000, + 858976200000, + 874870200000, + 890512200000, + 906406200000, + 922048200000, + 937942200000, + 953584200000, + 969478200000, + 985206600000, + 1001100600000, + 1016742600000, + 1032636600000, + 1048278600000, + 1064172600000, + 1079814600000, + 1095708600000, + 1111437000000, + 1127331000000, + 1206045000000, + 1221939000000, + 1237667400000, + 1253561400000, + 1269203400000, + 1285097400000, + 1300739400000, + 1316633400000, + 1332275400000, + 1348169400000, + 1363897800000, + 1379791800000, + 1395433800000, + 1411327800000, + 1426969800000, + 1442863800000, + 1458505800000, + 1474399800000, + 1490128200000, + 1506022200000, + 1521664200000, + 1537558200000, + 1553200200000, + 1569094200000, + 1584736200000, + 1600630200000, + 1616358600000, + 1632252600000, + 1647894600000, + 1663788600000, + 1679430600000, + 1695324600000, + 1710966600000, + 1726860600000, + 1742589000000, + 1758483000000, + 1774125000000, + 1790019000000, + 1805661000000, + 1821555000000, + 1837197000000, + 1853091000000, + 1868733000000, + 1884627000000, + 1900355400000, + 1916249400000, + 1931891400000, + 1947785400000, + 1963427400000, + 1979321400000, + 1994963400000, + 2010857400000, + 2026585800000, + 2042479800000, + 2058121800000, + 2074015800000, + 2089657800000, + 2105551800000, + 2121193800000, + 2137087800000, + null + ], + "offsets": [ + -205.7333, + -205.7333, + -210, + -240, + -300, + -240, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210 + ], + "population": 13532000 + }, + { + "name": "Asia/Tel_Aviv", + "abbrs": [ + "JMT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDDT", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST" + ], + "untils": [ + -1641003640000, + -933645600000, + -857358000000, + -844300800000, + -825822000000, + -812685600000, + -794199600000, + -779853600000, + -762656400000, + -748310400000, + -731127600000, + -681962400000, + -673243200000, + -667962000000, + -652327200000, + -636426000000, + -622087200000, + -608947200000, + -591847200000, + -572486400000, + -558576000000, + -542851200000, + -527731200000, + -514425600000, + -490845600000, + -482986800000, + -459475200000, + -451537200000, + -428551200000, + -418262400000, + -400032000000, + -387428400000, + 142380000000, + 150843600000, + 167176800000, + 178664400000, + 482277600000, + 495579600000, + 516751200000, + 526424400000, + 545436000000, + 558478800000, + 576626400000, + 589323600000, + 609890400000, + 620773200000, + 638316000000, + 651618000000, + 669765600000, + 683672400000, + 701820000000, + 715726800000, + 733701600000, + 747176400000, + 765151200000, + 778021200000, + 796600800000, + 810075600000, + 826840800000, + 842821200000, + 858895200000, + 874184400000, + 890344800000, + 905029200000, + 923011200000, + 936313200000, + 955670400000, + 970783200000, + 986770800000, + 1001282400000, + 1017356400000, + 1033941600000, + 1048806000000, + 1065132000000, + 1081292400000, + 1095804000000, + 1112313600000, + 1128812400000, + 1143763200000, + 1159657200000, + 1175212800000, + 1189897200000, + 1206662400000, + 1223161200000, + 1238112000000, + 1254006000000, + 1269561600000, + 1284246000000, + 1301616000000, + 1317510000000, + 1333065600000, + 1348354800000, + 1364515200000, + 1382828400000, + 1395964800000, + 1414278000000, + 1427414400000, + 1445727600000, + 1458864000000, + 1477782000000, + 1490313600000, + 1509231600000, + 1521763200000, + 1540681200000, + 1553817600000, + 1572130800000, + 1585267200000, + 1603580400000, + 1616716800000, + 1635634800000, + 1648166400000, + 1667084400000, + 1679616000000, + 1698534000000, + 1711670400000, + 1729983600000, + 1743120000000, + 1761433200000, + 1774569600000, + 1792882800000, + 1806019200000, + 1824937200000, + 1837468800000, + 1856386800000, + 1868918400000, + 1887836400000, + 1900972800000, + 1919286000000, + 1932422400000, + 1950735600000, + 1963872000000, + 1982790000000, + 1995321600000, + 2014239600000, + 2026771200000, + 2045689200000, + 2058220800000, + 2077138800000, + 2090275200000, + 2108588400000, + 2121724800000, + 2140038000000, + null + ], + "offsets": [ + -140.6667, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -240, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "Asia/Thimbu", + "abbrs": [ + "LMT", + "IST", + "BTT" + ], + "untils": [ + -706341516000, + 560025000000, + null + ], + "offsets": [ + -358.6, + -330, + -360 + ], + "population": 0 + }, + { + "name": "Asia/Thimphu", + "abbrs": [ + "LMT", + "IST", + "BTT" + ], + "untils": [ + -706341516000, + 560025000000, + null + ], + "offsets": [ + -358.6, + -330, + -360 + ], + "population": 79185 + }, + { + "name": "Asia/Tokyo", + "abbrs": [ + "JCST", + "JST", + "JDT", + "JST", + "JDT", + "JST", + "JDT", + "JST", + "JDT", + "JST" + ], + "untils": [ + -1017824400000, + -683794800000, + -672393600000, + -654764400000, + -640944000000, + -620290800000, + -609494400000, + -588841200000, + -578044800000, + null + ], + "offsets": [ + -540, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540 + ], + "population": 37843000 + }, + { + "name": "Asia/Tomsk", + "abbrs": [ + "LMT", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+08", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07", + "+06", + "+07" + ], + "untils": [ + -1578807591000, + -1247551200000, + 354906000000, + 370713600000, + 386442000000, + 402249600000, + 417978000000, + 433785600000, + 449600400000, + 465332400000, + 481057200000, + 496782000000, + 512506800000, + 528231600000, + 543956400000, + 559681200000, + 575406000000, + 591130800000, + 606855600000, + 622580400000, + 638305200000, + 654634800000, + 686088000000, + 695764800000, + 701809200000, + 717534000000, + 733258800000, + 748983600000, + 764708400000, + 780433200000, + 796158000000, + 811882800000, + 828212400000, + 846356400000, + 859662000000, + 877806000000, + 891111600000, + 909255600000, + 922561200000, + 941310000000, + 954010800000, + 972759600000, + 985460400000, + 1004209200000, + 1017514800000, + 1020193200000, + 1035662400000, + 1048968000000, + 1067112000000, + 1080417600000, + 1099166400000, + 1111867200000, + 1130616000000, + 1143316800000, + 1162065600000, + 1174766400000, + 1193515200000, + 1206820800000, + 1224964800000, + 1238270400000, + 1256414400000, + 1269720000000, + 1288468800000, + 1301169600000, + 1414263600000, + 1464465600000, + null + ], + "offsets": [ + -339.85, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -360, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -480, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420, + -360, + -420 + ], + "population": 1047394 + }, + { + "name": "Asia/Ujung_Pandang", + "abbrs": [ + "LMT", + "MMT", + "WITA", + "JST", + "WITA" + ], + "untils": [ + -1577951856000, + -1172908656000, + -880272000000, + -766054800000, + null + ], + "offsets": [ + -477.6, + -477.6, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "Asia/Ulaanbaatar", + "abbrs": [ + "LMT", + "ULAT", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT" + ], + "untils": [ + -2032931252000, + 252435600000, + 417974400000, + 433782000000, + 449596800000, + 465318000000, + 481046400000, + 496767600000, + 512496000000, + 528217200000, + 543945600000, + 559666800000, + 575395200000, + 591116400000, + 606844800000, + 622566000000, + 638294400000, + 654620400000, + 670348800000, + 686070000000, + 701798400000, + 717519600000, + 733248000000, + 748969200000, + 764697600000, + 780418800000, + 796147200000, + 811868400000, + 828201600000, + 843922800000, + 859651200000, + 875372400000, + 891100800000, + 906822000000, + 988394400000, + 1001696400000, + 1017424800000, + 1033146000000, + 1048874400000, + 1064595600000, + 1080324000000, + 1096045200000, + 1111773600000, + 1127494800000, + 1143223200000, + 1159549200000, + 1427479200000, + 1443193200000, + 1458928800000, + 1474642800000, + 1490378400000, + 1506697200000, + 1522432800000, + 1538146800000, + 1553882400000, + 1569596400000, + 1585332000000, + 1601046000000, + 1616781600000, + 1632495600000, + 1648231200000, + 1663945200000, + 1679680800000, + 1695999600000, + 1711735200000, + 1727449200000, + 1743184800000, + 1758898800000, + 1774634400000, + 1790348400000, + 1806084000000, + 1821798000000, + 1837533600000, + 1853852400000, + 1869588000000, + 1885302000000, + 1901037600000, + 1916751600000, + 1932487200000, + 1948201200000, + 1963936800000, + 1979650800000, + 1995386400000, + 2011100400000, + 2026836000000, + 2043154800000, + 2058890400000, + 2074604400000, + 2090340000000, + 2106054000000, + 2121789600000, + 2137503600000, + null + ], + "offsets": [ + -427.5333, + -420, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 1237000 + }, + { + "name": "Asia/Ulan_Bator", + "abbrs": [ + "LMT", + "ULAT", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT", + "ULAST", + "ULAT" + ], + "untils": [ + -2032931252000, + 252435600000, + 417974400000, + 433782000000, + 449596800000, + 465318000000, + 481046400000, + 496767600000, + 512496000000, + 528217200000, + 543945600000, + 559666800000, + 575395200000, + 591116400000, + 606844800000, + 622566000000, + 638294400000, + 654620400000, + 670348800000, + 686070000000, + 701798400000, + 717519600000, + 733248000000, + 748969200000, + 764697600000, + 780418800000, + 796147200000, + 811868400000, + 828201600000, + 843922800000, + 859651200000, + 875372400000, + 891100800000, + 906822000000, + 988394400000, + 1001696400000, + 1017424800000, + 1033146000000, + 1048874400000, + 1064595600000, + 1080324000000, + 1096045200000, + 1111773600000, + 1127494800000, + 1143223200000, + 1159549200000, + 1427479200000, + 1443193200000, + 1458928800000, + 1474642800000, + 1490378400000, + 1506697200000, + 1522432800000, + 1538146800000, + 1553882400000, + 1569596400000, + 1585332000000, + 1601046000000, + 1616781600000, + 1632495600000, + 1648231200000, + 1663945200000, + 1679680800000, + 1695999600000, + 1711735200000, + 1727449200000, + 1743184800000, + 1758898800000, + 1774634400000, + 1790348400000, + 1806084000000, + 1821798000000, + 1837533600000, + 1853852400000, + 1869588000000, + 1885302000000, + 1901037600000, + 1916751600000, + 1932487200000, + 1948201200000, + 1963936800000, + 1979650800000, + 1995386400000, + 2011100400000, + 2026836000000, + 2043154800000, + 2058890400000, + 2074604400000, + 2090340000000, + 2106054000000, + 2121789600000, + 2137503600000, + null + ], + "offsets": [ + -427.5333, + -420, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "Asia/Urumqi", + "abbrs": [ + "LMT", + "XJT" + ], + "untils": [ + -1325483420000, + null + ], + "offsets": [ + -350.3333, + -360 + ], + "population": 3184000 + }, + { + "name": "Asia/Ust-Nera", + "abbrs": [ + "LMT", + "+08", + "+09", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+10", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+12", + "+11", + "+10" + ], + "untils": [ + -1579426374000, + -1247558400000, + 354898800000, + 370699200000, + 386427600000, + 402235200000, + 417963600000, + 433771200000, + 449586000000, + 465318000000, + 481042800000, + 496767600000, + 512492400000, + 528217200000, + 543942000000, + 559666800000, + 575391600000, + 591116400000, + 606841200000, + 622566000000, + 638290800000, + 654620400000, + 686073600000, + 695750400000, + 701794800000, + 717519600000, + 733244400000, + 748969200000, + 764694000000, + 780418800000, + 796143600000, + 811868400000, + 828198000000, + 846342000000, + 859647600000, + 877791600000, + 891097200000, + 909241200000, + 922546800000, + 941295600000, + 953996400000, + 972745200000, + 985446000000, + 1004194800000, + 1017500400000, + 1035644400000, + 1048950000000, + 1067094000000, + 1080399600000, + 1099148400000, + 1111849200000, + 1130598000000, + 1143298800000, + 1162047600000, + 1174748400000, + 1193497200000, + 1206802800000, + 1224946800000, + 1238252400000, + 1256396400000, + 1269702000000, + 1288450800000, + 1301151600000, + 1315828800000, + 1414249200000, + null + ], + "offsets": [ + -572.9, + -480, + -540, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -600, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -600 + ], + "population": 6463 + }, + { + "name": "Asia/Vientiane", + "abbrs": [ + "BMT", + "ICT" + ], + "untils": [ + -1570084924000, + null + ], + "offsets": [ + -402.0667, + -420 + ], + "population": 0 + }, + { + "name": "Asia/Vladivostok", + "abbrs": [ + "LMT", + "+09", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+09", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10", + "+11", + "+10" + ], + "untils": [ + -1487321251000, + -1247562000000, + 354895200000, + 370702800000, + 386431200000, + 402238800000, + 417967200000, + 433774800000, + 449589600000, + 465321600000, + 481046400000, + 496771200000, + 512496000000, + 528220800000, + 543945600000, + 559670400000, + 575395200000, + 591120000000, + 606844800000, + 622569600000, + 638294400000, + 654624000000, + 686077200000, + 695754000000, + 701798400000, + 717523200000, + 733248000000, + 748972800000, + 764697600000, + 780422400000, + 796147200000, + 811872000000, + 828201600000, + 846345600000, + 859651200000, + 877795200000, + 891100800000, + 909244800000, + 922550400000, + 941299200000, + 954000000000, + 972748800000, + 985449600000, + 1004198400000, + 1017504000000, + 1035648000000, + 1048953600000, + 1067097600000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143302400000, + 1162051200000, + 1174752000000, + 1193500800000, + 1206806400000, + 1224950400000, + 1238256000000, + 1256400000000, + 1269705600000, + 1288454400000, + 1301155200000, + 1414249200000, + null + ], + "offsets": [ + -527.5167, + -540, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -540, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600 + ], + "population": 598927 + }, + { + "name": "Asia/Yakutsk", + "abbrs": [ + "LMT", + "+08", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+08", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09", + "+10", + "+09" + ], + "untils": [ + -1579423138000, + -1247558400000, + 354898800000, + 370706400000, + 386434800000, + 402242400000, + 417970800000, + 433778400000, + 449593200000, + 465325200000, + 481050000000, + 496774800000, + 512499600000, + 528224400000, + 543949200000, + 559674000000, + 575398800000, + 591123600000, + 606848400000, + 622573200000, + 638298000000, + 654627600000, + 686080800000, + 695757600000, + 701802000000, + 717526800000, + 733251600000, + 748976400000, + 764701200000, + 780426000000, + 796150800000, + 811875600000, + 828205200000, + 846349200000, + 859654800000, + 877798800000, + 891104400000, + 909248400000, + 922554000000, + 941302800000, + 954003600000, + 972752400000, + 985453200000, + 1004202000000, + 1017507600000, + 1035651600000, + 1048957200000, + 1067101200000, + 1080406800000, + 1099155600000, + 1111856400000, + 1130605200000, + 1143306000000, + 1162054800000, + 1174755600000, + 1193504400000, + 1206810000000, + 1224954000000, + 1238259600000, + 1256403600000, + 1269709200000, + 1288458000000, + 1301158800000, + 1414252800000, + null + ], + "offsets": [ + -518.9667, + -480, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -480, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540 + ], + "population": 282419 + }, + { + "name": "Asia/Yangon", + "abbrs": [ + "RMT", + "BURT", + "JST", + "MMT" + ], + "untils": [ + -1577946280000, + -873268200000, + -778410000000, + null + ], + "offsets": [ + -384.6667, + -390, + -540, + -390 + ], + "population": 0 + }, + { + "name": "Asia/Yekaterinburg", + "abbrs": [ + "LMT", + "PMT", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+04", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05", + "+06", + "+05" + ], + "untils": [ + -1688270553000, + -1592610305000, + -1247544000000, + 354913200000, + 370720800000, + 386449200000, + 402256800000, + 417985200000, + 433792800000, + 449607600000, + 465339600000, + 481064400000, + 496789200000, + 512514000000, + 528238800000, + 543963600000, + 559688400000, + 575413200000, + 591138000000, + 606862800000, + 622587600000, + 638312400000, + 654642000000, + 686095200000, + 695772000000, + 701816400000, + 717541200000, + 733266000000, + 748990800000, + 764715600000, + 780440400000, + 796165200000, + 811890000000, + 828219600000, + 846363600000, + 859669200000, + 877813200000, + 891118800000, + 909262800000, + 922568400000, + 941317200000, + 954018000000, + 972766800000, + 985467600000, + 1004216400000, + 1017522000000, + 1035666000000, + 1048971600000, + 1067115600000, + 1080421200000, + 1099170000000, + 1111870800000, + 1130619600000, + 1143320400000, + 1162069200000, + 1174770000000, + 1193518800000, + 1206824400000, + 1224968400000, + 1238274000000, + 1256418000000, + 1269723600000, + 1288472400000, + 1301173200000, + 1414267200000, + null + ], + "offsets": [ + -242.55, + -225.0833, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -240, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300, + -360, + -300 + ], + "population": 1361000 + }, + { + "name": "Asia/Yerevan", + "abbrs": [ + "LMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04" + ], + "untils": [ + -1441162680000, + -405140400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 575416800000, + 591141600000, + 606866400000, + 622591200000, + 638316000000, + 654645600000, + 686098800000, + 701823600000, + 717548400000, + 733273200000, + 748998000000, + 764722800000, + 780447600000, + 796172400000, + 859672800000, + 877816800000, + 891122400000, + 909266400000, + 922572000000, + 941320800000, + 954021600000, + 972770400000, + 985471200000, + 1004220000000, + 1017525600000, + 1035669600000, + 1048975200000, + 1067119200000, + 1080424800000, + 1099173600000, + 1111874400000, + 1130623200000, + 1143324000000, + 1162072800000, + 1174773600000, + 1193522400000, + 1206828000000, + 1224972000000, + 1238277600000, + 1256421600000, + 1269727200000, + 1288476000000, + 1301176800000, + 1319925600000, + null + ], + "offsets": [ + -178, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240 + ], + "population": 1274000 + }, + { + "name": "Atlantic/Azores", + "abbrs": [ + "HMT", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOMT", + "AZOST", + "AZOT", + "AZOST", + "AZOMT", + "AZOST", + "AZOT", + "AZOST", + "AZOMT", + "AZOST", + "AZOT", + "AZOST", + "AZOMT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "WET", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT", + "AZOST", + "AZOT" + ], + "untils": [ + -1830377128000, + -1689548400000, + -1677794400000, + -1667430000000, + -1647730800000, + -1635807600000, + -1616194800000, + -1604358000000, + -1584658800000, + -1572735600000, + -1553036400000, + -1541199600000, + -1521500400000, + -1442444400000, + -1426806000000, + -1379286000000, + -1364770800000, + -1348441200000, + -1333321200000, + -1316386800000, + -1301266800000, + -1284332400000, + -1269817200000, + -1221433200000, + -1206918000000, + -1191193200000, + -1175468400000, + -1127689200000, + -1111964400000, + -1096844400000, + -1080514800000, + -1063580400000, + -1049065200000, + -1033340400000, + -1017615600000, + -1002495600000, + -986166000000, + -969231600000, + -950482800000, + -942015600000, + -922662000000, + -906937200000, + -891126000000, + -877302000000, + -873676800000, + -864000000000, + -857948400000, + -845852400000, + -842832000000, + -831340800000, + -825894000000, + -814402800000, + -810777600000, + -799891200000, + -794444400000, + -782953200000, + -779328000000, + -768441600000, + -762994800000, + -749084400000, + -733359600000, + -717624000000, + -701899200000, + -686174400000, + -670449600000, + -654724800000, + -639000000000, + -591825600000, + -575496000000, + -559771200000, + -544046400000, + -528321600000, + -512596800000, + -496872000000, + -481147200000, + -465422400000, + -449697600000, + -433972800000, + -417643200000, + -401918400000, + -386193600000, + -370468800000, + -354744000000, + -339019200000, + -323294400000, + -307569600000, + -291844800000, + -276120000000, + -260395200000, + -244670400000, + -228340800000, + -212616000000, + -196891200000, + -181166400000, + -165441600000, + -149716800000, + -133992000000, + -118267200000, + 228272400000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307504800000, + 323226000000, + 338954400000, + 354679200000, + 370404000000, + 386128800000, + 401853600000, + 417582000000, + 433303200000, + 449028000000, + 465357600000, + 481082400000, + 496807200000, + 512532000000, + 528256800000, + 543981600000, + 559706400000, + 575431200000, + 591156000000, + 606880800000, + 622605600000, + 638330400000, + 654660000000, + 670384800000, + 686109600000, + 701834400000, + 717559200000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 114.5333, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 0, + 60, + 120, + 60, + 0, + 60, + 120, + 60, + 0, + 60, + 120, + 60, + 0, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 0, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60 + ], + "population": 245746 + }, + { + "name": "Atlantic/Bermuda", + "abbrs": [ + "LMT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -1262281242000, + 136360800000, + 152082000000, + 167810400000, + 183531600000, + 199260000000, + 215586000000, + 230709600000, + 247035600000, + 262764000000, + 278485200000, + 294213600000, + 309934800000, + 325663200000, + 341384400000, + 357112800000, + 372834000000, + 388562400000, + 404888400000, + 420012000000, + 436338000000, + 452066400000, + 467787600000, + 483516000000, + 499237200000, + 514965600000, + 530686800000, + 544600800000, + 562136400000, + 576050400000, + 594190800000, + 607500000000, + 625640400000, + 638949600000, + 657090000000, + 671004000000, + 688539600000, + 702453600000, + 719989200000, + 733903200000, + 752043600000, + 765352800000, + 783493200000, + 796802400000, + 814942800000, + 828856800000, + 846392400000, + 860306400000, + 877842000000, + 891756000000, + 909291600000, + 923205600000, + 941346000000, + 954655200000, + 972795600000, + 986104800000, + 1004245200000, + 1018159200000, + 1035694800000, + 1049608800000, + 1067144400000, + 1081058400000, + 1099198800000, + 1112508000000, + 1130648400000, + 1143957600000, + 1162098000000, + 1173592800000, + 1194152400000, + 1205042400000, + 1225602000000, + 1236492000000, + 1257051600000, + 1268546400000, + 1289106000000, + 1299996000000, + 1320555600000, + 1331445600000, + 1352005200000, + 1362895200000, + 1383454800000, + 1394344800000, + 1414904400000, + 1425794400000, + 1446354000000, + 1457848800000, + 1478408400000, + 1489298400000, + 1509858000000, + 1520748000000, + 1541307600000, + 1552197600000, + 1572757200000, + 1583647200000, + 1604206800000, + 1615701600000, + 1636261200000, + 1647151200000, + 1667710800000, + 1678600800000, + 1699160400000, + 1710050400000, + 1730610000000, + 1741500000000, + 1762059600000, + 1772949600000, + 1793509200000, + 1805004000000, + 1825563600000, + 1836453600000, + 1857013200000, + 1867903200000, + 1888462800000, + 1899352800000, + 1919912400000, + 1930802400000, + 1951362000000, + 1962856800000, + 1983416400000, + 1994306400000, + 2014866000000, + 2025756000000, + 2046315600000, + 2057205600000, + 2077765200000, + 2088655200000, + 2109214800000, + 2120104800000, + 2140664400000, + null + ], + "offsets": [ + 259.3, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 65024 + }, + { + "name": "Atlantic/Canary", + "abbrs": [ + "LMT", + "CANT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + -1509663504000, + -733874400000, + 323827200000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 61.6, + 60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 538000 + }, + { + "name": "Atlantic/Cape_Verde", + "abbrs": [ + "LMT", + "CVT", + "CVST", + "CVT", + "CVT" + ], + "untils": [ + -1988144756000, + -862610400000, + -764118000000, + 186120000000, + null + ], + "offsets": [ + 94.0667, + 120, + 60, + 120, + 60 + ], + "population": 498897 + }, + { + "name": "Atlantic/Faeroe", + "abbrs": [ + "LMT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + -1955748776000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 27.0667, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "Atlantic/Faroe", + "abbrs": [ + "LMT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + -1955748776000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 27.0667, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 49469 + }, + { + "name": "Atlantic/Jan_Mayen", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1691884800000, + -1680573600000, + -927511200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -765327600000, + -340844400000, + -324514800000, + -308790000000, + -293065200000, + -277340400000, + -261615600000, + -245890800000, + -230166000000, + -214441200000, + -198716400000, + -182991600000, + -166662000000, + -147913200000, + -135212400000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Atlantic/Madeira", + "abbrs": [ + "FMT", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADMT", + "MADST", + "MADT", + "MADST", + "MADMT", + "MADST", + "MADT", + "MADST", + "MADMT", + "MADST", + "MADT", + "MADST", + "MADMT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "MADST", + "MADT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + -1830379944000, + -1689552000000, + -1677798000000, + -1667433600000, + -1647734400000, + -1635811200000, + -1616198400000, + -1604361600000, + -1584662400000, + -1572739200000, + -1553040000000, + -1541203200000, + -1521504000000, + -1442448000000, + -1426809600000, + -1379289600000, + -1364774400000, + -1348444800000, + -1333324800000, + -1316390400000, + -1301270400000, + -1284336000000, + -1269820800000, + -1221436800000, + -1206921600000, + -1191196800000, + -1175472000000, + -1127692800000, + -1111968000000, + -1096848000000, + -1080518400000, + -1063584000000, + -1049068800000, + -1033344000000, + -1017619200000, + -1002499200000, + -986169600000, + -969235200000, + -950486400000, + -942019200000, + -922665600000, + -906940800000, + -891129600000, + -877305600000, + -873680400000, + -864003600000, + -857952000000, + -845856000000, + -842835600000, + -831344400000, + -825897600000, + -814406400000, + -810781200000, + -799894800000, + -794448000000, + -782956800000, + -779331600000, + -768445200000, + -762998400000, + -749088000000, + -733363200000, + -717627600000, + -701902800000, + -686178000000, + -670453200000, + -654728400000, + -639003600000, + -591829200000, + -575499600000, + -559774800000, + -544050000000, + -528325200000, + -512600400000, + -496875600000, + -481150800000, + -465426000000, + -449701200000, + -433976400000, + -417646800000, + -401922000000, + -386197200000, + -370472400000, + -354747600000, + -339022800000, + -323298000000, + -307573200000, + -291848400000, + -276123600000, + -260398800000, + -244674000000, + -228344400000, + -212619600000, + -196894800000, + -181170000000, + -165445200000, + -149720400000, + -133995600000, + -118270800000, + 228268800000, + 243993600000, + 260323200000, + 276048000000, + 291772800000, + 307501200000, + 323222400000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417578400000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 67.6, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + -60, + 0, + 60, + 0, + -60, + 0, + 60, + 0, + -60, + 0, + 60, + 0, + -60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 267785 + }, + { + "name": "Atlantic/Reykjavik", + "abbrs": [ + "LMT", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "GMT" + ], + "untils": [ + -1956609120000, + -1668211200000, + -1647212400000, + -1636675200000, + -1613430000000, + -1605139200000, + -1581894000000, + -1539561600000, + -1531350000000, + -968025600000, + -952293600000, + -942008400000, + -920239200000, + -909957600000, + -888789600000, + -877903200000, + -857944800000, + -846453600000, + -826495200000, + -815004000000, + -795045600000, + -783554400000, + -762991200000, + -752104800000, + -731541600000, + -717631200000, + -700092000000, + -686181600000, + -668642400000, + -654732000000, + -636588000000, + -623282400000, + -605743200000, + -591832800000, + -573688800000, + -559778400000, + -542239200000, + -528328800000, + -510789600000, + -496879200000, + -479340000000, + -465429600000, + -447890400000, + -433980000000, + -415836000000, + -401925600000, + -384386400000, + -370476000000, + -352936800000, + -339026400000, + -321487200000, + -307576800000, + -290037600000, + -276127200000, + -258588000000, + -244677600000, + -226533600000, + -212623200000, + -195084000000, + -181173600000, + -163634400000, + -149724000000, + -132184800000, + -118274400000, + -100735200000, + -86824800000, + -68680800000, + -54770400000, + null + ], + "offsets": [ + 88, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0 + ], + "population": 119289 + }, + { + "name": "Atlantic/South_Georgia", + "abbrs": [ + "GST" + ], + "untils": [ + null + ], + "offsets": [ + 120 + ], + "population": 30 + }, + { + "name": "Atlantic/St_Helena", + "abbrs": [ + "LMT", + "GMT" + ], + "untils": [ + -1830383032000, + null + ], + "offsets": [ + 16.1333, + 0 + ], + "population": 0 + }, + { + "name": "Atlantic/Stanley", + "abbrs": [ + "SMT", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST", + "FKT", + "FKST" + ], + "untils": [ + -1824235716000, + -1018209600000, + -1003093200000, + -986760000000, + -971643600000, + -954705600000, + -939589200000, + -923256000000, + -908139600000, + -891806400000, + -876690000000, + -860356800000, + -852066000000, + 420609600000, + 433306800000, + 452052000000, + 464151600000, + 483501600000, + 495601200000, + 514350000000, + 527054400000, + 545799600000, + 558504000000, + 577249200000, + 589953600000, + 608698800000, + 621403200000, + 640753200000, + 652852800000, + 672202800000, + 684907200000, + 703652400000, + 716356800000, + 735102000000, + 747806400000, + 766551600000, + 779256000000, + 798001200000, + 810705600000, + 830055600000, + 842760000000, + 861505200000, + 874209600000, + 892954800000, + 905659200000, + 924404400000, + 937108800000, + 955854000000, + 968558400000, + 987310800000, + 999410400000, + 1019365200000, + 1030860000000, + 1050814800000, + 1062914400000, + 1082264400000, + 1094364000000, + 1113714000000, + 1125813600000, + 1145163600000, + 1157263200000, + 1176613200000, + 1188712800000, + 1208667600000, + 1220767200000, + 1240117200000, + 1252216800000, + 1271566800000, + 1283666400000, + null + ], + "offsets": [ + 231.4, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 120, + 180, + 120, + 180, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180 + ], + "population": 2121 + }, + { + "name": "Australia/ACT", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 386697600000, + 404841600000, + 415728000000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 511286400000, + 530035200000, + 542736000000, + 562089600000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 636480000000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + 719942400000, + 731433600000, + 751996800000, + 762883200000, + 783446400000, + 794332800000, + 814896000000, + 828201600000, + 846345600000, + 859651200000, + 877795200000, + 891100800000, + 909244800000, + 922550400000, + 941299200000, + 954000000000, + 967305600000, + 985449600000, + 1004198400000, + 1017504000000, + 1035648000000, + 1048953600000, + 1067097600000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143907200000, + 1162051200000, + 1174752000000, + 1193500800000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 0 + }, + { + "name": "Australia/Adelaide", + "abbrs": [ + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT" + ], + "untils": [ + -1672565340000, + -1665390600000, + -883639800000, + -876126600000, + -860398200000, + -844677000000, + -828343800000, + -813227400000, + 57688200000, + 67969800000, + 89137800000, + 100024200000, + 120587400000, + 131473800000, + 152037000000, + 162923400000, + 183486600000, + 194977800000, + 215541000000, + 226427400000, + 246990600000, + 257877000000, + 278440200000, + 289326600000, + 309889800000, + 320776200000, + 341339400000, + 352225800000, + 372789000000, + 384280200000, + 404843400000, + 415729800000, + 436293000000, + 447179400000, + 467742600000, + 478629000000, + 499192200000, + 511288200000, + 530037000000, + 542737800000, + 562091400000, + 574792200000, + 594145800000, + 606241800000, + 625595400000, + 637691400000, + 657045000000, + 667931400000, + 688494600000, + 701195400000, + 719944200000, + 731435400000, + 751998600000, + 764094600000, + 783448200000, + 796149000000, + 814897800000, + 828203400000, + 846347400000, + 859653000000, + 877797000000, + 891102600000, + 909246600000, + 922552200000, + 941301000000, + 954001800000, + 972750600000, + 985451400000, + 1004200200000, + 1017505800000, + 1035649800000, + 1048955400000, + 1067099400000, + 1080405000000, + 1099153800000, + 1111854600000, + 1130603400000, + 1143909000000, + 1162053000000, + 1174753800000, + 1193502600000, + 1207413000000, + 1223137800000, + 1238862600000, + 1254587400000, + 1270312200000, + 1286037000000, + 1301761800000, + 1317486600000, + 1333211400000, + 1349541000000, + 1365265800000, + 1380990600000, + 1396715400000, + 1412440200000, + 1428165000000, + 1443889800000, + 1459614600000, + 1475339400000, + 1491064200000, + 1506789000000, + 1522513800000, + 1538843400000, + 1554568200000, + 1570293000000, + 1586017800000, + 1601742600000, + 1617467400000, + 1633192200000, + 1648917000000, + 1664641800000, + 1680366600000, + 1696091400000, + 1712421000000, + 1728145800000, + 1743870600000, + 1759595400000, + 1775320200000, + 1791045000000, + 1806769800000, + 1822494600000, + 1838219400000, + 1853944200000, + 1869669000000, + 1885998600000, + 1901723400000, + 1917448200000, + 1933173000000, + 1948897800000, + 1964622600000, + 1980347400000, + 1996072200000, + 2011797000000, + 2027521800000, + 2043246600000, + 2058971400000, + 2075301000000, + 2091025800000, + 2106750600000, + 2122475400000, + 2138200200000, + null + ], + "offsets": [ + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630 + ], + "population": 1140000 + }, + { + "name": "Australia/Brisbane", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 625593600000, + 636480000000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600 + ], + "population": 1999000 + }, + { + "name": "Australia/Broken_Hill", + "abbrs": [ + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT" + ], + "untils": [ + -1672565340000, + -1665390600000, + -883639800000, + -876126600000, + -860398200000, + -844677000000, + -828343800000, + -813227400000, + 57688200000, + 67969800000, + 89137800000, + 100024200000, + 120587400000, + 131473800000, + 152037000000, + 162923400000, + 183486600000, + 194977800000, + 215541000000, + 226427400000, + 246990600000, + 257877000000, + 278440200000, + 289326600000, + 309889800000, + 320776200000, + 341339400000, + 352225800000, + 372789000000, + 386699400000, + 404843400000, + 415729800000, + 436293000000, + 447179400000, + 467742600000, + 478629000000, + 499192200000, + 511288200000, + 530037000000, + 542737800000, + 562091400000, + 574792200000, + 594145800000, + 606241800000, + 625595400000, + 636481800000, + 657045000000, + 667931400000, + 688494600000, + 699381000000, + 719944200000, + 731435400000, + 751998600000, + 762885000000, + 783448200000, + 794334600000, + 814897800000, + 828203400000, + 846347400000, + 859653000000, + 877797000000, + 891102600000, + 909246600000, + 922552200000, + 941301000000, + 954001800000, + 972750600000, + 985451400000, + 1004200200000, + 1017505800000, + 1035649800000, + 1048955400000, + 1067099400000, + 1080405000000, + 1099153800000, + 1111854600000, + 1130603400000, + 1143909000000, + 1162053000000, + 1174753800000, + 1193502600000, + 1207413000000, + 1223137800000, + 1238862600000, + 1254587400000, + 1270312200000, + 1286037000000, + 1301761800000, + 1317486600000, + 1333211400000, + 1349541000000, + 1365265800000, + 1380990600000, + 1396715400000, + 1412440200000, + 1428165000000, + 1443889800000, + 1459614600000, + 1475339400000, + 1491064200000, + 1506789000000, + 1522513800000, + 1538843400000, + 1554568200000, + 1570293000000, + 1586017800000, + 1601742600000, + 1617467400000, + 1633192200000, + 1648917000000, + 1664641800000, + 1680366600000, + 1696091400000, + 1712421000000, + 1728145800000, + 1743870600000, + 1759595400000, + 1775320200000, + 1791045000000, + 1806769800000, + 1822494600000, + 1838219400000, + 1853944200000, + 1869669000000, + 1885998600000, + 1901723400000, + 1917448200000, + 1933173000000, + 1948897800000, + 1964622600000, + 1980347400000, + 1996072200000, + 2011797000000, + 2027521800000, + 2043246600000, + 2058971400000, + 2075301000000, + 2091025800000, + 2106750600000, + 2122475400000, + 2138200200000, + null + ], + "offsets": [ + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630 + ], + "population": 18430 + }, + { + "name": "Australia/Canberra", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 386697600000, + 404841600000, + 415728000000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 511286400000, + 530035200000, + 542736000000, + 562089600000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 636480000000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + 719942400000, + 731433600000, + 751996800000, + 762883200000, + 783446400000, + 794332800000, + 814896000000, + 828201600000, + 846345600000, + 859651200000, + 877795200000, + 891100800000, + 909244800000, + 922550400000, + 941299200000, + 954000000000, + 967305600000, + 985449600000, + 1004198400000, + 1017504000000, + 1035648000000, + 1048953600000, + 1067097600000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143907200000, + 1162051200000, + 1174752000000, + 1193500800000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 0 + }, + { + "name": "Australia/Currie", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1680508800000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 386092800000, + 404841600000, + 417542400000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 510076800000, + 530035200000, + 542736000000, + 562089600000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 637689600000, + 657043200000, + 670348800000, + 686678400000, + 701798400000, + 718128000000, + 733248000000, + 749577600000, + 764697600000, + 781027200000, + 796147200000, + 812476800000, + 828201600000, + 844531200000, + 859651200000, + 875980800000, + 891100800000, + 907430400000, + 922550400000, + 938880000000, + 954000000000, + 967305600000, + 985449600000, + 1002384000000, + 1017504000000, + 1033833600000, + 1048953600000, + 1065283200000, + 1080403200000, + 1096732800000, + 1111852800000, + 1128182400000, + 1143907200000, + 1159632000000, + 1174752000000, + 1191686400000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 746 + }, + { + "name": "Australia/Darwin", + "abbrs": [ + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST" + ], + "untils": [ + -1672565340000, + -1665390600000, + -883639800000, + -876126600000, + -860398200000, + -844677000000, + -828343800000, + -813227400000, + null + ], + "offsets": [ + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570 + ], + "population": 116215 + }, + { + "name": "Australia/Eucla", + "abbrs": [ + "ACWST", + "ACWDT", + "ACWST", + "ACWDT", + "ACWST", + "ACWDT", + "ACWST", + "ACWDT", + "ACWST", + "ACWDT", + "ACWST", + "ACWDT", + "ACWST", + "ACWDT", + "ACWST", + "ACWDT", + "ACWST", + "ACWDT", + "ACWST" + ], + "untils": [ + -1672562640000, + -1665387900000, + -883637100000, + -876123900000, + -860395500000, + -844674300000, + 152039700000, + 162926100000, + 436295700000, + 447182100000, + 690311700000, + 699383700000, + 1165079700000, + 1174756500000, + 1193505300000, + 1206810900000, + 1224954900000, + 1238260500000, + null + ], + "offsets": [ + -525, + -585, + -525, + -585, + -525, + -585, + -525, + -585, + -525, + -585, + -525, + -585, + -525, + -585, + -525, + -585, + -525, + -585, + -525 + ], + "population": 368 + }, + { + "name": "Australia/Hobart", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1680508800000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + -71136000000, + -55411200000, + -37267200000, + -25776000000, + -5817600000, + 5673600000, + 25632000000, + 37728000000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 386092800000, + 404841600000, + 417542400000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 510076800000, + 530035200000, + 542736000000, + 562089600000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 637689600000, + 657043200000, + 670348800000, + 686678400000, + 701798400000, + 718128000000, + 733248000000, + 749577600000, + 764697600000, + 781027200000, + 796147200000, + 812476800000, + 828201600000, + 844531200000, + 859651200000, + 875980800000, + 891100800000, + 907430400000, + 922550400000, + 938880000000, + 954000000000, + 967305600000, + 985449600000, + 1002384000000, + 1017504000000, + 1033833600000, + 1048953600000, + 1065283200000, + 1080403200000, + 1096732800000, + 1111852800000, + 1128182400000, + 1143907200000, + 1159632000000, + 1174752000000, + 1191686400000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 205557 + }, + { + "name": "Australia/LHI", + "abbrs": [ + "AEST", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT" + ], + "untils": [ + 352216800000, + 372785400000, + 384273000000, + 404839800000, + 415722600000, + 436289400000, + 447172200000, + 467739000000, + 478621800000, + 499188600000, + 511282800000, + 530033400000, + 542732400000, + 562087800000, + 574786800000, + 594142200000, + 606236400000, + 625591800000, + 636476400000, + 657041400000, + 667926000000, + 688491000000, + 699375600000, + 719940600000, + 731430000000, + 751995000000, + 762879600000, + 783444600000, + 794329200000, + 814894200000, + 828198000000, + 846343800000, + 859647600000, + 877793400000, + 891097200000, + 909243000000, + 922546800000, + 941297400000, + 953996400000, + 967303800000, + 985446000000, + 1004196600000, + 1017500400000, + 1035646200000, + 1048950000000, + 1067095800000, + 1080399600000, + 1099150200000, + 1111849200000, + 1130599800000, + 1143903600000, + 1162049400000, + 1174748400000, + 1193499000000, + 1207407600000, + 1223134200000, + 1238857200000, + 1254583800000, + 1270306800000, + 1286033400000, + 1301756400000, + 1317483000000, + 1333206000000, + 1349537400000, + 1365260400000, + 1380987000000, + 1396710000000, + 1412436600000, + 1428159600000, + 1443886200000, + 1459609200000, + 1475335800000, + 1491058800000, + 1506785400000, + 1522508400000, + 1538839800000, + 1554562800000, + 1570289400000, + 1586012400000, + 1601739000000, + 1617462000000, + 1633188600000, + 1648911600000, + 1664638200000, + 1680361200000, + 1696087800000, + 1712415600000, + 1728142200000, + 1743865200000, + 1759591800000, + 1775314800000, + 1791041400000, + 1806764400000, + 1822491000000, + 1838214000000, + 1853940600000, + 1869663600000, + 1885995000000, + 1901718000000, + 1917444600000, + 1933167600000, + 1948894200000, + 1964617200000, + 1980343800000, + 1996066800000, + 2011793400000, + 2027516400000, + 2043243000000, + 2058966000000, + 2075297400000, + 2091020400000, + 2106747000000, + 2122470000000, + 2138196600000, + null + ], + "offsets": [ + -600, + -630, + -690, + -630, + -690, + -630, + -690, + -630, + -690, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660 + ], + "population": 0 + }, + { + "name": "Australia/Lindeman", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 625593600000, + 636480000000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + 719942400000, + 731433600000, + 751996800000, + 762883200000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600 + ], + "population": 10 + }, + { + "name": "Australia/Lord_Howe", + "abbrs": [ + "AEST", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT", + "LHST", + "LHDT" + ], + "untils": [ + 352216800000, + 372785400000, + 384273000000, + 404839800000, + 415722600000, + 436289400000, + 447172200000, + 467739000000, + 478621800000, + 499188600000, + 511282800000, + 530033400000, + 542732400000, + 562087800000, + 574786800000, + 594142200000, + 606236400000, + 625591800000, + 636476400000, + 657041400000, + 667926000000, + 688491000000, + 699375600000, + 719940600000, + 731430000000, + 751995000000, + 762879600000, + 783444600000, + 794329200000, + 814894200000, + 828198000000, + 846343800000, + 859647600000, + 877793400000, + 891097200000, + 909243000000, + 922546800000, + 941297400000, + 953996400000, + 967303800000, + 985446000000, + 1004196600000, + 1017500400000, + 1035646200000, + 1048950000000, + 1067095800000, + 1080399600000, + 1099150200000, + 1111849200000, + 1130599800000, + 1143903600000, + 1162049400000, + 1174748400000, + 1193499000000, + 1207407600000, + 1223134200000, + 1238857200000, + 1254583800000, + 1270306800000, + 1286033400000, + 1301756400000, + 1317483000000, + 1333206000000, + 1349537400000, + 1365260400000, + 1380987000000, + 1396710000000, + 1412436600000, + 1428159600000, + 1443886200000, + 1459609200000, + 1475335800000, + 1491058800000, + 1506785400000, + 1522508400000, + 1538839800000, + 1554562800000, + 1570289400000, + 1586012400000, + 1601739000000, + 1617462000000, + 1633188600000, + 1648911600000, + 1664638200000, + 1680361200000, + 1696087800000, + 1712415600000, + 1728142200000, + 1743865200000, + 1759591800000, + 1775314800000, + 1791041400000, + 1806764400000, + 1822491000000, + 1838214000000, + 1853940600000, + 1869663600000, + 1885995000000, + 1901718000000, + 1917444600000, + 1933167600000, + 1948894200000, + 1964617200000, + 1980343800000, + 1996066800000, + 2011793400000, + 2027516400000, + 2043243000000, + 2058966000000, + 2075297400000, + 2091020400000, + 2106747000000, + 2122470000000, + 2138196600000, + null + ], + "offsets": [ + -600, + -630, + -690, + -630, + -690, + -630, + -690, + -630, + -690, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660, + -630, + -660 + ], + "population": 347 + }, + { + "name": "Australia/Melbourne", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 384278400000, + 404841600000, + 415728000000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 511286400000, + 530035200000, + 542736000000, + 561484800000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 637689600000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + 719942400000, + 731433600000, + 751996800000, + 762883200000, + 783446400000, + 796147200000, + 814896000000, + 828201600000, + 846345600000, + 859651200000, + 877795200000, + 891100800000, + 909244800000, + 922550400000, + 941299200000, + 954000000000, + 967305600000, + 985449600000, + 1004198400000, + 1017504000000, + 1035648000000, + 1048953600000, + 1067097600000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143907200000, + 1162051200000, + 1174752000000, + 1193500800000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 3906000 + }, + { + "name": "Australia/NSW", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 386697600000, + 404841600000, + 415728000000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 511286400000, + 530035200000, + 542736000000, + 562089600000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 636480000000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + 719942400000, + 731433600000, + 751996800000, + 762883200000, + 783446400000, + 794332800000, + 814896000000, + 828201600000, + 846345600000, + 859651200000, + 877795200000, + 891100800000, + 909244800000, + 922550400000, + 941299200000, + 954000000000, + 967305600000, + 985449600000, + 1004198400000, + 1017504000000, + 1035648000000, + 1048953600000, + 1067097600000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143907200000, + 1162051200000, + 1174752000000, + 1193500800000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 0 + }, + { + "name": "Australia/North", + "abbrs": [ + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST" + ], + "untils": [ + -1672565340000, + -1665390600000, + -883639800000, + -876126600000, + -860398200000, + -844677000000, + -828343800000, + -813227400000, + null + ], + "offsets": [ + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570 + ], + "population": 0 + }, + { + "name": "Australia/Perth", + "abbrs": [ + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST" + ], + "untils": [ + -1672559940000, + -1665385200000, + -883634400000, + -876121200000, + -860392800000, + -844671600000, + 152042400000, + 162928800000, + 436298400000, + 447184800000, + 690314400000, + 699386400000, + 1165082400000, + 1174759200000, + 1193508000000, + 1206813600000, + 1224957600000, + 1238263200000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 1751000 + }, + { + "name": "Australia/Queensland", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 625593600000, + 636480000000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600 + ], + "population": 0 + }, + { + "name": "Australia/South", + "abbrs": [ + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT" + ], + "untils": [ + -1672565340000, + -1665390600000, + -883639800000, + -876126600000, + -860398200000, + -844677000000, + -828343800000, + -813227400000, + 57688200000, + 67969800000, + 89137800000, + 100024200000, + 120587400000, + 131473800000, + 152037000000, + 162923400000, + 183486600000, + 194977800000, + 215541000000, + 226427400000, + 246990600000, + 257877000000, + 278440200000, + 289326600000, + 309889800000, + 320776200000, + 341339400000, + 352225800000, + 372789000000, + 384280200000, + 404843400000, + 415729800000, + 436293000000, + 447179400000, + 467742600000, + 478629000000, + 499192200000, + 511288200000, + 530037000000, + 542737800000, + 562091400000, + 574792200000, + 594145800000, + 606241800000, + 625595400000, + 637691400000, + 657045000000, + 667931400000, + 688494600000, + 701195400000, + 719944200000, + 731435400000, + 751998600000, + 764094600000, + 783448200000, + 796149000000, + 814897800000, + 828203400000, + 846347400000, + 859653000000, + 877797000000, + 891102600000, + 909246600000, + 922552200000, + 941301000000, + 954001800000, + 972750600000, + 985451400000, + 1004200200000, + 1017505800000, + 1035649800000, + 1048955400000, + 1067099400000, + 1080405000000, + 1099153800000, + 1111854600000, + 1130603400000, + 1143909000000, + 1162053000000, + 1174753800000, + 1193502600000, + 1207413000000, + 1223137800000, + 1238862600000, + 1254587400000, + 1270312200000, + 1286037000000, + 1301761800000, + 1317486600000, + 1333211400000, + 1349541000000, + 1365265800000, + 1380990600000, + 1396715400000, + 1412440200000, + 1428165000000, + 1443889800000, + 1459614600000, + 1475339400000, + 1491064200000, + 1506789000000, + 1522513800000, + 1538843400000, + 1554568200000, + 1570293000000, + 1586017800000, + 1601742600000, + 1617467400000, + 1633192200000, + 1648917000000, + 1664641800000, + 1680366600000, + 1696091400000, + 1712421000000, + 1728145800000, + 1743870600000, + 1759595400000, + 1775320200000, + 1791045000000, + 1806769800000, + 1822494600000, + 1838219400000, + 1853944200000, + 1869669000000, + 1885998600000, + 1901723400000, + 1917448200000, + 1933173000000, + 1948897800000, + 1964622600000, + 1980347400000, + 1996072200000, + 2011797000000, + 2027521800000, + 2043246600000, + 2058971400000, + 2075301000000, + 2091025800000, + 2106750600000, + 2122475400000, + 2138200200000, + null + ], + "offsets": [ + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630 + ], + "population": 0 + }, + { + "name": "Australia/Sydney", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 386697600000, + 404841600000, + 415728000000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 511286400000, + 530035200000, + 542736000000, + 562089600000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 636480000000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + 719942400000, + 731433600000, + 751996800000, + 762883200000, + 783446400000, + 794332800000, + 814896000000, + 828201600000, + 846345600000, + 859651200000, + 877795200000, + 891100800000, + 909244800000, + 922550400000, + 941299200000, + 954000000000, + 967305600000, + 985449600000, + 1004198400000, + 1017504000000, + 1035648000000, + 1048953600000, + 1067097600000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143907200000, + 1162051200000, + 1174752000000, + 1193500800000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 4036000 + }, + { + "name": "Australia/Tasmania", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1680508800000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + -71136000000, + -55411200000, + -37267200000, + -25776000000, + -5817600000, + 5673600000, + 25632000000, + 37728000000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 386092800000, + 404841600000, + 417542400000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 510076800000, + 530035200000, + 542736000000, + 562089600000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 637689600000, + 657043200000, + 670348800000, + 686678400000, + 701798400000, + 718128000000, + 733248000000, + 749577600000, + 764697600000, + 781027200000, + 796147200000, + 812476800000, + 828201600000, + 844531200000, + 859651200000, + 875980800000, + 891100800000, + 907430400000, + 922550400000, + 938880000000, + 954000000000, + 967305600000, + 985449600000, + 1002384000000, + 1017504000000, + 1033833600000, + 1048953600000, + 1065283200000, + 1080403200000, + 1096732800000, + 1111852800000, + 1128182400000, + 1143907200000, + 1159632000000, + 1174752000000, + 1191686400000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 0 + }, + { + "name": "Australia/Victoria", + "abbrs": [ + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT", + "AEST", + "AEDT" + ], + "untils": [ + -1672567140000, + -1665392400000, + -883641600000, + -876128400000, + -860400000000, + -844678800000, + -828345600000, + -813229200000, + 57686400000, + 67968000000, + 89136000000, + 100022400000, + 120585600000, + 131472000000, + 152035200000, + 162921600000, + 183484800000, + 194976000000, + 215539200000, + 226425600000, + 246988800000, + 257875200000, + 278438400000, + 289324800000, + 309888000000, + 320774400000, + 341337600000, + 352224000000, + 372787200000, + 384278400000, + 404841600000, + 415728000000, + 436291200000, + 447177600000, + 467740800000, + 478627200000, + 499190400000, + 511286400000, + 530035200000, + 542736000000, + 561484800000, + 574790400000, + 594144000000, + 606240000000, + 625593600000, + 637689600000, + 657043200000, + 667929600000, + 688492800000, + 699379200000, + 719942400000, + 731433600000, + 751996800000, + 762883200000, + 783446400000, + 796147200000, + 814896000000, + 828201600000, + 846345600000, + 859651200000, + 877795200000, + 891100800000, + 909244800000, + 922550400000, + 941299200000, + 954000000000, + 967305600000, + 985449600000, + 1004198400000, + 1017504000000, + 1035648000000, + 1048953600000, + 1067097600000, + 1080403200000, + 1099152000000, + 1111852800000, + 1130601600000, + 1143907200000, + 1162051200000, + 1174752000000, + 1193500800000, + 1207411200000, + 1223136000000, + 1238860800000, + 1254585600000, + 1270310400000, + 1286035200000, + 1301760000000, + 1317484800000, + 1333209600000, + 1349539200000, + 1365264000000, + 1380988800000, + 1396713600000, + 1412438400000, + 1428163200000, + 1443888000000, + 1459612800000, + 1475337600000, + 1491062400000, + 1506787200000, + 1522512000000, + 1538841600000, + 1554566400000, + 1570291200000, + 1586016000000, + 1601740800000, + 1617465600000, + 1633190400000, + 1648915200000, + 1664640000000, + 1680364800000, + 1696089600000, + 1712419200000, + 1728144000000, + 1743868800000, + 1759593600000, + 1775318400000, + 1791043200000, + 1806768000000, + 1822492800000, + 1838217600000, + 1853942400000, + 1869667200000, + 1885996800000, + 1901721600000, + 1917446400000, + 1933171200000, + 1948896000000, + 1964620800000, + 1980345600000, + 1996070400000, + 2011795200000, + 2027520000000, + 2043244800000, + 2058969600000, + 2075299200000, + 2091024000000, + 2106748800000, + 2122473600000, + 2138198400000, + null + ], + "offsets": [ + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660, + -600, + -660 + ], + "population": 0 + }, + { + "name": "Australia/West", + "abbrs": [ + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST", + "AWDT", + "AWST" + ], + "untils": [ + -1672559940000, + -1665385200000, + -883634400000, + -876121200000, + -860392800000, + -844671600000, + 152042400000, + 162928800000, + 436298400000, + 447184800000, + 690314400000, + 699386400000, + 1165082400000, + 1174759200000, + 1193508000000, + 1206813600000, + 1224957600000, + 1238263200000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "Australia/Yancowinna", + "abbrs": [ + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT", + "ACST", + "ACDT" + ], + "untils": [ + -1672565340000, + -1665390600000, + -883639800000, + -876126600000, + -860398200000, + -844677000000, + -828343800000, + -813227400000, + 57688200000, + 67969800000, + 89137800000, + 100024200000, + 120587400000, + 131473800000, + 152037000000, + 162923400000, + 183486600000, + 194977800000, + 215541000000, + 226427400000, + 246990600000, + 257877000000, + 278440200000, + 289326600000, + 309889800000, + 320776200000, + 341339400000, + 352225800000, + 372789000000, + 386699400000, + 404843400000, + 415729800000, + 436293000000, + 447179400000, + 467742600000, + 478629000000, + 499192200000, + 511288200000, + 530037000000, + 542737800000, + 562091400000, + 574792200000, + 594145800000, + 606241800000, + 625595400000, + 636481800000, + 657045000000, + 667931400000, + 688494600000, + 699381000000, + 719944200000, + 731435400000, + 751998600000, + 762885000000, + 783448200000, + 794334600000, + 814897800000, + 828203400000, + 846347400000, + 859653000000, + 877797000000, + 891102600000, + 909246600000, + 922552200000, + 941301000000, + 954001800000, + 972750600000, + 985451400000, + 1004200200000, + 1017505800000, + 1035649800000, + 1048955400000, + 1067099400000, + 1080405000000, + 1099153800000, + 1111854600000, + 1130603400000, + 1143909000000, + 1162053000000, + 1174753800000, + 1193502600000, + 1207413000000, + 1223137800000, + 1238862600000, + 1254587400000, + 1270312200000, + 1286037000000, + 1301761800000, + 1317486600000, + 1333211400000, + 1349541000000, + 1365265800000, + 1380990600000, + 1396715400000, + 1412440200000, + 1428165000000, + 1443889800000, + 1459614600000, + 1475339400000, + 1491064200000, + 1506789000000, + 1522513800000, + 1538843400000, + 1554568200000, + 1570293000000, + 1586017800000, + 1601742600000, + 1617467400000, + 1633192200000, + 1648917000000, + 1664641800000, + 1680366600000, + 1696091400000, + 1712421000000, + 1728145800000, + 1743870600000, + 1759595400000, + 1775320200000, + 1791045000000, + 1806769800000, + 1822494600000, + 1838219400000, + 1853944200000, + 1869669000000, + 1885998600000, + 1901723400000, + 1917448200000, + 1933173000000, + 1948897800000, + 1964622600000, + 1980347400000, + 1996072200000, + 2011797000000, + 2027521800000, + 2043246600000, + 2058971400000, + 2075301000000, + 2091025800000, + 2106750600000, + 2122475400000, + 2138200200000, + null + ], + "offsets": [ + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630, + -570, + -630 + ], + "population": 0 + }, + { + "name": "Brazil/Acre", + "abbrs": [ + "LMT", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "ACST", + "ACT", + "AMT", + "ACT" + ], + "untils": [ + -1767209328000, + -1206950400000, + -1191355200000, + -1175367600000, + -1159819200000, + -633812400000, + -622062000000, + -602276400000, + -591825600000, + -570740400000, + -560203200000, + -539118000000, + -531345600000, + -191358000000, + -184190400000, + -155156400000, + -150062400000, + -128890800000, + -121118400000, + -99946800000, + -89582400000, + -68410800000, + -57960000000, + 499755600000, + 511243200000, + 530600400000, + 540273600000, + 562136400000, + 571204800000, + 1214283600000, + 1384056000000, + null + ], + "offsets": [ + 271.2, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "Brazil/DeNoronha", + "abbrs": [ + "LMT", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT", + "FNST", + "FNT" + ], + "untils": [ + -1767217820000, + -1206961200000, + -1191366000000, + -1175378400000, + -1159830000000, + -633823200000, + -622072800000, + -602287200000, + -591836400000, + -570751200000, + -560214000000, + -539128800000, + -531356400000, + -191368800000, + -184201200000, + -155167200000, + -150073200000, + -128901600000, + -121129200000, + -99957600000, + -89593200000, + -68421600000, + -57970800000, + 499744800000, + 511232400000, + 530589600000, + 540262800000, + 562125600000, + 571194000000, + 592970400000, + 602038800000, + 624420000000, + 634698000000, + 938916000000, + 951613200000, + 970970400000, + 971571600000, + 1003024800000, + 1013907600000, + null + ], + "offsets": [ + 129.6667, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120, + 60, + 120 + ], + "population": 0 + }, + { + "name": "Brazil/East", + "abbrs": [ + "LMT", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST", + "BRT", + "BRST" + ], + "untils": [ + -1767214412000, + -1206957600000, + -1191362400000, + -1175374800000, + -1159826400000, + -633819600000, + -622069200000, + -602283600000, + -591832800000, + -570747600000, + -560210400000, + -539125200000, + -531352800000, + -195426000000, + -184197600000, + -155163600000, + -150069600000, + -128898000000, + -121125600000, + -99954000000, + -89589600000, + -68418000000, + -57967200000, + 499748400000, + 511236000000, + 530593200000, + 540266400000, + 562129200000, + 571197600000, + 592974000000, + 602042400000, + 624423600000, + 634701600000, + 656478000000, + 666756000000, + 687927600000, + 697600800000, + 719982000000, + 728445600000, + 750826800000, + 761709600000, + 782276400000, + 793159200000, + 813726000000, + 824004000000, + 844570800000, + 856058400000, + 876106800000, + 888717600000, + 908074800000, + 919562400000, + 938919600000, + 951616800000, + 970974000000, + 982461600000, + 1003028400000, + 1013911200000, + 1036292400000, + 1045360800000, + 1066532400000, + 1076810400000, + 1099364400000, + 1108864800000, + 1129431600000, + 1140314400000, + 1162695600000, + 1172368800000, + 1192330800000, + 1203213600000, + 1224385200000, + 1234663200000, + 1255834800000, + 1266717600000, + 1287284400000, + 1298167200000, + 1318734000000, + 1330221600000, + 1350788400000, + 1361066400000, + 1382238000000, + 1392516000000, + 1413687600000, + 1424570400000, + 1445137200000, + 1456020000000, + 1476586800000, + 1487469600000, + 1508036400000, + 1518919200000, + 1540090800000, + 1550368800000, + 1571540400000, + 1581818400000, + 1602990000000, + 1613872800000, + 1634439600000, + 1645322400000, + 1665889200000, + 1677376800000, + 1697338800000, + 1708221600000, + 1729393200000, + 1739671200000, + 1760842800000, + 1771725600000, + 1792292400000, + 1803175200000, + 1823742000000, + 1834624800000, + 1855191600000, + 1866074400000, + 1887246000000, + 1897524000000, + 1918695600000, + 1928973600000, + 1950145200000, + 1960423200000, + 1981594800000, + 1992477600000, + 2013044400000, + 2024532000000, + 2044494000000, + 2055376800000, + 2076548400000, + 2086826400000, + 2107998000000, + 2118880800000, + 2139447600000, + null + ], + "offsets": [ + 186.4667, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120, + 180, + 120 + ], + "population": 0 + }, + { + "name": "Brazil/West", + "abbrs": [ + "LMT", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT", + "AMST", + "AMT" + ], + "untils": [ + -1767211196000, + -1206954000000, + -1191358800000, + -1175371200000, + -1159822800000, + -633816000000, + -622065600000, + -602280000000, + -591829200000, + -570744000000, + -560206800000, + -539121600000, + -531349200000, + -191361600000, + -184194000000, + -155160000000, + -150066000000, + -128894400000, + -121122000000, + -99950400000, + -89586000000, + -68414400000, + -57963600000, + 499752000000, + 511239600000, + 530596800000, + 540270000000, + 562132800000, + 571201200000, + 750830400000, + 761713200000, + null + ], + "offsets": [ + 240.0667, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 0 + }, + { + "name": "CET", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -938905200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -766623600000, + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "CST6CDT", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -84384000000, + -68662800000, + -52934400000, + -37213200000, + -21484800000, + -5763600000, + 9964800000, + 25686000000, + 41414400000, + 57740400000, + 73468800000, + 89190000000, + 104918400000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 702460800000, + 719996400000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986112000000, + 1004252400000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "Canada/Atlantic", + "abbrs": [ + "LMT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "AWT", + "APT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST", + "ADT", + "AST" + ], + "untils": [ + -2131645536000, + -1696276800000, + -1680469200000, + -1632074400000, + -1615143600000, + -1566763200000, + -1557090000000, + -1535486400000, + -1524949200000, + -1504468800000, + -1493413200000, + -1472414400000, + -1461963600000, + -1440964800000, + -1429390800000, + -1409515200000, + -1396731600000, + -1376856000000, + -1366491600000, + -1346616000000, + -1333832400000, + -1313956800000, + -1303678800000, + -1282507200000, + -1272661200000, + -1251057600000, + -1240088400000, + -1219608000000, + -1207429200000, + -1188763200000, + -1175979600000, + -1157313600000, + -1143925200000, + -1124049600000, + -1113771600000, + -1091390400000, + -1081026000000, + -1059854400000, + -1050786000000, + -1030910400000, + -1018126800000, + -999460800000, + -986677200000, + -965592000000, + -955227600000, + -935956800000, + -923173200000, + -904507200000, + -891723600000, + -880221600000, + -769395600000, + -765399600000, + -747252000000, + -733950000000, + -715802400000, + -702500400000, + -684352800000, + -671050800000, + -652903200000, + -639601200000, + -589399200000, + -576097200000, + -557949600000, + -544647600000, + -526500000000, + -513198000000, + -495050400000, + -481748400000, + -431546400000, + -418244400000, + -400096800000, + -386794800000, + -368647200000, + -355345200000, + -337197600000, + -323895600000, + -242244000000, + -226522800000, + -210794400000, + -195073200000, + -179344800000, + -163623600000, + -147895200000, + -131569200000, + -116445600000, + -100119600000, + -84391200000, + -68670000000, + -52941600000, + -37220400000, + -21492000000, + -5770800000, + 9957600000, + 25678800000, + 41407200000, + 57733200000, + 73461600000, + 89182800000, + 104911200000, + 120632400000, + 136360800000, + 152082000000, + 167810400000, + 183531600000, + 199260000000, + 215586000000, + 230709600000, + 247035600000, + 262764000000, + 278485200000, + 294213600000, + 309934800000, + 325663200000, + 341384400000, + 357112800000, + 372834000000, + 388562400000, + 404888400000, + 420012000000, + 436338000000, + 452066400000, + 467787600000, + 483516000000, + 499237200000, + 514965600000, + 530686800000, + 544600800000, + 562136400000, + 576050400000, + 594190800000, + 607500000000, + 625640400000, + 638949600000, + 657090000000, + 671004000000, + 688539600000, + 702453600000, + 719989200000, + 733903200000, + 752043600000, + 765352800000, + 783493200000, + 796802400000, + 814942800000, + 828856800000, + 846392400000, + 860306400000, + 877842000000, + 891756000000, + 909291600000, + 923205600000, + 941346000000, + 954655200000, + 972795600000, + 986104800000, + 1004245200000, + 1018159200000, + 1035694800000, + 1049608800000, + 1067144400000, + 1081058400000, + 1099198800000, + 1112508000000, + 1130648400000, + 1143957600000, + 1162098000000, + 1173592800000, + 1194152400000, + 1205042400000, + 1225602000000, + 1236492000000, + 1257051600000, + 1268546400000, + 1289106000000, + 1299996000000, + 1320555600000, + 1331445600000, + 1352005200000, + 1362895200000, + 1383454800000, + 1394344800000, + 1414904400000, + 1425794400000, + 1446354000000, + 1457848800000, + 1478408400000, + 1489298400000, + 1509858000000, + 1520748000000, + 1541307600000, + 1552197600000, + 1572757200000, + 1583647200000, + 1604206800000, + 1615701600000, + 1636261200000, + 1647151200000, + 1667710800000, + 1678600800000, + 1699160400000, + 1710050400000, + 1730610000000, + 1741500000000, + 1762059600000, + 1772949600000, + 1793509200000, + 1805004000000, + 1825563600000, + 1836453600000, + 1857013200000, + 1867903200000, + 1888462800000, + 1899352800000, + 1919912400000, + 1930802400000, + 1951362000000, + 1962856800000, + 1983416400000, + 1994306400000, + 2014866000000, + 2025756000000, + 2046315600000, + 2057205600000, + 2077765200000, + 2088655200000, + 2109214800000, + 2120104800000, + 2140664400000, + null + ], + "offsets": [ + 254.4, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240 + ], + "population": 0 + }, + { + "name": "Canada/Central", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1694368800000, + -1681671600000, + -1632067200000, + -1615136400000, + -1029686400000, + -1018198800000, + -880214400000, + -769395600000, + -765392400000, + -746035200000, + -732733200000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620755200000, + -607626000000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -450291600000, + -431539200000, + -418237200000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -321469200000, + -305740800000, + -292438800000, + -210787200000, + -198090000000, + -116438400000, + -100108800000, + -84384000000, + -68659200000, + -52934400000, + -37209600000, + -21484800000, + -5760000000, + 9964800000, + 25689600000, + 41414400000, + 57744000000, + 73468800000, + 89193600000, + 104918400000, + 120643200000, + 136368000000, + 152092800000, + 167817600000, + 183542400000, + 199267200000, + 215596800000, + 230716800000, + 247046400000, + 262771200000, + 278496000000, + 294220800000, + 309945600000, + 325670400000, + 341395200000, + 357120000000, + 372844800000, + 388569600000, + 404899200000, + 420019200000, + 436348800000, + 452073600000, + 467798400000, + 483523200000, + 499248000000, + 514972800000, + 530697600000, + 544608000000, + 562147200000, + 576057600000, + 594201600000, + 607507200000, + 625651200000, + 638956800000, + 657100800000, + 671011200000, + 688550400000, + 702460800000, + 720000000000, + 733910400000, + 752054400000, + 765360000000, + 783504000000, + 796809600000, + 814953600000, + 828864000000, + 846403200000, + 860313600000, + 877852800000, + 891763200000, + 909302400000, + 923212800000, + 941356800000, + 954662400000, + 972806400000, + 986112000000, + 1004256000000, + 1018166400000, + 1035705600000, + 1049616000000, + 1067155200000, + 1081065600000, + 1099209600000, + 1112515200000, + 1130659200000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "Canada/East-Saskatchewan", + "abbrs": [ + "LMT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "CST" + ], + "untils": [ + -2030202084000, + -1632063600000, + -1615132800000, + -1251651600000, + -1238349600000, + -1220202000000, + -1206900000000, + -1188752400000, + -1175450400000, + -1156698000000, + -1144000800000, + -1125248400000, + -1111946400000, + -1032714000000, + -1016992800000, + -1001264400000, + -986148000000, + -969814800000, + -954093600000, + -937760400000, + -922039200000, + -906310800000, + -890589600000, + -880210800000, + -769395600000, + -765388800000, + -748450800000, + -732729600000, + -715791600000, + -702489600000, + -684342000000, + -671040000000, + -652892400000, + -639590400000, + -620838000000, + -608140800000, + -589388400000, + -576086400000, + -557938800000, + -544636800000, + -526489200000, + -513187200000, + -495039600000, + -481737600000, + -463590000000, + -450288000000, + -431535600000, + -418233600000, + -400086000000, + -386784000000, + -337186800000, + -321465600000, + -305737200000, + null + ], + "offsets": [ + 418.6, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360 + ], + "population": 0 + }, + { + "name": "Canada/Eastern", + "abbrs": [ + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1632070800000, + -1615140000000, + -1601753400000, + -1583697600000, + -1567357200000, + -1554667200000, + -1534698000000, + -1524074400000, + -1503248400000, + -1492365600000, + -1471798800000, + -1460916000000, + -1440954000000, + -1428861600000, + -1409504400000, + -1397412000000, + -1378054800000, + -1365962400000, + -1346605200000, + -1333908000000, + -1315155600000, + -1301853600000, + -1283706000000, + -1270404000000, + -1252256400000, + -1238954400000, + -1220806800000, + -1207504800000, + -1188752400000, + -1176055200000, + -1157302800000, + -1144000800000, + -1125853200000, + -1112551200000, + -1094403600000, + -1081101600000, + -1062954000000, + -1049652000000, + -1031504400000, + -1018202400000, + -1000054800000, + -986752800000, + -968000400000, + -955303200000, + -936550800000, + -880218000000, + -769395600000, + -765396000000, + -747248400000, + -733946400000, + -715806000000, + -702504000000, + -684356400000, + -671054400000, + -652906800000, + -634161600000, + -620845200000, + -602704800000, + -589395600000, + -576093600000, + -557946000000, + -544644000000, + -526496400000, + -513194400000, + -495046800000, + -481744800000, + -463597200000, + -450295200000, + -431542800000, + -418240800000, + -400093200000, + -384372000000, + -368643600000, + -352922400000, + -337194000000, + -321472800000, + -305744400000, + -289418400000, + -273690000000, + -257968800000, + -242240400000, + -226519200000, + -210790800000, + -195069600000, + -179341200000, + -163620000000, + -147891600000, + -131565600000, + -116442000000, + -100116000000, + -84387600000, + -68666400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 136364400000, + 152085600000, + 167814000000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "Canada/Mountain", + "abbrs": [ + "LMT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1998663968000, + -1632063600000, + -1615132800000, + -1600614000000, + -1596816000000, + -1567954800000, + -1551628800000, + -1536505200000, + -1523203200000, + -1504450800000, + -1491753600000, + -1473001200000, + -1459699200000, + -880210800000, + -769395600000, + -765388800000, + -715791600000, + -702489600000, + -84380400000, + -68659200000, + -21481200000, + -5760000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 136371600000, + 152092800000, + 167821200000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 453.8667, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 0 + }, + { + "name": "Canada/Newfoundland", + "abbrs": [ + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NWT", + "NPT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST", + "NDT", + "NST" + ], + "untils": [ + -1664130548000, + -1650137348000, + -1632076148000, + -1615145348000, + -1598650148000, + -1590100148000, + -1567286948000, + -1551565748000, + -1535837348000, + -1520116148000, + -1503782948000, + -1488666548000, + -1472333348000, + -1457216948000, + -1440883748000, + -1425767348000, + -1409434148000, + -1394317748000, + -1377984548000, + -1362263348000, + -1346534948000, + -1330813748000, + -1314480548000, + -1299364148000, + -1283030948000, + -1267914548000, + -1251581348000, + -1236464948000, + -1220131748000, + -1205015348000, + -1188682148000, + -1172960948000, + -1156627748000, + -1141511348000, + -1125178148000, + -1110061748000, + -1096921748000, + -1093728600000, + -1078612200000, + -1061670600000, + -1048973400000, + -1030221000000, + -1017523800000, + -998771400000, + -986074200000, + -966717000000, + -954624600000, + -935267400000, + -922570200000, + -903817800000, + -891120600000, + -872368200000, + -769395600000, + -765401400000, + -746044200000, + -733347000000, + -714594600000, + -701897400000, + -683145000000, + -670447800000, + -651695400000, + -638998200000, + -619641000000, + -606943800000, + -589401000000, + -576099000000, + -557951400000, + -544649400000, + -526501800000, + -513199800000, + -495052200000, + -481750200000, + -463602600000, + -450300600000, + -431548200000, + -418246200000, + -400098600000, + -386796600000, + -368649000000, + -355347000000, + -337199400000, + -323897400000, + -305749800000, + -289423800000, + -273695400000, + -257974200000, + -242245800000, + -226524600000, + -210796200000, + -195075000000, + -179346600000, + -163625400000, + -147897000000, + -131571000000, + -116447400000, + -100121400000, + -84393000000, + -68671800000, + -52943400000, + -37222200000, + -21493800000, + -5772600000, + 9955800000, + 25677000000, + 41405400000, + 57731400000, + 73459800000, + 89181000000, + 104909400000, + 120630600000, + 136359000000, + 152080200000, + 167808600000, + 183529800000, + 199258200000, + 215584200000, + 230707800000, + 247033800000, + 262762200000, + 278483400000, + 294211800000, + 309933000000, + 325661400000, + 341382600000, + 357111000000, + 372832200000, + 388560600000, + 404886600000, + 420010200000, + 436336200000, + 452064600000, + 467785800000, + 483514200000, + 499235400000, + 514963800000, + 530685000000, + 544591860000, + 562127460000, + 576041460000, + 594178260000, + 607491060000, + 625631460000, + 638940660000, + 657081060000, + 670995060000, + 688530660000, + 702444660000, + 719980260000, + 733894260000, + 752034660000, + 765343860000, + 783484260000, + 796793460000, + 814933860000, + 828847860000, + 846383460000, + 860297460000, + 877833060000, + 891747060000, + 909282660000, + 923196660000, + 941337060000, + 954646260000, + 972786660000, + 986095860000, + 1004236260000, + 1018150260000, + 1035685860000, + 1049599860000, + 1067135460000, + 1081049460000, + 1099189860000, + 1112499060000, + 1130639460000, + 1143948660000, + 1162089060000, + 1173583860000, + 1194143460000, + 1205033460000, + 1225593060000, + 1236483060000, + 1257042660000, + 1268537460000, + 1289097060000, + 1299987060000, + 1320553800000, + 1331443800000, + 1352003400000, + 1362893400000, + 1383453000000, + 1394343000000, + 1414902600000, + 1425792600000, + 1446352200000, + 1457847000000, + 1478406600000, + 1489296600000, + 1509856200000, + 1520746200000, + 1541305800000, + 1552195800000, + 1572755400000, + 1583645400000, + 1604205000000, + 1615699800000, + 1636259400000, + 1647149400000, + 1667709000000, + 1678599000000, + 1699158600000, + 1710048600000, + 1730608200000, + 1741498200000, + 1762057800000, + 1772947800000, + 1793507400000, + 1805002200000, + 1825561800000, + 1836451800000, + 1857011400000, + 1867901400000, + 1888461000000, + 1899351000000, + 1919910600000, + 1930800600000, + 1951360200000, + 1962855000000, + 1983414600000, + 1994304600000, + 2014864200000, + 2025754200000, + 2046313800000, + 2057203800000, + 2077763400000, + 2088653400000, + 2109213000000, + 2120103000000, + 2140662600000, + null + ], + "offsets": [ + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 150.8667, + 210.8667, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 90, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210, + 150, + 210 + ], + "population": 0 + }, + { + "name": "Canada/Pacific", + "abbrs": [ + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1632060000000, + -1615129200000, + -880207200000, + -769395600000, + -765385200000, + -747237600000, + -732726000000, + -715788000000, + -702486000000, + -684338400000, + -671036400000, + -652888800000, + -639586800000, + -620834400000, + -608137200000, + -589384800000, + -576082800000, + -557935200000, + -544633200000, + -526485600000, + -513183600000, + -495036000000, + -481734000000, + -463586400000, + -450284400000, + -431532000000, + -418230000000, + -400082400000, + -386780400000, + -368632800000, + -355330800000, + -337183200000, + -323881200000, + -305733600000, + -292431600000, + -273679200000, + -260982000000, + -242229600000, + -226508400000, + -210780000000, + -195058800000, + -179330400000, + -163609200000, + -147880800000, + -131554800000, + -116431200000, + -100105200000, + -84376800000, + -68655600000, + -52927200000, + -37206000000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 136375200000, + 152096400000, + 167824800000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 0 + }, + { + "name": "Canada/Saskatchewan", + "abbrs": [ + "LMT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "CST" + ], + "untils": [ + -2030202084000, + -1632063600000, + -1615132800000, + -1251651600000, + -1238349600000, + -1220202000000, + -1206900000000, + -1188752400000, + -1175450400000, + -1156698000000, + -1144000800000, + -1125248400000, + -1111946400000, + -1032714000000, + -1016992800000, + -1001264400000, + -986148000000, + -969814800000, + -954093600000, + -937760400000, + -922039200000, + -906310800000, + -890589600000, + -880210800000, + -769395600000, + -765388800000, + -748450800000, + -732729600000, + -715791600000, + -702489600000, + -684342000000, + -671040000000, + -652892400000, + -639590400000, + -620838000000, + -608140800000, + -589388400000, + -576086400000, + -557938800000, + -544636800000, + -526489200000, + -513187200000, + -495039600000, + -481737600000, + -463590000000, + -450288000000, + -431535600000, + -418233600000, + -400086000000, + -386784000000, + -337186800000, + -321465600000, + -305737200000, + null + ], + "offsets": [ + 418.6, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360 + ], + "population": 0 + }, + { + "name": "Canada/Yukon", + "abbrs": [ + "YST", + "YDT", + "YST", + "YDT", + "YST", + "YWT", + "YPT", + "YST", + "YDDT", + "YST", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1632056400000, + -1615125600000, + -1596978000000, + -1583164800000, + -880203600000, + -769395600000, + -765381600000, + -147884400000, + -131554800000, + -81961200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 540, + 480, + 540, + 480, + 540, + 480, + 480, + 540, + 420, + 540, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 0 + }, + { + "name": "Chile/Continental", + "abbrs": [ + "SMT", + "CLT", + "SMT", + "CLT", + "SMT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLT", + "CLT", + "CLT", + "CLST", + "CLT", + "CLT", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST", + "CLT", + "CLST" + ], + "untils": [ + -1892661434000, + -1688410800000, + -1619205434000, + -1593806400000, + -1335986234000, + -1317585600000, + -1304362800000, + -1286049600000, + -1272826800000, + -1254513600000, + -1241290800000, + -1222977600000, + -1209754800000, + -1191355200000, + -1178132400000, + -870552000000, + -865278000000, + -740520000000, + -736376400000, + -718056000000, + -713649600000, + -36619200000, + -23922000000, + -3355200000, + 7527600000, + 24465600000, + 37767600000, + 55915200000, + 69217200000, + 87969600000, + 100666800000, + 118209600000, + 132116400000, + 150868800000, + 163566000000, + 182318400000, + 195620400000, + 213768000000, + 227070000000, + 245217600000, + 258519600000, + 277272000000, + 289969200000, + 308721600000, + 321418800000, + 340171200000, + 353473200000, + 371620800000, + 384922800000, + 403070400000, + 416372400000, + 434520000000, + 447822000000, + 466574400000, + 479271600000, + 498024000000, + 510721200000, + 529473600000, + 545194800000, + 560923200000, + 574225200000, + 592372800000, + 605674800000, + 624427200000, + 637124400000, + 653457600000, + 668574000000, + 687326400000, + 700628400000, + 718776000000, + 732078000000, + 750225600000, + 763527600000, + 781675200000, + 794977200000, + 813729600000, + 826426800000, + 845179200000, + 859690800000, + 876628800000, + 889930800000, + 906868800000, + 923194800000, + 939528000000, + 952830000000, + 971582400000, + 984279600000, + 1003032000000, + 1015729200000, + 1034481600000, + 1047178800000, + 1065931200000, + 1079233200000, + 1097380800000, + 1110682800000, + 1128830400000, + 1142132400000, + 1160884800000, + 1173582000000, + 1192334400000, + 1206846000000, + 1223784000000, + 1237086000000, + 1255233600000, + 1270350000000, + 1286683200000, + 1304823600000, + 1313899200000, + 1335668400000, + 1346558400000, + 1367118000000, + 1378612800000, + 1398567600000, + 1410062400000, + 1463281200000, + 1471147200000, + 1494730800000, + 1502596800000, + 1526180400000, + 1534046400000, + 1557630000000, + 1565496000000, + 1589079600000, + 1596945600000, + 1620529200000, + 1629000000000, + 1652583600000, + 1660449600000, + 1684033200000, + 1691899200000, + 1715482800000, + 1723348800000, + 1746932400000, + 1754798400000, + 1778382000000, + 1786248000000, + 1809831600000, + 1818302400000, + 1841886000000, + 1849752000000, + 1873335600000, + 1881201600000, + 1904785200000, + 1912651200000, + 1936234800000, + 1944100800000, + 1967684400000, + 1976155200000, + 1999738800000, + 2007604800000, + 2031188400000, + 2039054400000, + 2062638000000, + 2070504000000, + 2094087600000, + 2101953600000, + 2125537200000, + 2133403200000, + null + ], + "offsets": [ + 282.7667, + 300, + 282.7667, + 240, + 282.7667, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 180, + 240, + 300, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180, + 240, + 180 + ], + "population": 0 + }, + { + "name": "Chile/EasterIsland", + "abbrs": [ + "EMT", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST" + ], + "untils": [ + -1178124152000, + -36619200000, + -23922000000, + -3355200000, + 7527600000, + 24465600000, + 37767600000, + 55915200000, + 69217200000, + 87969600000, + 100666800000, + 118209600000, + 132116400000, + 150868800000, + 163566000000, + 182318400000, + 195620400000, + 213768000000, + 227070000000, + 245217600000, + 258519600000, + 277272000000, + 289969200000, + 308721600000, + 321418800000, + 340171200000, + 353473200000, + 371620800000, + 384922800000, + 403070400000, + 416372400000, + 434520000000, + 447822000000, + 466574400000, + 479271600000, + 498024000000, + 510721200000, + 529473600000, + 545194800000, + 560923200000, + 574225200000, + 592372800000, + 605674800000, + 624427200000, + 637124400000, + 653457600000, + 668574000000, + 687326400000, + 700628400000, + 718776000000, + 732078000000, + 750225600000, + 763527600000, + 781675200000, + 794977200000, + 813729600000, + 826426800000, + 845179200000, + 859690800000, + 876628800000, + 889930800000, + 906868800000, + 923194800000, + 939528000000, + 952830000000, + 971582400000, + 984279600000, + 1003032000000, + 1015729200000, + 1034481600000, + 1047178800000, + 1065931200000, + 1079233200000, + 1097380800000, + 1110682800000, + 1128830400000, + 1142132400000, + 1160884800000, + 1173582000000, + 1192334400000, + 1206846000000, + 1223784000000, + 1237086000000, + 1255233600000, + 1270350000000, + 1286683200000, + 1304823600000, + 1313899200000, + 1335668400000, + 1346558400000, + 1367118000000, + 1378612800000, + 1398567600000, + 1410062400000, + 1463281200000, + 1471147200000, + 1494730800000, + 1502596800000, + 1526180400000, + 1534046400000, + 1557630000000, + 1565496000000, + 1589079600000, + 1596945600000, + 1620529200000, + 1629000000000, + 1652583600000, + 1660449600000, + 1684033200000, + 1691899200000, + 1715482800000, + 1723348800000, + 1746932400000, + 1754798400000, + 1778382000000, + 1786248000000, + 1809831600000, + 1818302400000, + 1841886000000, + 1849752000000, + 1873335600000, + 1881201600000, + 1904785200000, + 1912651200000, + 1936234800000, + 1944100800000, + 1967684400000, + 1976155200000, + 1999738800000, + 2007604800000, + 2031188400000, + 2039054400000, + 2062638000000, + 2070504000000, + 2094087600000, + 2101953600000, + 2125537200000, + 2133403200000, + null + ], + "offsets": [ + 437.4667, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300 + ], + "population": 0 + }, + { + "name": "Cuba", + "abbrs": [ + "HMT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1402813824000, + -1311534000000, + -1300996800000, + -933534000000, + -925675200000, + -902084400000, + -893620800000, + -870030000000, + -862171200000, + -775681200000, + -767822400000, + -744231600000, + -736372800000, + -144702000000, + -134251200000, + -113425200000, + -102542400000, + -86295600000, + -72907200000, + -54154800000, + -41457600000, + -21495600000, + -5774400000, + 9954000000, + 25675200000, + 41403600000, + 57729600000, + 73458000000, + 87364800000, + 104907600000, + 118900800000, + 136357200000, + 150436800000, + 167806800000, + 183528000000, + 199256400000, + 215582400000, + 230706000000, + 247032000000, + 263365200000, + 276667200000, + 290581200000, + 308721600000, + 322030800000, + 340171200000, + 358318800000, + 371620800000, + 389768400000, + 403070400000, + 421218000000, + 434520000000, + 452667600000, + 466574400000, + 484117200000, + 498024000000, + 511333200000, + 529473600000, + 542782800000, + 560923200000, + 574837200000, + 592372800000, + 606286800000, + 623822400000, + 638946000000, + 655876800000, + 671000400000, + 687330000000, + 702450000000, + 718779600000, + 733899600000, + 750229200000, + 765349200000, + 781678800000, + 796798800000, + 813128400000, + 828853200000, + 844578000000, + 860302800000, + 876632400000, + 891147600000, + 909291600000, + 922597200000, + 941346000000, + 954651600000, + 972795600000, + 986101200000, + 1004245200000, + 1018155600000, + 1035694800000, + 1049605200000, + 1067144400000, + 1080450000000, + 1162098000000, + 1173589200000, + 1193547600000, + 1205643600000, + 1224997200000, + 1236488400000, + 1256446800000, + 1268542800000, + 1288501200000, + 1300597200000, + 1321160400000, + 1333256400000, + 1352005200000, + 1362891600000, + 1383454800000, + 1394341200000, + 1414904400000, + 1425790800000, + 1446354000000, + 1457845200000, + 1478408400000, + 1489294800000, + 1509858000000, + 1520744400000, + 1541307600000, + 1552194000000, + 1572757200000, + 1583643600000, + 1604206800000, + 1615698000000, + 1636261200000, + 1647147600000, + 1667710800000, + 1678597200000, + 1699160400000, + 1710046800000, + 1730610000000, + 1741496400000, + 1762059600000, + 1772946000000, + 1793509200000, + 1805000400000, + 1825563600000, + 1836450000000, + 1857013200000, + 1867899600000, + 1888462800000, + 1899349200000, + 1919912400000, + 1930798800000, + 1951362000000, + 1962853200000, + 1983416400000, + 1994302800000, + 2014866000000, + 2025752400000, + 2046315600000, + 2057202000000, + 2077765200000, + 2088651600000, + 2109214800000, + 2120101200000, + 2140664400000, + null + ], + "offsets": [ + 329.6, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "EET", + "abbrs": [ + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "EST", + "abbrs": [ + "EST" + ], + "untils": [ + null + ], + "offsets": [ + 300 + ], + "population": 0 + }, + { + "name": "EST5EDT", + "abbrs": [ + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633280400000, + -1615140000000, + -1601830800000, + -1583690400000, + -880218000000, + -769395600000, + -765396000000, + -84387600000, + -68666400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 126687600000, + 152085600000, + 162370800000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 300, + 240, + 300, + 240, + 300, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "Egypt", + "abbrs": [ + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -929844000000, + -923108400000, + -906170400000, + -892868400000, + -875844000000, + -857790000000, + -844308000000, + -825822000000, + -812685600000, + -794199600000, + -779853600000, + -762663600000, + -399088800000, + -386650800000, + -368330400000, + -355114800000, + -336790800000, + -323654400000, + -305168400000, + -292032000000, + -273632400000, + -260496000000, + -242096400000, + -228960000000, + -210560400000, + -197424000000, + -178938000000, + -165801600000, + -147402000000, + -134265600000, + -115866000000, + -102643200000, + -84330000000, + -71107200000, + -52707600000, + -39484800000, + -21171600000, + -7948800000, + 10364400000, + 23587200000, + 41900400000, + 55123200000, + 73522800000, + 86745600000, + 105058800000, + 118281600000, + 136594800000, + 149817600000, + 168130800000, + 181353600000, + 199753200000, + 212976000000, + 231289200000, + 244512000000, + 262825200000, + 276048000000, + 294361200000, + 307584000000, + 325983600000, + 339206400000, + 357519600000, + 370742400000, + 396399600000, + 402278400000, + 426812400000, + 433814400000, + 452214000000, + 465436800000, + 483750000000, + 496972800000, + 515286000000, + 528508800000, + 546822000000, + 560044800000, + 578444400000, + 591667200000, + 610412400000, + 623203200000, + 641516400000, + 654739200000, + 673052400000, + 686275200000, + 704674800000, + 717897600000, + 736210800000, + 749433600000, + 767746800000, + 780969600000, + 799020000000, + 812322000000, + 830469600000, + 843771600000, + 861919200000, + 875221200000, + 893368800000, + 906670800000, + 925423200000, + 938725200000, + 956872800000, + 970174800000, + 988322400000, + 1001624400000, + 1019772000000, + 1033074000000, + 1051221600000, + 1064523600000, + 1083276000000, + 1096578000000, + 1114725600000, + 1128027600000, + 1146175200000, + 1158872400000, + 1177624800000, + 1189112400000, + 1209074400000, + 1219957200000, + 1240524000000, + 1250802000000, + 1272578400000, + 1281474000000, + 1284069600000, + 1285880400000, + 1400191200000, + 1403816400000, + 1406844000000, + 1411678800000, + null + ], + "offsets": [ + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "Eire", + "abbrs": [ + "DMT", + "IST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT" + ], + "untils": [ + -1691962479000, + -1680471279000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -733359600000, + -719445600000, + -699490800000, + -684972000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 25.35, + -34.65, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "Etc/GMT+0", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Etc/GMT+1", + "abbrs": [ + "-01" + ], + "untils": [ + null + ], + "offsets": [ + 60 + ], + "population": 0 + }, + { + "name": "Etc/GMT+10", + "abbrs": [ + "-10" + ], + "untils": [ + null + ], + "offsets": [ + 600 + ], + "population": 0 + }, + { + "name": "Etc/GMT+11", + "abbrs": [ + "-11" + ], + "untils": [ + null + ], + "offsets": [ + 660 + ], + "population": 0 + }, + { + "name": "Etc/GMT+12", + "abbrs": [ + "-12" + ], + "untils": [ + null + ], + "offsets": [ + 720 + ], + "population": 0 + }, + { + "name": "Etc/GMT+2", + "abbrs": [ + "-02" + ], + "untils": [ + null + ], + "offsets": [ + 120 + ], + "population": 0 + }, + { + "name": "Etc/GMT+3", + "abbrs": [ + "-03" + ], + "untils": [ + null + ], + "offsets": [ + 180 + ], + "population": 0 + }, + { + "name": "Etc/GMT+4", + "abbrs": [ + "-04" + ], + "untils": [ + null + ], + "offsets": [ + 240 + ], + "population": 0 + }, + { + "name": "Etc/GMT+5", + "abbrs": [ + "-05" + ], + "untils": [ + null + ], + "offsets": [ + 300 + ], + "population": 0 + }, + { + "name": "Etc/GMT+6", + "abbrs": [ + "-06" + ], + "untils": [ + null + ], + "offsets": [ + 360 + ], + "population": 0 + }, + { + "name": "Etc/GMT+7", + "abbrs": [ + "-07" + ], + "untils": [ + null + ], + "offsets": [ + 420 + ], + "population": 0 + }, + { + "name": "Etc/GMT+8", + "abbrs": [ + "-08" + ], + "untils": [ + null + ], + "offsets": [ + 480 + ], + "population": 0 + }, + { + "name": "Etc/GMT+9", + "abbrs": [ + "-09" + ], + "untils": [ + null + ], + "offsets": [ + 540 + ], + "population": 0 + }, + { + "name": "Etc/GMT-0", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Etc/GMT-1", + "abbrs": [ + "+01" + ], + "untils": [ + null + ], + "offsets": [ + -60 + ], + "population": 0 + }, + { + "name": "Etc/GMT-10", + "abbrs": [ + "+10" + ], + "untils": [ + null + ], + "offsets": [ + -600 + ], + "population": 0 + }, + { + "name": "Etc/GMT-11", + "abbrs": [ + "+11" + ], + "untils": [ + null + ], + "offsets": [ + -660 + ], + "population": 0 + }, + { + "name": "Etc/GMT-12", + "abbrs": [ + "+12" + ], + "untils": [ + null + ], + "offsets": [ + -720 + ], + "population": 0 + }, + { + "name": "Etc/GMT-13", + "abbrs": [ + "+13" + ], + "untils": [ + null + ], + "offsets": [ + -780 + ], + "population": 0 + }, + { + "name": "Etc/GMT-14", + "abbrs": [ + "+14" + ], + "untils": [ + null + ], + "offsets": [ + -840 + ], + "population": 0 + }, + { + "name": "Etc/GMT-2", + "abbrs": [ + "+02" + ], + "untils": [ + null + ], + "offsets": [ + -120 + ], + "population": 0 + }, + { + "name": "Etc/GMT-3", + "abbrs": [ + "+03" + ], + "untils": [ + null + ], + "offsets": [ + -180 + ], + "population": 0 + }, + { + "name": "Etc/GMT-4", + "abbrs": [ + "+04" + ], + "untils": [ + null + ], + "offsets": [ + -240 + ], + "population": 0 + }, + { + "name": "Etc/GMT-5", + "abbrs": [ + "+05" + ], + "untils": [ + null + ], + "offsets": [ + -300 + ], + "population": 0 + }, + { + "name": "Etc/GMT-6", + "abbrs": [ + "+06" + ], + "untils": [ + null + ], + "offsets": [ + -360 + ], + "population": 0 + }, + { + "name": "Etc/GMT-7", + "abbrs": [ + "+07" + ], + "untils": [ + null + ], + "offsets": [ + -420 + ], + "population": 0 + }, + { + "name": "Etc/GMT-8", + "abbrs": [ + "+08" + ], + "untils": [ + null + ], + "offsets": [ + -480 + ], + "population": 0 + }, + { + "name": "Etc/GMT-9", + "abbrs": [ + "+09" + ], + "untils": [ + null + ], + "offsets": [ + -540 + ], + "population": 0 + }, + { + "name": "Etc/GMT", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Etc/GMT0", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Etc/Greenwich", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Etc/UCT", + "abbrs": [ + "UCT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Etc/UTC", + "abbrs": [ + "UTC" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Etc/Universal", + "abbrs": [ + "UTC" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Etc/Zulu", + "abbrs": [ + "UTC" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Europe/Amsterdam", + "abbrs": [ + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "AMT", + "NST", + "NEST", + "NET", + "NEST", + "NET", + "NEST", + "NET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1693700372000, + -1680484772000, + -1663453172000, + -1650147572000, + -1633213172000, + -1617488372000, + -1601158772000, + -1586038772000, + -1569709172000, + -1554589172000, + -1538259572000, + -1523139572000, + -1507501172000, + -1490566772000, + -1470176372000, + -1459117172000, + -1443997172000, + -1427667572000, + -1406672372000, + -1396217972000, + -1376950772000, + -1364768372000, + -1345414772000, + -1333318772000, + -1313792372000, + -1301264372000, + -1282256372000, + -1269814772000, + -1250720372000, + -1238365172000, + -1219184372000, + -1206915572000, + -1186957172000, + -1175465972000, + -1156025972000, + -1143411572000, + -1124489972000, + -1111961972000, + -1092953972000, + -1080512372000, + -1061331572000, + -1049062772000, + -1029190772000, + -1025745572000, + -1017613200000, + -998259600000, + -986163600000, + -966723600000, + -954109200000, + -935022000000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -766623600000, + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -19.5333, + -79.5333, + -80, + -20, + -80, + -20, + -80, + -20, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1624000 + }, + { + "name": "Europe/Andorra", + "abbrs": [ + "WET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -733881600000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 79218 + }, + { + "name": "Europe/Astrakhan", + "abbrs": [ + "LMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04" + ], + "untils": [ + -1441249932000, + -1247540400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 575416800000, + 591141600000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 717548400000, + 733273200000, + 748998000000, + 764722800000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174777200000, + 1193526000000, + 1206831600000, + 1224975600000, + 1238281200000, + 1256425200000, + 1269730800000, + 1288479600000, + 1301180400000, + 1414274400000, + 1459033200000, + null + ], + "offsets": [ + -192.2, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240 + ], + "population": 0 + }, + { + "name": "Europe/Athens", + "abbrs": [ + "AMT", + "EET", + "EEST", + "EET", + "EEST", + "CEST", + "CET", + "CEST", + "CET", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1686101632000, + -1182996000000, + -1178161200000, + -906861600000, + -904878000000, + -857257200000, + -844477200000, + -828237600000, + -812422800000, + -552362400000, + -541652400000, + 166485600000, + 186184800000, + 198028800000, + 213753600000, + 228873600000, + 244080000000, + 260323200000, + 275446800000, + 291798000000, + 307407600000, + 323388000000, + 338936400000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -94.8667, + -120, + -180, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 3484000 + }, + { + "name": "Europe/Belfast", + "abbrs": [ + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT" + ], + "untils": [ + -1691964000000, + -1680472800000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -904518000000, + -896050800000, + -875487600000, + -864601200000, + -844038000000, + -832546800000, + -812588400000, + -798073200000, + -781052400000, + -772066800000, + -764805600000, + -748476000000, + -733356000000, + -719445600000, + -717030000000, + -706748400000, + -699487200000, + -687996000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "Europe/Belgrade", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -905824800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -777942000000, + -766623600000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1180000 + }, + { + "name": "Europe/Berlin", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CEMT", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CEMT", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -938905200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -776563200000, + -765936000000, + -761180400000, + -748479600000, + -733273200000, + -717631200000, + -714610800000, + -710380800000, + -701910000000, + -684975600000, + -670460400000, + -654130800000, + -639010800000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 4069000 + }, + { + "name": "Europe/Bratislava", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -938905200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -798073200000, + -780534000000, + -761180400000, + -746578800000, + -733359600000, + -716425200000, + -701910000000, + -684975600000, + -670460400000, + -654217200000, + -639010800000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Brussels", + "abbrs": [ + "WET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1740355200000, + -1693702800000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -1613826000000, + -1604278800000, + -1585530000000, + -1574038800000, + -1552266000000, + -1539997200000, + -1520557200000, + -1507510800000, + -1490576400000, + -1473642000000, + -1459126800000, + -1444006800000, + -1427677200000, + -1411952400000, + -1396227600000, + -1379293200000, + -1364778000000, + -1348448400000, + -1333328400000, + -1316394000000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1191189600000, + -1175464800000, + -1160344800000, + -1143410400000, + -1127685600000, + -1111960800000, + -1096840800000, + -1080511200000, + -1063576800000, + -1049061600000, + -1033336800000, + -1017612000000, + -1002492000000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -934668000000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -798073200000, + -781052400000, + -766623600000, + -745455600000, + -733273200000, + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 2089000 + }, + { + "name": "Europe/Bucharest", + "abbrs": [ + "BMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1213148664000, + -1187056800000, + -1175479200000, + -1159754400000, + -1144029600000, + -1127700000000, + -1111975200000, + -1096250400000, + -1080525600000, + -1064800800000, + -1049076000000, + -1033351200000, + -1017626400000, + -1001901600000, + -986176800000, + -970452000000, + -954727200000, + 296604000000, + 307486800000, + 323816400000, + 338940000000, + 354672000000, + 370396800000, + 386121600000, + 401846400000, + 417571200000, + 433296000000, + 449020800000, + 465350400000, + 481075200000, + 496800000000, + 512524800000, + 528249600000, + 543974400000, + 559699200000, + 575424000000, + 591148800000, + 606873600000, + 622598400000, + 638323200000, + 654652800000, + 670370400000, + 686095200000, + 701820000000, + 717544800000, + 733269600000, + 748994400000, + 764719200000, + 780440400000, + 796168800000, + 811890000000, + 828223200000, + 846363600000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -104.4, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 1860000 + }, + { + "name": "Europe/Budapest", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1633212000000, + -1618700400000, + -1600466400000, + -1581202800000, + -906771600000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -778471200000, + -762660000000, + -749689200000, + -733359600000, + -717634800000, + -701910000000, + -686185200000, + -670460400000, + -654130800000, + -639010800000, + -621990000000, + -605660400000, + -492656400000, + -481168800000, + -461120400000, + -449632800000, + -428547600000, + -418269600000, + -397094400000, + -386809200000, + 323827200000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1710000 + }, + { + "name": "Europe/Busingen", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -904435200000, + -891129600000, + -872985600000, + -859680000000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Chisinau", + "abbrs": [ + "CMT", + "BMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1637114100000, + -1213148664000, + -1187056800000, + -1175479200000, + -1159754400000, + -1144029600000, + -1127700000000, + -1111975200000, + -1096250400000, + -1080525600000, + -1064800800000, + -1049076000000, + -1033351200000, + -1017626400000, + -1001901600000, + -986176800000, + -970452000000, + -954727200000, + -927165600000, + -898138800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -800157600000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 641944800000, + 654652800000, + 670377600000, + 686102400000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796168800000, + 811890000000, + 828223200000, + 846363600000, + 859680000000, + 877824000000, + 891129600000, + 909273600000, + 922579200000, + 941328000000, + 954028800000, + 972777600000, + 985478400000, + 1004227200000, + 1017532800000, + 1035676800000, + 1048982400000, + 1067126400000, + 1080432000000, + 1099180800000, + 1111881600000, + 1130630400000, + 1143331200000, + 1162080000000, + 1174780800000, + 1193529600000, + 1206835200000, + 1224979200000, + 1238284800000, + 1256428800000, + 1269734400000, + 1288483200000, + 1301184000000, + 1319932800000, + 1332633600000, + 1351382400000, + 1364688000000, + 1382832000000, + 1396137600000, + 1414281600000, + 1427587200000, + 1445731200000, + 1459036800000, + 1477785600000, + 1490486400000, + 1509235200000, + 1521936000000, + 1540684800000, + 1553990400000, + 1572134400000, + 1585440000000, + 1603584000000, + 1616889600000, + 1635638400000, + 1648339200000, + 1667088000000, + 1679788800000, + 1698537600000, + 1711843200000, + 1729987200000, + 1743292800000, + 1761436800000, + 1774742400000, + 1792886400000, + 1806192000000, + 1824940800000, + 1837641600000, + 1856390400000, + 1869091200000, + 1887840000000, + 1901145600000, + 1919289600000, + 1932595200000, + 1950739200000, + 1964044800000, + 1982793600000, + 1995494400000, + 2014243200000, + 2026944000000, + 2045692800000, + 2058393600000, + 2077142400000, + 2090448000000, + 2108592000000, + 2121897600000, + 2140041600000, + null + ], + "offsets": [ + -115, + -104.4, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 669694 + }, + { + "name": "Europe/Copenhagen", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1692496800000, + -1680490800000, + -935110800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -769388400000, + -747010800000, + -736383600000, + -715215600000, + -706748400000, + -683161200000, + -675298800000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1248000 + }, + { + "name": "Europe/Dublin", + "abbrs": [ + "DMT", + "IST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT", + "IST", + "GMT" + ], + "untils": [ + -1691962479000, + -1680471279000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -733359600000, + -719445600000, + -699490800000, + -684972000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 25.35, + -34.65, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 1160000 + }, + { + "name": "Europe/Gibraltar", + "abbrs": [ + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1691964000000, + -1680472800000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -904518000000, + -896050800000, + -875487600000, + -864601200000, + -844038000000, + -832546800000, + -812588400000, + -798073200000, + -781052400000, + -772066800000, + -764805600000, + -748476000000, + -733356000000, + -719445600000, + -717030000000, + -706748400000, + -699487200000, + -687996000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 30001 + }, + { + "name": "Europe/Guernsey", + "abbrs": [ + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT" + ], + "untils": [ + -1691964000000, + -1680472800000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -904518000000, + -896050800000, + -875487600000, + -864601200000, + -844038000000, + -832546800000, + -812588400000, + -798073200000, + -781052400000, + -772066800000, + -764805600000, + -748476000000, + -733356000000, + -719445600000, + -717030000000, + -706748400000, + -699487200000, + -687996000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "Europe/Helsinki", + "abbrs": [ + "HMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1535938789000, + -875671200000, + -859773600000, + 354672000000, + 370396800000, + 386121600000, + 401846400000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -99.8167, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 1208000 + }, + { + "name": "Europe/Isle_of_Man", + "abbrs": [ + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT" + ], + "untils": [ + -1691964000000, + -1680472800000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -904518000000, + -896050800000, + -875487600000, + -864601200000, + -844038000000, + -832546800000, + -812588400000, + -798073200000, + -781052400000, + -772066800000, + -764805600000, + -748476000000, + -733356000000, + -719445600000, + -717030000000, + -706748400000, + -699487200000, + -687996000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "Europe/Istanbul", + "abbrs": [ + "IMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "+03" + ], + "untils": [ + -1869875816000, + -1693706400000, + -1680490800000, + -1570413600000, + -1552186800000, + -1538359200000, + -1522551600000, + -1507514400000, + -1490583600000, + -1440208800000, + -1428030000000, + -1409709600000, + -1396494000000, + -931140000000, + -922762800000, + -917834400000, + -892436400000, + -875844000000, + -857358000000, + -781063200000, + -764737200000, + -744343200000, + -733806000000, + -716436000000, + -701924400000, + -684986400000, + -670474800000, + -654141600000, + -639025200000, + -621828000000, + -606970800000, + -590032800000, + -575434800000, + -235620000000, + -228279600000, + -177732000000, + -165726000000, + 10533600000, + 23835600000, + 41983200000, + 55285200000, + 74037600000, + 87339600000, + 107910000000, + 121219200000, + 133920000000, + 152676000000, + 165362400000, + 183502800000, + 202428000000, + 215557200000, + 228866400000, + 245797200000, + 260316000000, + 277246800000, + 308779200000, + 323827200000, + 340228800000, + 354672000000, + 371678400000, + 386121600000, + 403128000000, + 428446800000, + 433886400000, + 482792400000, + 496702800000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 686098800000, + 701823600000, + 717548400000, + 733273200000, + 748998000000, + 764118000000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301274000000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396227600000, + 1414285200000, + 1427590800000, + 1446944400000, + 1459040400000, + 1473195600000, + null + ], + "offsets": [ + -116.9333, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -180 + ], + "population": 13287000 + }, + { + "name": "Europe/Jersey", + "abbrs": [ + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT" + ], + "untils": [ + -1691964000000, + -1680472800000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -904518000000, + -896050800000, + -875487600000, + -864601200000, + -844038000000, + -832546800000, + -812588400000, + -798073200000, + -781052400000, + -772066800000, + -764805600000, + -748476000000, + -733356000000, + -719445600000, + -717030000000, + -706748400000, + -699487200000, + -687996000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "Europe/Kaliningrad", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CET", + "CEST", + "CET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "+03", + "EET" + ], + "untils": [ + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -938905200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -788922000000, + -778730400000, + -762663600000, + -757389600000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622598400000, + 638323200000, + 654652800000, + 670377600000, + 686102400000, + 701827200000, + 717552000000, + 733276800000, + 749001600000, + 764726400000, + 780451200000, + 796176000000, + 811900800000, + 828230400000, + 846374400000, + 859680000000, + 877824000000, + 891129600000, + 909273600000, + 922579200000, + 941328000000, + 954028800000, + 972777600000, + 985478400000, + 1004227200000, + 1017532800000, + 1035676800000, + 1048982400000, + 1067126400000, + 1080432000000, + 1099180800000, + 1111881600000, + 1130630400000, + 1143331200000, + 1162080000000, + 1174780800000, + 1193529600000, + 1206835200000, + 1224979200000, + 1238284800000, + 1256428800000, + 1269734400000, + 1288483200000, + 1301184000000, + 1414278000000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 437456 + }, + { + "name": "Europe/Kiev", + "abbrs": [ + "KMT", + "EET", + "MSK", + "CEST", + "CET", + "CEST", + "CET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1441159324000, + -1247536800000, + -892522800000, + -857257200000, + -844556400000, + -828226800000, + -825382800000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 646783200000, + 686102400000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -122.0667, + -120, + -180, + -120, + -60, + -120, + -60, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 3375000 + }, + { + "name": "Europe/Kirov", + "abbrs": [ + "LMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03" + ], + "untils": [ + -1593820800000, + -1247540400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 575416800000, + 591141600000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 717548400000, + 733273200000, + 748998000000, + 764722800000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174777200000, + 1193526000000, + 1206831600000, + 1224975600000, + 1238281200000, + 1256425200000, + 1269730800000, + 1288479600000, + 1301180400000, + 1414274400000, + null + ], + "offsets": [ + -198.8, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180 + ], + "population": 480594 + }, + { + "name": "Europe/Lisbon", + "abbrs": [ + "LMT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "CET", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + -1830381795000, + -1689555600000, + -1677801600000, + -1667437200000, + -1647738000000, + -1635814800000, + -1616202000000, + -1604365200000, + -1584666000000, + -1572742800000, + -1553043600000, + -1541206800000, + -1521507600000, + -1442451600000, + -1426813200000, + -1379293200000, + -1364778000000, + -1348448400000, + -1333328400000, + -1316394000000, + -1301274000000, + -1284339600000, + -1269824400000, + -1221440400000, + -1206925200000, + -1191200400000, + -1175475600000, + -1127696400000, + -1111971600000, + -1096851600000, + -1080522000000, + -1063587600000, + -1049072400000, + -1033347600000, + -1017622800000, + -1002502800000, + -986173200000, + -969238800000, + -950490000000, + -942022800000, + -922669200000, + -906944400000, + -891133200000, + -877309200000, + -873684000000, + -864007200000, + -857955600000, + -845859600000, + -842839200000, + -831348000000, + -825901200000, + -814410000000, + -810784800000, + -799898400000, + -794451600000, + -782960400000, + -779335200000, + -768448800000, + -763002000000, + -749091600000, + -733366800000, + -717631200000, + -701906400000, + -686181600000, + -670456800000, + -654732000000, + -639007200000, + -591832800000, + -575503200000, + -559778400000, + -544053600000, + -528328800000, + -512604000000, + -496879200000, + -481154400000, + -465429600000, + -449704800000, + -433980000000, + -417650400000, + -401925600000, + -386200800000, + -370476000000, + -354751200000, + -339026400000, + -323301600000, + -307576800000, + -291852000000, + -276127200000, + -260402400000, + -244677600000, + -228348000000, + -212623200000, + -196898400000, + -181173600000, + -165448800000, + -149724000000, + -133999200000, + -118274400000, + 212544000000, + 228268800000, + 243993600000, + 260323200000, + 276048000000, + 291772800000, + 307501200000, + 323222400000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417578400000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 36.75, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 2666000 + }, + { + "name": "Europe/Ljubljana", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -905824800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -777942000000, + -766623600000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/London", + "abbrs": [ + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT" + ], + "untils": [ + -1691964000000, + -1680472800000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -904518000000, + -896050800000, + -875487600000, + -864601200000, + -844038000000, + -832546800000, + -812588400000, + -798073200000, + -781052400000, + -772066800000, + -764805600000, + -748476000000, + -733356000000, + -719445600000, + -717030000000, + -706748400000, + -699487200000, + -687996000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 10236000 + }, + { + "name": "Europe/Luxembourg", + "abbrs": [ + "LMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -2069713476000, + -1692496800000, + -1680483600000, + -1662343200000, + -1650157200000, + -1632006000000, + -1618700400000, + -1612659600000, + -1604278800000, + -1585519200000, + -1574038800000, + -1552258800000, + -1539997200000, + -1520550000000, + -1507510800000, + -1490572800000, + -1473642000000, + -1459119600000, + -1444006800000, + -1427673600000, + -1411866000000, + -1396224000000, + -1379293200000, + -1364774400000, + -1348448400000, + -1333324800000, + -1316394000000, + -1301270400000, + -1284339600000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1191189600000, + -1175464800000, + -1160344800000, + -1143410400000, + -1127685600000, + -1111960800000, + -1096840800000, + -1080511200000, + -1063576800000, + -1049061600000, + -1033336800000, + -1017612000000, + -1002492000000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -935186400000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -797986800000, + -781052400000, + -766623600000, + -745455600000, + -733273200000, + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -24.6, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 543202 + }, + { + "name": "Europe/Madrid", + "abbrs": [ + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WEMT", + "WEST", + "WEMT", + "WEST", + "WEMT", + "WEST", + "WEMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1661734800000, + -1648429200000, + -1631926800000, + -1616893200000, + -1601254800000, + -1585357200000, + -1442451600000, + -1427677200000, + -1379293200000, + -1364778000000, + -1348448400000, + -1333328400000, + -1316394000000, + -1301274000000, + -1284339600000, + -1269824400000, + -1029114000000, + -1017622800000, + -1002848400000, + -986173200000, + -969238800000, + -954118800000, + -940208400000, + -873079200000, + -862538400000, + -842839200000, + -828237600000, + -811389600000, + -796010400000, + -779940000000, + -765421200000, + -748490400000, + -733888800000, + -652327200000, + -639190800000, + 135122400000, + 150246000000, + 167176800000, + 181695600000, + 196812000000, + 212540400000, + 228866400000, + 243990000000, + 260402400000, + 276044400000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 6171000 + }, + { + "name": "Europe/Malta", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1690765200000, + -1680487200000, + -1664758800000, + -1648951200000, + -1635123600000, + -1616896800000, + -1604278800000, + -1585533600000, + -1571014800000, + -1555293600000, + -932432400000, + -857257200000, + -844556400000, + -828226800000, + -812588400000, + -798073200000, + -781052400000, + -766717200000, + -750898800000, + -733359600000, + -719456400000, + -701917200000, + -689209200000, + -670460400000, + -114051600000, + -103168800000, + -81997200000, + -71715600000, + -50547600000, + -40266000000, + -18493200000, + -8211600000, + 12956400000, + 23238000000, + 43801200000, + 54687600000, + 75855600000, + 86742000000, + 102380400000, + 118105200000, + 135730800000, + 148518000000, + 167187600000, + 180489600000, + 198637200000, + 211939200000, + 230086800000, + 243388800000, + 261536400000, + 274838400000, + 292986000000, + 306288000000, + 323312400000, + 338342400000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 423282 + }, + { + "name": "Europe/Mariehamn", + "abbrs": [ + "HMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1535938789000, + -875671200000, + -859773600000, + 354672000000, + 370396800000, + 386121600000, + 401846400000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -99.8167, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "Europe/Minsk", + "abbrs": [ + "MMT", + "EET", + "MSK", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "+03" + ], + "untils": [ + -1441158600000, + -1247536800000, + -899780400000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -804650400000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 670374000000, + 686102400000, + 701827200000, + 717552000000, + 733276800000, + 749001600000, + 764726400000, + 780451200000, + 796176000000, + 811900800000, + 828230400000, + 846374400000, + 859680000000, + 877824000000, + 891129600000, + 909273600000, + 922579200000, + 941328000000, + 954028800000, + 972777600000, + 985478400000, + 1004227200000, + 1017532800000, + 1035676800000, + 1048982400000, + 1067126400000, + 1080432000000, + 1099180800000, + 1111881600000, + 1130630400000, + 1143331200000, + 1162080000000, + 1174780800000, + 1193529600000, + 1206835200000, + 1224979200000, + 1238284800000, + 1256428800000, + 1269734400000, + 1288483200000, + 1301184000000, + null + ], + "offsets": [ + -110, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180 + ], + "population": 1910000 + }, + { + "name": "Europe/Monaco", + "abbrs": [ + "PMT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WEMT", + "WEST", + "WEMT", + "WEST", + "WEMT", + "WEST", + "WEMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1855958961000, + -1689814800000, + -1680397200000, + -1665363600000, + -1648342800000, + -1635123600000, + -1616893200000, + -1604278800000, + -1585443600000, + -1574038800000, + -1552266000000, + -1539997200000, + -1520557200000, + -1507510800000, + -1490576400000, + -1470618000000, + -1459126800000, + -1444006800000, + -1427677200000, + -1411952400000, + -1396227600000, + -1379293200000, + -1364778000000, + -1348448400000, + -1333328400000, + -1316394000000, + -1301274000000, + -1284339600000, + -1269824400000, + -1253494800000, + -1238374800000, + -1221440400000, + -1206925200000, + -1191200400000, + -1175475600000, + -1160355600000, + -1143421200000, + -1127696400000, + -1111971600000, + -1096851600000, + -1080522000000, + -1063587600000, + -1049072400000, + -1033347600000, + -1017622800000, + -1002502800000, + -986173200000, + -969238800000, + -950490000000, + -942012000000, + -904438800000, + -891136800000, + -877827600000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796266000000, + -781052400000, + -766623600000, + 196819200000, + 212540400000, + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -9.35, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 37831 + }, + { + "name": "Europe/Moscow", + "abbrs": [ + "MMT", + "MMT", + "MST", + "MMT", + "MDST", + "MST", + "MDST", + "MSD", + "MSK", + "MSD", + "+05", + "MSD", + "MSK", + "EET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSK", + "MSK" + ], + "untils": [ + -1688265017000, + -1656819079000, + -1641353479000, + -1627965079000, + -1618716679000, + -1596429079000, + -1593820800000, + -1589860800000, + -1542427200000, + -1539493200000, + -1525323600000, + -1522728000000, + -1491188400000, + -1247536800000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 686102400000, + 695779200000, + 701823600000, + 717548400000, + 733273200000, + 748998000000, + 764722800000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174777200000, + 1193526000000, + 1206831600000, + 1224975600000, + 1238281200000, + 1256425200000, + 1269730800000, + 1288479600000, + 1301180400000, + 1414274400000, + null + ], + "offsets": [ + -150.2833, + -151.3167, + -211.3167, + -151.3167, + -271.3167, + -211.3167, + -271.3167, + -240, + -180, + -240, + -300, + -240, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180 + ], + "population": 16170000 + }, + { + "name": "Europe/Nicosia", + "abbrs": [ + "LMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1518920008000, + 166572000000, + 182293200000, + 200959200000, + 213829200000, + 228866400000, + 243982800000, + 260316000000, + 276123600000, + 291765600000, + 307486800000, + 323820000000, + 338936400000, + 354664800000, + 370386000000, + 386114400000, + 401835600000, + 417564000000, + 433285200000, + 449013600000, + 465339600000, + 481068000000, + 496789200000, + 512517600000, + 528238800000, + 543967200000, + 559688400000, + 575416800000, + 591138000000, + 606866400000, + 622587600000, + 638316000000, + 654642000000, + 670370400000, + 686091600000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796168800000, + 811890000000, + 828223200000, + 843944400000, + 859672800000, + 875394000000, + 891122400000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -133.4667, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "Europe/Oslo", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1691884800000, + -1680573600000, + -927511200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -765327600000, + -340844400000, + -324514800000, + -308790000000, + -293065200000, + -277340400000, + -261615600000, + -245890800000, + -230166000000, + -214441200000, + -198716400000, + -182991600000, + -166662000000, + -147913200000, + -135212400000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 618683 + }, + { + "name": "Europe/Paris", + "abbrs": [ + "PMT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "WEMT", + "WEST", + "WEMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1855958901000, + -1689814800000, + -1680397200000, + -1665363600000, + -1648342800000, + -1635123600000, + -1616893200000, + -1604278800000, + -1585443600000, + -1574038800000, + -1552266000000, + -1539997200000, + -1520557200000, + -1507510800000, + -1490576400000, + -1470618000000, + -1459126800000, + -1444006800000, + -1427677200000, + -1411952400000, + -1396227600000, + -1379293200000, + -1364778000000, + -1348448400000, + -1333328400000, + -1316394000000, + -1301274000000, + -1284339600000, + -1269824400000, + -1253494800000, + -1238374800000, + -1221440400000, + -1206925200000, + -1191200400000, + -1175475600000, + -1160355600000, + -1143421200000, + -1127696400000, + -1111971600000, + -1096851600000, + -1080522000000, + -1063587600000, + -1049072400000, + -1033347600000, + -1017622800000, + -1002502800000, + -986173200000, + -969238800000, + -950490000000, + -942012000000, + -932436000000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -800071200000, + -796266000000, + -781052400000, + -766623600000, + 196819200000, + 212540400000, + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -9.35, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 10858000 + }, + { + "name": "Europe/Podgorica", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -905824800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -777942000000, + -766623600000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Prague", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -938905200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -798073200000, + -780534000000, + -761180400000, + -746578800000, + -733359600000, + -716425200000, + -701910000000, + -684975600000, + -670460400000, + -654217200000, + -639010800000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1310000 + }, + { + "name": "Europe/Riga", + "abbrs": [ + "RMT", + "LST", + "RMT", + "LST", + "RMT", + "EET", + "MSK", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1632008194000, + -1618702594000, + -1601681794000, + -1597275394000, + -1377308194000, + -928029600000, + -899521200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -795834000000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622598400000, + 638323200000, + 654652800000, + 670377600000, + 686102400000, + 701827200000, + 717552000000, + 733276800000, + 749001600000, + 764726400000, + 780451200000, + 796176000000, + 811900800000, + 828230400000, + 843955200000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -96.5667, + -156.5667, + -96.5667, + -156.5667, + -96.5667, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -60, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 643615 + }, + { + "name": "Europe/Rome", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1690765200000, + -1680487200000, + -1664758800000, + -1648951200000, + -1635123600000, + -1616896800000, + -1604278800000, + -1585533600000, + -1571014800000, + -1555293600000, + -932432400000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -798073200000, + -781052400000, + -766717200000, + -750898800000, + -733359600000, + -719456400000, + -701917200000, + -689209200000, + -670460400000, + -114051600000, + -103168800000, + -81997200000, + -71715600000, + -50547600000, + -40266000000, + -18493200000, + -8211600000, + 12956400000, + 23238000000, + 43801200000, + 54687600000, + 75855600000, + 86742000000, + 107910000000, + 118191600000, + 138754800000, + 149641200000, + 170809200000, + 181090800000, + 202258800000, + 212540400000, + 233103600000, + 243990000000, + 265158000000, + 276044400000, + 296607600000, + 307494000000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 3906000 + }, + { + "name": "Europe/Samara", + "abbrs": [ + "LMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04" + ], + "untils": [ + -1593820800000, + -1247540400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 575416800000, + 591141600000, + 622594800000, + 638319600000, + 654649200000, + 687916800000, + 701820000000, + 717544800000, + 733269600000, + 748994400000, + 764719200000, + 780444000000, + 796168800000, + 811893600000, + 828223200000, + 846367200000, + 859672800000, + 877816800000, + 891122400000, + 909266400000, + 922572000000, + 941320800000, + 954021600000, + 972770400000, + 985471200000, + 1004220000000, + 1017525600000, + 1035669600000, + 1048975200000, + 1067119200000, + 1080424800000, + 1099173600000, + 1111874400000, + 1130623200000, + 1143324000000, + 1162072800000, + 1174773600000, + 1193522400000, + 1206828000000, + 1224972000000, + 1238277600000, + 1256421600000, + 1288479600000, + 1301180400000, + null + ], + "offsets": [ + -200.3333, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240 + ], + "population": 1162000 + }, + { + "name": "Europe/San_Marino", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1690765200000, + -1680487200000, + -1664758800000, + -1648951200000, + -1635123600000, + -1616896800000, + -1604278800000, + -1585533600000, + -1571014800000, + -1555293600000, + -932432400000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -798073200000, + -781052400000, + -766717200000, + -750898800000, + -733359600000, + -719456400000, + -701917200000, + -689209200000, + -670460400000, + -114051600000, + -103168800000, + -81997200000, + -71715600000, + -50547600000, + -40266000000, + -18493200000, + -8211600000, + 12956400000, + 23238000000, + 43801200000, + 54687600000, + 75855600000, + 86742000000, + 107910000000, + 118191600000, + 138754800000, + 149641200000, + 170809200000, + 181090800000, + 202258800000, + 212540400000, + 233103600000, + 243990000000, + 265158000000, + 276044400000, + 296607600000, + 307494000000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Sarajevo", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -905824800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -777942000000, + -766623600000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Saratov", + "abbrs": [ + "LMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04" + ], + "untils": [ + -1593820800000, + -1247540400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 717548400000, + 733273200000, + 748998000000, + 764722800000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174777200000, + 1193526000000, + 1206831600000, + 1224975600000, + 1238281200000, + 1256425200000, + 1269730800000, + 1288479600000, + 1301180400000, + 1414274400000, + 1480806000000, + null + ], + "offsets": [ + -184.3, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240 + ], + "population": 0 + }, + { + "name": "Europe/Simferopol", + "abbrs": [ + "SMT", + "EET", + "MSK", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "MSK", + "MSK" + ], + "untils": [ + -1441160160000, + -1247536800000, + -888894000000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -811648800000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 646786800000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 767739600000, + 780436800000, + 796165200000, + 811886400000, + 828219600000, + 846374400000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396137600000, + 1414274400000, + null + ], + "offsets": [ + -136, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -240, + -180 + ], + "population": 331936 + }, + { + "name": "Europe/Skopje", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -905824800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -777942000000, + -766623600000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Sofia", + "abbrs": [ + "EET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781048800000, + 291762000000, + 307576800000, + 323816400000, + 339026400000, + 355266000000, + 370393200000, + 386715600000, + 401846400000, + 417571200000, + 433296000000, + 449020800000, + 465350400000, + 481075200000, + 496800000000, + 512524800000, + 528249600000, + 543974400000, + 559699200000, + 575424000000, + 591148800000, + 606873600000, + 622598400000, + 638323200000, + 654652800000, + 670370400000, + 686091600000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796168800000, + 811890000000, + 828223200000, + 846363600000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 1195000 + }, + { + "name": "Europe/Stockholm", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1692496800000, + -1680483600000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1484000 + }, + { + "name": "Europe/Tallinn", + "abbrs": [ + "TMT", + "CET", + "CEST", + "CET", + "TMT", + "EET", + "MSK", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1638322740000, + -1632006000000, + -1618700400000, + -1593824400000, + -1535938740000, + -927943200000, + -892954800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -797652000000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622598400000, + 638323200000, + 654652800000, + 670377600000, + 686102400000, + 701827200000, + 717552000000, + 733276800000, + 749001600000, + 764726400000, + 780451200000, + 796176000000, + 811900800000, + 828230400000, + 846374400000, + 859680000000, + 877824000000, + 891129600000, + 909277200000, + 922582800000, + 941331600000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -99, + -60, + -120, + -60, + -99, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 407947 + }, + { + "name": "Europe/Tirane", + "abbrs": [ + "LMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1767230360000, + -932346000000, + -857257200000, + -844556400000, + -843519600000, + 136854000000, + 149896800000, + 168130800000, + 181432800000, + 199839600000, + 213141600000, + 231894000000, + 244591200000, + 263257200000, + 276040800000, + 294706800000, + 307490400000, + 326156400000, + 339458400000, + 357087600000, + 370389600000, + 389142000000, + 402444000000, + 419468400000, + 433807200000, + 449622000000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -79.3333, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 418495 + }, + { + "name": "Europe/Tiraspol", + "abbrs": [ + "CMT", + "BMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1637114100000, + -1213148664000, + -1187056800000, + -1175479200000, + -1159754400000, + -1144029600000, + -1127700000000, + -1111975200000, + -1096250400000, + -1080525600000, + -1064800800000, + -1049076000000, + -1033351200000, + -1017626400000, + -1001901600000, + -986176800000, + -970452000000, + -954727200000, + -927165600000, + -898138800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -800157600000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 641944800000, + 654652800000, + 670377600000, + 686102400000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796168800000, + 811890000000, + 828223200000, + 846363600000, + 859680000000, + 877824000000, + 891129600000, + 909273600000, + 922579200000, + 941328000000, + 954028800000, + 972777600000, + 985478400000, + 1004227200000, + 1017532800000, + 1035676800000, + 1048982400000, + 1067126400000, + 1080432000000, + 1099180800000, + 1111881600000, + 1130630400000, + 1143331200000, + 1162080000000, + 1174780800000, + 1193529600000, + 1206835200000, + 1224979200000, + 1238284800000, + 1256428800000, + 1269734400000, + 1288483200000, + 1301184000000, + 1319932800000, + 1332633600000, + 1351382400000, + 1364688000000, + 1382832000000, + 1396137600000, + 1414281600000, + 1427587200000, + 1445731200000, + 1459036800000, + 1477785600000, + 1490486400000, + 1509235200000, + 1521936000000, + 1540684800000, + 1553990400000, + 1572134400000, + 1585440000000, + 1603584000000, + 1616889600000, + 1635638400000, + 1648339200000, + 1667088000000, + 1679788800000, + 1698537600000, + 1711843200000, + 1729987200000, + 1743292800000, + 1761436800000, + 1774742400000, + 1792886400000, + 1806192000000, + 1824940800000, + 1837641600000, + 1856390400000, + 1869091200000, + 1887840000000, + 1901145600000, + 1919289600000, + 1932595200000, + 1950739200000, + 1964044800000, + 1982793600000, + 1995494400000, + 2014243200000, + 2026944000000, + 2045692800000, + 2058393600000, + 2077142400000, + 2090448000000, + 2108592000000, + 2121897600000, + 2140041600000, + null + ], + "offsets": [ + -115, + -104.4, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "Europe/Ulyanovsk", + "abbrs": [ + "LMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+03", + "+02", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04" + ], + "untils": [ + -1593820800000, + -1247540400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 575416800000, + 591141600000, + 622594800000, + 638319600000, + 654649200000, + 686102400000, + 695779200000, + 701823600000, + 717548400000, + 733273200000, + 748998000000, + 764722800000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174777200000, + 1193526000000, + 1206831600000, + 1224975600000, + 1238281200000, + 1256425200000, + 1269730800000, + 1288479600000, + 1301180400000, + 1414274400000, + 1459033200000, + null + ], + "offsets": [ + -193.6, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240 + ], + "population": 0 + }, + { + "name": "Europe/Uzhgorod", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "CET", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -938905200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -794714400000, + -773456400000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 646786800000, + 670384800000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -60, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 114789 + }, + { + "name": "Europe/Vaduz", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -904435200000, + -891129600000, + -872985600000, + -859680000000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Vatican", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1690765200000, + -1680487200000, + -1664758800000, + -1648951200000, + -1635123600000, + -1616896800000, + -1604278800000, + -1585533600000, + -1571014800000, + -1555293600000, + -932432400000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -798073200000, + -781052400000, + -766717200000, + -750898800000, + -733359600000, + -719456400000, + -701917200000, + -689209200000, + -670460400000, + -114051600000, + -103168800000, + -81997200000, + -71715600000, + -50547600000, + -40266000000, + -18493200000, + -8211600000, + 12956400000, + 23238000000, + 43801200000, + 54687600000, + 75855600000, + 86742000000, + 107910000000, + 118191600000, + 138754800000, + 149641200000, + 170809200000, + 181090800000, + 202258800000, + 212540400000, + 233103600000, + 243990000000, + 265158000000, + 276044400000, + 296607600000, + 307494000000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Vienna", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -1569711600000, + -1555801200000, + -938905200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -780188400000, + -748479600000, + -733359600000, + -717634800000, + -701910000000, + -684975600000, + -670460400000, + 323823600000, + 338940000000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1763000 + }, + { + "name": "Europe/Vilnius", + "abbrs": [ + "WMT", + "KMT", + "CET", + "EET", + "CET", + "MSK", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "CEST", + "CET", + "CEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1672536240000, + -1585100136000, + -1561251600000, + -1553565600000, + -928198800000, + -900126000000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -802144800000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622598400000, + 638323200000, + 654652800000, + 670377600000, + 686102400000, + 701827200000, + 717552000000, + 733276800000, + 749001600000, + 764726400000, + 780451200000, + 796176000000, + 811900800000, + 828230400000, + 846374400000, + 859680000000, + 877824000000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -84, + -95.6, + -60, + -120, + -60, + -180, + -120, + -60, + -120, + -60, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -120, + -60, + -120, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 535216 + }, + { + "name": "Europe/Volgograd", + "abbrs": [ + "LMT", + "+03", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+05", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03" + ], + "untils": [ + -1577761060000, + -1247540400000, + 354916800000, + 370724400000, + 386452800000, + 402260400000, + 417988800000, + 433796400000, + 449611200000, + 465343200000, + 481068000000, + 496792800000, + 512517600000, + 528242400000, + 543967200000, + 559692000000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 717548400000, + 733273200000, + 748998000000, + 764722800000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174777200000, + 1193526000000, + 1206831600000, + 1224975600000, + 1238281200000, + 1256425200000, + 1269730800000, + 1288479600000, + 1301180400000, + 1414274400000, + null + ], + "offsets": [ + -177.6667, + -180, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -300, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180 + ], + "population": 1019000 + }, + { + "name": "Europe/Warsaw", + "abbrs": [ + "WMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "EET", + "EEST", + "EET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1717032240000, + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -1600473600000, + -1587168000000, + -1501725600000, + -931734000000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796608000000, + -778726800000, + -762660000000, + -748486800000, + -733273200000, + -715215600000, + -701910000000, + -684975600000, + -670460400000, + -654130800000, + -639010800000, + -397094400000, + -386812800000, + -371088000000, + -355363200000, + -334195200000, + -323308800000, + -307584000000, + -291859200000, + -271296000000, + -260409600000, + -239846400000, + -228960000000, + -208396800000, + -197510400000, + -176342400000, + -166060800000, + 228873600000, + 243993600000, + 260323200000, + 276048000000, + 291772800000, + 307497600000, + 323827200000, + 338947200000, + 354672000000, + 370396800000, + 386121600000, + 401846400000, + 417571200000, + 433296000000, + 449020800000, + 465350400000, + 481075200000, + 496800000000, + 512524800000, + 528249600000, + 543974400000, + 559699200000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -84, + -60, + -120, + -60, + -120, + -60, + -120, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 1720000 + }, + { + "name": "Europe/Zagreb", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -905824800000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -777942000000, + -766623600000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Europe/Zaporozhye", + "abbrs": [ + "CUT", + "EET", + "MSK", + "CEST", + "CET", + "CEST", + "CET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET" + ], + "untils": [ + -1441160400000, + -1247536800000, + -894769200000, + -857257200000, + -844556400000, + -828226800000, + -826419600000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 686091600000, + 701820000000, + 717541200000, + 733269600000, + 748990800000, + 764719200000, + 780440400000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -140, + -120, + -180, + -120, + -60, + -120, + -60, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 766736 + }, + { + "name": "Europe/Zurich", + "abbrs": [ + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -904435200000, + -891129600000, + -872985600000, + -859680000000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 378884 + }, + { + "name": "GB-Eire", + "abbrs": [ + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT" + ], + "untils": [ + -1691964000000, + -1680472800000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -904518000000, + -896050800000, + -875487600000, + -864601200000, + -844038000000, + -832546800000, + -812588400000, + -798073200000, + -781052400000, + -772066800000, + -764805600000, + -748476000000, + -733356000000, + -719445600000, + -717030000000, + -706748400000, + -699487200000, + -687996000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "GB", + "abbrs": [ + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "BDST", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT", + "BST", + "GMT" + ], + "untils": [ + -1691964000000, + -1680472800000, + -1664143200000, + -1650146400000, + -1633903200000, + -1617487200000, + -1601848800000, + -1586037600000, + -1570399200000, + -1552168800000, + -1538344800000, + -1522533600000, + -1507500000000, + -1490565600000, + -1473631200000, + -1460930400000, + -1442786400000, + -1428876000000, + -1410732000000, + -1396216800000, + -1379282400000, + -1364767200000, + -1348437600000, + -1333317600000, + -1315778400000, + -1301263200000, + -1284328800000, + -1269813600000, + -1253484000000, + -1238364000000, + -1221429600000, + -1206914400000, + -1189980000000, + -1175464800000, + -1159135200000, + -1143410400000, + -1126476000000, + -1111960800000, + -1095631200000, + -1080511200000, + -1063576800000, + -1049061600000, + -1032127200000, + -1017612000000, + -1001282400000, + -986162400000, + -969228000000, + -950479200000, + -942012000000, + -904518000000, + -896050800000, + -875487600000, + -864601200000, + -844038000000, + -832546800000, + -812588400000, + -798073200000, + -781052400000, + -772066800000, + -764805600000, + -748476000000, + -733356000000, + -719445600000, + -717030000000, + -706748400000, + -699487200000, + -687996000000, + -668037600000, + -654732000000, + -636588000000, + -622072800000, + -605743200000, + -590623200000, + -574293600000, + -558568800000, + -542239200000, + -527119200000, + -512604000000, + -496274400000, + -481154400000, + -464220000000, + -449704800000, + -432165600000, + -417650400000, + -401320800000, + -386200800000, + -369266400000, + -354751200000, + -337816800000, + -323301600000, + -306972000000, + -291852000000, + -276732000000, + -257983200000, + -245282400000, + -226533600000, + -213228000000, + -195084000000, + -182383200000, + -163634400000, + -150933600000, + -132184800000, + -119484000000, + -100735200000, + -88034400000, + -68680800000, + -59004000000, + 57722400000, + 69818400000, + 89172000000, + 101268000000, + 120621600000, + 132717600000, + 152071200000, + 164167200000, + 183520800000, + 196221600000, + 214970400000, + 227671200000, + 246420000000, + 259120800000, + 278474400000, + 290570400000, + 309924000000, + 322020000000, + 341373600000, + 354675600000, + 372819600000, + 386125200000, + 404269200000, + 417574800000, + 435718800000, + 449024400000, + 467773200000, + 481078800000, + 499222800000, + 512528400000, + 530672400000, + 543978000000, + 562122000000, + 575427600000, + 593571600000, + 606877200000, + 625626000000, + 638326800000, + 657075600000, + 670381200000, + 688525200000, + 701830800000, + 719974800000, + 733280400000, + 751424400000, + 764730000000, + 782874000000, + 796179600000, + 814323600000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "GMT+0", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "GMT-0", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "GMT", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "GMT0", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Greenwich", + "abbrs": [ + "GMT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "HST", + "abbrs": [ + "HST" + ], + "untils": [ + null + ], + "offsets": [ + 600 + ], + "population": 0 + }, + { + "name": "Hongkong", + "abbrs": [ + "LMT", + "HKT", + "HKST", + "HKT", + "JST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT", + "HKST", + "HKT" + ], + "untils": [ + -2056693002000, + -907389000000, + -891667800000, + -884246400000, + -766746000000, + -747981000000, + -728544600000, + -717049800000, + -694503000000, + -683785800000, + -668064600000, + -654755400000, + -636615000000, + -623305800000, + -605165400000, + -591856200000, + -573715800000, + -559801800000, + -542352600000, + -528352200000, + -510211800000, + -498112200000, + -478762200000, + -466662600000, + -446707800000, + -435213000000, + -415258200000, + -403158600000, + -383808600000, + -371709000000, + -352359000000, + -340259400000, + -320909400000, + -308809800000, + -288855000000, + -277360200000, + -257405400000, + -245910600000, + -225955800000, + -213856200000, + -194506200000, + -182406600000, + -163056600000, + -148537800000, + -132816600000, + -117088200000, + -101367000000, + -85638600000, + -69312600000, + -53584200000, + -37863000000, + -22134600000, + -6413400000, + 9315000000, + 25036200000, + 40764600000, + 56485800000, + 72214200000, + 88540200000, + 104268600000, + 119989800000, + 126041400000, + 151439400000, + 167167800000, + 182889000000, + 198617400000, + 214338600000, + 295385400000, + 309292200000, + null + ], + "offsets": [ + -456.7, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "Iceland", + "abbrs": [ + "LMT", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "ISST", + "IST", + "GMT" + ], + "untils": [ + -1956609120000, + -1668211200000, + -1647212400000, + -1636675200000, + -1613430000000, + -1605139200000, + -1581894000000, + -1539561600000, + -1531350000000, + -968025600000, + -952293600000, + -942008400000, + -920239200000, + -909957600000, + -888789600000, + -877903200000, + -857944800000, + -846453600000, + -826495200000, + -815004000000, + -795045600000, + -783554400000, + -762991200000, + -752104800000, + -731541600000, + -717631200000, + -700092000000, + -686181600000, + -668642400000, + -654732000000, + -636588000000, + -623282400000, + -605743200000, + -591832800000, + -573688800000, + -559778400000, + -542239200000, + -528328800000, + -510789600000, + -496879200000, + -479340000000, + -465429600000, + -447890400000, + -433980000000, + -415836000000, + -401925600000, + -384386400000, + -370476000000, + -352936800000, + -339026400000, + -321487200000, + -307576800000, + -290037600000, + -276127200000, + -258588000000, + -244677600000, + -226533600000, + -212623200000, + -195084000000, + -181173600000, + -163634400000, + -149724000000, + -132184800000, + -118274400000, + -100735200000, + -86824800000, + -68680800000, + -54770400000, + null + ], + "offsets": [ + 88, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0, + 60, + 0 + ], + "population": 0 + }, + { + "name": "Indian/Antananarivo", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Indian/Chagos", + "abbrs": [ + "LMT", + "IOT", + "IOT" + ], + "untils": [ + -1988167780000, + 820436400000, + null + ], + "offsets": [ + -289.6667, + -300, + -360 + ], + "population": 3000 + }, + { + "name": "Indian/Christmas", + "abbrs": [ + "CXT" + ], + "untils": [ + null + ], + "offsets": [ + -420 + ], + "population": 2072 + }, + { + "name": "Indian/Cocos", + "abbrs": [ + "CCT" + ], + "untils": [ + null + ], + "offsets": [ + -390 + ], + "population": 596 + }, + { + "name": "Indian/Comoro", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Indian/Kerguelen", + "abbrs": [ + "-00", + "+05" + ], + "untils": [ + -631152000000, + null + ], + "offsets": [ + 0, + -300 + ], + "population": 130 + }, + { + "name": "Indian/Mahe", + "abbrs": [ + "LMT", + "SCT" + ], + "untils": [ + -2006653308000, + null + ], + "offsets": [ + -221.8, + -240 + ], + "population": 78539 + }, + { + "name": "Indian/Maldives", + "abbrs": [ + "MMT", + "MVT" + ], + "untils": [ + -315636840000, + null + ], + "offsets": [ + -294, + -300 + ], + "population": 345023 + }, + { + "name": "Indian/Mauritius", + "abbrs": [ + "LMT", + "MUT", + "MUST", + "MUT", + "MUST", + "MUT" + ], + "untils": [ + -1988164200000, + 403041600000, + 417034800000, + 1224972000000, + 1238274000000, + null + ], + "offsets": [ + -230, + -240, + -300, + -240, + -300, + -240 + ], + "population": 148001 + }, + { + "name": "Indian/Mayotte", + "abbrs": [ + "LMT", + "EAT", + "BEAT", + "BEAUT", + "EAT" + ], + "untils": [ + -1309746436000, + -1262314800000, + -946780200000, + -315629100000, + null + ], + "offsets": [ + -147.2667, + -180, + -150, + -165, + -180 + ], + "population": 0 + }, + { + "name": "Indian/Reunion", + "abbrs": [ + "LMT", + "RET" + ], + "untils": [ + -1848886912000, + null + ], + "offsets": [ + -221.8667, + -240 + ], + "population": 843617 + }, + { + "name": "Iran", + "abbrs": [ + "LMT", + "TMT", + "IRST", + "IRST", + "IRDT", + "IRST", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST", + "IRDT", + "IRST" + ], + "untils": [ + -1704165944000, + -757394744000, + 247177800000, + 259272000000, + 277758000000, + 283982400000, + 290809800000, + 306531000000, + 322432200000, + 338499000000, + 673216200000, + 685481400000, + 701209800000, + 717103800000, + 732745800000, + 748639800000, + 764281800000, + 780175800000, + 795817800000, + 811711800000, + 827353800000, + 843247800000, + 858976200000, + 874870200000, + 890512200000, + 906406200000, + 922048200000, + 937942200000, + 953584200000, + 969478200000, + 985206600000, + 1001100600000, + 1016742600000, + 1032636600000, + 1048278600000, + 1064172600000, + 1079814600000, + 1095708600000, + 1111437000000, + 1127331000000, + 1206045000000, + 1221939000000, + 1237667400000, + 1253561400000, + 1269203400000, + 1285097400000, + 1300739400000, + 1316633400000, + 1332275400000, + 1348169400000, + 1363897800000, + 1379791800000, + 1395433800000, + 1411327800000, + 1426969800000, + 1442863800000, + 1458505800000, + 1474399800000, + 1490128200000, + 1506022200000, + 1521664200000, + 1537558200000, + 1553200200000, + 1569094200000, + 1584736200000, + 1600630200000, + 1616358600000, + 1632252600000, + 1647894600000, + 1663788600000, + 1679430600000, + 1695324600000, + 1710966600000, + 1726860600000, + 1742589000000, + 1758483000000, + 1774125000000, + 1790019000000, + 1805661000000, + 1821555000000, + 1837197000000, + 1853091000000, + 1868733000000, + 1884627000000, + 1900355400000, + 1916249400000, + 1931891400000, + 1947785400000, + 1963427400000, + 1979321400000, + 1994963400000, + 2010857400000, + 2026585800000, + 2042479800000, + 2058121800000, + 2074015800000, + 2089657800000, + 2105551800000, + 2121193800000, + 2137087800000, + null + ], + "offsets": [ + -205.7333, + -205.7333, + -210, + -240, + -300, + -240, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210, + -270, + -210 + ], + "population": 0 + }, + { + "name": "Israel", + "abbrs": [ + "JMT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDDT", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST", + "IDT", + "IST" + ], + "untils": [ + -1641003640000, + -933645600000, + -857358000000, + -844300800000, + -825822000000, + -812685600000, + -794199600000, + -779853600000, + -762656400000, + -748310400000, + -731127600000, + -681962400000, + -673243200000, + -667962000000, + -652327200000, + -636426000000, + -622087200000, + -608947200000, + -591847200000, + -572486400000, + -558576000000, + -542851200000, + -527731200000, + -514425600000, + -490845600000, + -482986800000, + -459475200000, + -451537200000, + -428551200000, + -418262400000, + -400032000000, + -387428400000, + 142380000000, + 150843600000, + 167176800000, + 178664400000, + 482277600000, + 495579600000, + 516751200000, + 526424400000, + 545436000000, + 558478800000, + 576626400000, + 589323600000, + 609890400000, + 620773200000, + 638316000000, + 651618000000, + 669765600000, + 683672400000, + 701820000000, + 715726800000, + 733701600000, + 747176400000, + 765151200000, + 778021200000, + 796600800000, + 810075600000, + 826840800000, + 842821200000, + 858895200000, + 874184400000, + 890344800000, + 905029200000, + 923011200000, + 936313200000, + 955670400000, + 970783200000, + 986770800000, + 1001282400000, + 1017356400000, + 1033941600000, + 1048806000000, + 1065132000000, + 1081292400000, + 1095804000000, + 1112313600000, + 1128812400000, + 1143763200000, + 1159657200000, + 1175212800000, + 1189897200000, + 1206662400000, + 1223161200000, + 1238112000000, + 1254006000000, + 1269561600000, + 1284246000000, + 1301616000000, + 1317510000000, + 1333065600000, + 1348354800000, + 1364515200000, + 1382828400000, + 1395964800000, + 1414278000000, + 1427414400000, + 1445727600000, + 1458864000000, + 1477782000000, + 1490313600000, + 1509231600000, + 1521763200000, + 1540681200000, + 1553817600000, + 1572130800000, + 1585267200000, + 1603580400000, + 1616716800000, + 1635634800000, + 1648166400000, + 1667084400000, + 1679616000000, + 1698534000000, + 1711670400000, + 1729983600000, + 1743120000000, + 1761433200000, + 1774569600000, + 1792882800000, + 1806019200000, + 1824937200000, + 1837468800000, + 1856386800000, + 1868918400000, + 1887836400000, + 1900972800000, + 1919286000000, + 1932422400000, + 1950735600000, + 1963872000000, + 1982790000000, + 1995321600000, + 2014239600000, + 2026771200000, + 2045689200000, + 2058220800000, + 2077138800000, + 2090275200000, + 2108588400000, + 2121724800000, + 2140038000000, + null + ], + "offsets": [ + -140.6667, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -240, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120 + ], + "population": 0 + }, + { + "name": "Jamaica", + "abbrs": [ + "KMT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1827687169000, + 126687600000, + 152085600000, + 162370800000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + null + ], + "offsets": [ + 307.1833, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "Japan", + "abbrs": [ + "JCST", + "JST", + "JDT", + "JST", + "JDT", + "JST", + "JDT", + "JST", + "JDT", + "JST" + ], + "untils": [ + -1017824400000, + -683794800000, + -672393600000, + -654764400000, + -640944000000, + -620290800000, + -609494400000, + -588841200000, + -578044800000, + null + ], + "offsets": [ + -540, + -540, + -600, + -540, + -600, + -540, + -600, + -540, + -600, + -540 + ], + "population": 0 + }, + { + "name": "Kwajalein", + "abbrs": [ + "MHT", + "KWAT", + "MHT" + ], + "untils": [ + -7988400000, + 745848000000, + null + ], + "offsets": [ + -660, + 720, + -720 + ], + "population": 0 + }, + { + "name": "Libya", + "abbrs": [ + "LMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "EET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "EET", + "CET", + "CEST", + "EET", + "CET", + "CEST", + "EET" + ], + "untils": [ + -1577926364000, + -574902000000, + -568087200000, + -512175600000, + -504928800000, + -449888400000, + -441856800000, + -347158800000, + 378684000000, + 386463600000, + 402271200000, + 417999600000, + 433807200000, + 449622000000, + 465429600000, + 481590000000, + 496965600000, + 512953200000, + 528674400000, + 544230000000, + 560037600000, + 575852400000, + 591660000000, + 607388400000, + 623196000000, + 641775600000, + 844034400000, + 860108400000, + 875916000000, + 1352505600000, + 1364515200000, + 1382659200000, + null + ], + "offsets": [ + -52.7333, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -120, + -60, + -120, + -120 + ], + "population": 0 + }, + { + "name": "MET", + "abbrs": [ + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET", + "MEST", + "MET" + ], + "untils": [ + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -938905200000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796777200000, + -781052400000, + -766623600000, + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "MST", + "abbrs": [ + "MST" + ], + "untils": [ + null + ], + "offsets": [ + 420 + ], + "population": 0 + }, + { + "name": "MST7MDT", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -880210800000, + -769395600000, + -765388800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 126694800000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 0 + }, + { + "name": "Mexico/BajaNorte", + "abbrs": [ + "LMT", + "MST", + "PST", + "MST", + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1514736000000, + -1451667600000, + -1343062800000, + -1234803600000, + -1222963200000, + -1207242000000, + -873820800000, + -769395600000, + -761677200000, + -686073600000, + -661539600000, + -495039600000, + -481734000000, + -463590000000, + -450284400000, + -431535600000, + -418230000000, + -400086000000, + -386780400000, + -368636400000, + -355330800000, + -337186800000, + -323881200000, + -305737200000, + -292431600000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1175421600000, + 1193562000000, + 1207476000000, + 1225011600000, + 1238925600000, + 1256461200000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 468.0667, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 0 + }, + { + "name": "Mexico/BajaSur", + "abbrs": [ + "LMT", + "MST", + "CST", + "MST", + "CST", + "MST", + "CST", + "MST", + "PST", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1514739600000, + -1343066400000, + -1234807200000, + -1220292000000, + -1207159200000, + -1191344400000, + -873828000000, + -661539600000, + 28800000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 989139600000, + 1001836800000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1175418000000, + 1193558400000, + 1207472400000, + 1225008000000, + 1238922000000, + 1256457600000, + 1270371600000, + 1288512000000, + 1301821200000, + 1319961600000, + 1333270800000, + 1351411200000, + 1365325200000, + 1382860800000, + 1396774800000, + 1414310400000, + 1428224400000, + 1445760000000, + 1459674000000, + 1477814400000, + 1491123600000, + 1509264000000, + 1522573200000, + 1540713600000, + 1554627600000, + 1572163200000, + 1586077200000, + 1603612800000, + 1617526800000, + 1635667200000, + 1648976400000, + 1667116800000, + 1680426000000, + 1698566400000, + 1712480400000, + 1730016000000, + 1743930000000, + 1761465600000, + 1775379600000, + 1792915200000, + 1806829200000, + 1824969600000, + 1838278800000, + 1856419200000, + 1869728400000, + 1887868800000, + 1901782800000, + 1919318400000, + 1933232400000, + 1950768000000, + 1964682000000, + 1982822400000, + 1996131600000, + 2014272000000, + 2027581200000, + 2045721600000, + 2059030800000, + 2077171200000, + 2091085200000, + 2108620800000, + 2122534800000, + 2140070400000, + null + ], + "offsets": [ + 425.6667, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 480, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 0 + }, + { + "name": "Mexico/General", + "abbrs": [ + "LMT", + "MST", + "CST", + "MST", + "CST", + "MST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1514739600000, + -1343066400000, + -1234807200000, + -1220292000000, + -1207159200000, + -1191344400000, + -975261600000, + -963169200000, + -917114400000, + -907354800000, + -821901600000, + -810068400000, + -627501600000, + -612990000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 989136000000, + 1001833200000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1175414400000, + 1193554800000, + 1207468800000, + 1225004400000, + 1238918400000, + 1256454000000, + 1270368000000, + 1288508400000, + 1301817600000, + 1319958000000, + 1333267200000, + 1351407600000, + 1365321600000, + 1382857200000, + 1396771200000, + 1414306800000, + 1428220800000, + 1445756400000, + 1459670400000, + 1477810800000, + 1491120000000, + 1509260400000, + 1522569600000, + 1540710000000, + 1554624000000, + 1572159600000, + 1586073600000, + 1603609200000, + 1617523200000, + 1635663600000, + 1648972800000, + 1667113200000, + 1680422400000, + 1698562800000, + 1712476800000, + 1730012400000, + 1743926400000, + 1761462000000, + 1775376000000, + 1792911600000, + 1806825600000, + 1824966000000, + 1838275200000, + 1856415600000, + 1869724800000, + 1887865200000, + 1901779200000, + 1919314800000, + 1933228800000, + 1950764400000, + 1964678400000, + 1982818800000, + 1996128000000, + 2014268400000, + 2027577600000, + 2045718000000, + 2059027200000, + 2077167600000, + 2091081600000, + 2108617200000, + 2122531200000, + 2140066800000, + null + ], + "offsets": [ + 396.6, + 420, + 360, + 420, + 360, + 420, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "NZ-CHAT", + "abbrs": [ + "CHAST", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT" + ], + "untils": [ + -757426500000, + 152632800000, + 162309600000, + 183477600000, + 194968800000, + 215532000000, + 226418400000, + 246981600000, + 257868000000, + 278431200000, + 289317600000, + 309880800000, + 320767200000, + 341330400000, + 352216800000, + 372780000000, + 384271200000, + 404834400000, + 415720800000, + 436284000000, + 447170400000, + 467733600000, + 478620000000, + 499183200000, + 510069600000, + 530632800000, + 541519200000, + 562082400000, + 573573600000, + 594136800000, + 605023200000, + 623772000000, + 637682400000, + 655221600000, + 669132000000, + 686671200000, + 700581600000, + 718120800000, + 732636000000, + 749570400000, + 764085600000, + 781020000000, + 795535200000, + 812469600000, + 826984800000, + 844524000000, + 858434400000, + 875973600000, + 889884000000, + 907423200000, + 921938400000, + 938872800000, + 953388000000, + 970322400000, + 984837600000, + 1002376800000, + 1016287200000, + 1033826400000, + 1047736800000, + 1065276000000, + 1079791200000, + 1096725600000, + 1111240800000, + 1128175200000, + 1142690400000, + 1159624800000, + 1174140000000, + 1191074400000, + 1207404000000, + 1222524000000, + 1238853600000, + 1253973600000, + 1270303200000, + 1285423200000, + 1301752800000, + 1316872800000, + 1333202400000, + 1348927200000, + 1365256800000, + 1380376800000, + 1396706400000, + 1411826400000, + 1428156000000, + 1443276000000, + 1459605600000, + 1474725600000, + 1491055200000, + 1506175200000, + 1522504800000, + 1538229600000, + 1554559200000, + 1569679200000, + 1586008800000, + 1601128800000, + 1617458400000, + 1632578400000, + 1648908000000, + 1664028000000, + 1680357600000, + 1695477600000, + 1712412000000, + 1727532000000, + 1743861600000, + 1758981600000, + 1775311200000, + 1790431200000, + 1806760800000, + 1821880800000, + 1838210400000, + 1853330400000, + 1869660000000, + 1885384800000, + 1901714400000, + 1916834400000, + 1933164000000, + 1948284000000, + 1964613600000, + 1979733600000, + 1996063200000, + 2011183200000, + 2027512800000, + 2042632800000, + 2058962400000, + 2074687200000, + 2091016800000, + 2106136800000, + 2122466400000, + 2137586400000, + null + ], + "offsets": [ + -735, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825 + ], + "population": 0 + }, + { + "name": "NZ", + "abbrs": [ + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT" + ], + "untils": [ + -1330335000000, + -1320057000000, + -1300699800000, + -1287396000000, + -1269250200000, + -1255946400000, + -1237800600000, + -1224496800000, + -1206351000000, + -1192442400000, + -1174901400000, + -1160992800000, + -1143451800000, + -1125914400000, + -1112607000000, + -1094464800000, + -1081157400000, + -1063015200000, + -1049707800000, + -1031565600000, + -1018258200000, + -1000116000000, + -986808600000, + -968061600000, + -955359000000, + -936612000000, + -923304600000, + 152632800000, + 162309600000, + 183477600000, + 194968800000, + 215532000000, + 226418400000, + 246981600000, + 257868000000, + 278431200000, + 289317600000, + 309880800000, + 320767200000, + 341330400000, + 352216800000, + 372780000000, + 384271200000, + 404834400000, + 415720800000, + 436284000000, + 447170400000, + 467733600000, + 478620000000, + 499183200000, + 510069600000, + 530632800000, + 541519200000, + 562082400000, + 573573600000, + 594136800000, + 605023200000, + 623772000000, + 637682400000, + 655221600000, + 669132000000, + 686671200000, + 700581600000, + 718120800000, + 732636000000, + 749570400000, + 764085600000, + 781020000000, + 795535200000, + 812469600000, + 826984800000, + 844524000000, + 858434400000, + 875973600000, + 889884000000, + 907423200000, + 921938400000, + 938872800000, + 953388000000, + 970322400000, + 984837600000, + 1002376800000, + 1016287200000, + 1033826400000, + 1047736800000, + 1065276000000, + 1079791200000, + 1096725600000, + 1111240800000, + 1128175200000, + 1142690400000, + 1159624800000, + 1174140000000, + 1191074400000, + 1207404000000, + 1222524000000, + 1238853600000, + 1253973600000, + 1270303200000, + 1285423200000, + 1301752800000, + 1316872800000, + 1333202400000, + 1348927200000, + 1365256800000, + 1380376800000, + 1396706400000, + 1411826400000, + 1428156000000, + 1443276000000, + 1459605600000, + 1474725600000, + 1491055200000, + 1506175200000, + 1522504800000, + 1538229600000, + 1554559200000, + 1569679200000, + 1586008800000, + 1601128800000, + 1617458400000, + 1632578400000, + 1648908000000, + 1664028000000, + 1680357600000, + 1695477600000, + 1712412000000, + 1727532000000, + 1743861600000, + 1758981600000, + 1775311200000, + 1790431200000, + 1806760800000, + 1821880800000, + 1838210400000, + 1853330400000, + 1869660000000, + 1885384800000, + 1901714400000, + 1916834400000, + 1933164000000, + 1948284000000, + 1964613600000, + 1979733600000, + 1996063200000, + 2011183200000, + 2027512800000, + 2042632800000, + 2058962400000, + 2074687200000, + 2091016800000, + 2106136800000, + 2122466400000, + 2137586400000, + null + ], + "offsets": [ + -690, + -750, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780 + ], + "population": 0 + }, + { + "name": "Navajo", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -1570374000000, + -1551628800000, + -1538924400000, + -1534089600000, + -880210800000, + -769395600000, + -765388800000, + -147884400000, + -131558400000, + -116434800000, + -100108800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 126694800000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 0 + }, + { + "name": "PRC", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -933494400000, + -923130000000, + -908784000000, + -891594000000, + 515520000000, + 527007600000, + 545155200000, + 558457200000, + 576604800000, + 589906800000, + 608659200000, + 621961200000, + 640108800000, + 653410800000, + 671558400000, + 684860400000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "PST8PDT", + "abbrs": [ + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1633269600000, + -1615129200000, + -1601820000000, + -1583679600000, + -880207200000, + -769395600000, + -765385200000, + -84376800000, + -68655600000, + -52927200000, + -37206000000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 126698400000, + 152096400000, + 162381600000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 0 + }, + { + "name": "Pacific/Apia", + "abbrs": [ + "LMT", + "WSST", + "SST", + "SDT", + "SST", + "SDT", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT", + "WSST", + "WSDT" + ], + "untils": [ + -1861878784000, + -631110600000, + 1285498800000, + 1301752800000, + 1316872800000, + 1325239200000, + 1333202400000, + 1348927200000, + 1365256800000, + 1380376800000, + 1396706400000, + 1411826400000, + 1428156000000, + 1443276000000, + 1459605600000, + 1474725600000, + 1491055200000, + 1506175200000, + 1522504800000, + 1538229600000, + 1554559200000, + 1569679200000, + 1586008800000, + 1601128800000, + 1617458400000, + 1632578400000, + 1648908000000, + 1664028000000, + 1680357600000, + 1695477600000, + 1712412000000, + 1727532000000, + 1743861600000, + 1758981600000, + 1775311200000, + 1790431200000, + 1806760800000, + 1821880800000, + 1838210400000, + 1853330400000, + 1869660000000, + 1885384800000, + 1901714400000, + 1916834400000, + 1933164000000, + 1948284000000, + 1964613600000, + 1979733600000, + 1996063200000, + 2011183200000, + 2027512800000, + 2042632800000, + 2058962400000, + 2074687200000, + 2091016800000, + 2106136800000, + 2122466400000, + 2137586400000, + null + ], + "offsets": [ + 686.9333, + 690, + 660, + 600, + 660, + 600, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840 + ], + "population": 36735 + }, + { + "name": "Pacific/Auckland", + "abbrs": [ + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZMT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT", + "NZST", + "NZDT" + ], + "untils": [ + -1330335000000, + -1320057000000, + -1300699800000, + -1287396000000, + -1269250200000, + -1255946400000, + -1237800600000, + -1224496800000, + -1206351000000, + -1192442400000, + -1174901400000, + -1160992800000, + -1143451800000, + -1125914400000, + -1112607000000, + -1094464800000, + -1081157400000, + -1063015200000, + -1049707800000, + -1031565600000, + -1018258200000, + -1000116000000, + -986808600000, + -968061600000, + -955359000000, + -936612000000, + -923304600000, + 152632800000, + 162309600000, + 183477600000, + 194968800000, + 215532000000, + 226418400000, + 246981600000, + 257868000000, + 278431200000, + 289317600000, + 309880800000, + 320767200000, + 341330400000, + 352216800000, + 372780000000, + 384271200000, + 404834400000, + 415720800000, + 436284000000, + 447170400000, + 467733600000, + 478620000000, + 499183200000, + 510069600000, + 530632800000, + 541519200000, + 562082400000, + 573573600000, + 594136800000, + 605023200000, + 623772000000, + 637682400000, + 655221600000, + 669132000000, + 686671200000, + 700581600000, + 718120800000, + 732636000000, + 749570400000, + 764085600000, + 781020000000, + 795535200000, + 812469600000, + 826984800000, + 844524000000, + 858434400000, + 875973600000, + 889884000000, + 907423200000, + 921938400000, + 938872800000, + 953388000000, + 970322400000, + 984837600000, + 1002376800000, + 1016287200000, + 1033826400000, + 1047736800000, + 1065276000000, + 1079791200000, + 1096725600000, + 1111240800000, + 1128175200000, + 1142690400000, + 1159624800000, + 1174140000000, + 1191074400000, + 1207404000000, + 1222524000000, + 1238853600000, + 1253973600000, + 1270303200000, + 1285423200000, + 1301752800000, + 1316872800000, + 1333202400000, + 1348927200000, + 1365256800000, + 1380376800000, + 1396706400000, + 1411826400000, + 1428156000000, + 1443276000000, + 1459605600000, + 1474725600000, + 1491055200000, + 1506175200000, + 1522504800000, + 1538229600000, + 1554559200000, + 1569679200000, + 1586008800000, + 1601128800000, + 1617458400000, + 1632578400000, + 1648908000000, + 1664028000000, + 1680357600000, + 1695477600000, + 1712412000000, + 1727532000000, + 1743861600000, + 1758981600000, + 1775311200000, + 1790431200000, + 1806760800000, + 1821880800000, + 1838210400000, + 1853330400000, + 1869660000000, + 1885384800000, + 1901714400000, + 1916834400000, + 1933164000000, + 1948284000000, + 1964613600000, + 1979733600000, + 1996063200000, + 2011183200000, + 2027512800000, + 2042632800000, + 2058962400000, + 2074687200000, + 2091016800000, + 2106136800000, + 2122466400000, + 2137586400000, + null + ], + "offsets": [ + -690, + -750, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -690, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780 + ], + "population": 1356000 + }, + { + "name": "Pacific/Bougainville", + "abbrs": [ + "PGT", + "JST", + "PGT", + "BST" + ], + "untils": [ + -868010400000, + -768906000000, + 1419696000000, + null + ], + "offsets": [ + -600, + -540, + -600, + -660 + ], + "population": 175160 + }, + { + "name": "Pacific/Chatham", + "abbrs": [ + "CHAST", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT", + "CHAST", + "CHADT" + ], + "untils": [ + -757426500000, + 152632800000, + 162309600000, + 183477600000, + 194968800000, + 215532000000, + 226418400000, + 246981600000, + 257868000000, + 278431200000, + 289317600000, + 309880800000, + 320767200000, + 341330400000, + 352216800000, + 372780000000, + 384271200000, + 404834400000, + 415720800000, + 436284000000, + 447170400000, + 467733600000, + 478620000000, + 499183200000, + 510069600000, + 530632800000, + 541519200000, + 562082400000, + 573573600000, + 594136800000, + 605023200000, + 623772000000, + 637682400000, + 655221600000, + 669132000000, + 686671200000, + 700581600000, + 718120800000, + 732636000000, + 749570400000, + 764085600000, + 781020000000, + 795535200000, + 812469600000, + 826984800000, + 844524000000, + 858434400000, + 875973600000, + 889884000000, + 907423200000, + 921938400000, + 938872800000, + 953388000000, + 970322400000, + 984837600000, + 1002376800000, + 1016287200000, + 1033826400000, + 1047736800000, + 1065276000000, + 1079791200000, + 1096725600000, + 1111240800000, + 1128175200000, + 1142690400000, + 1159624800000, + 1174140000000, + 1191074400000, + 1207404000000, + 1222524000000, + 1238853600000, + 1253973600000, + 1270303200000, + 1285423200000, + 1301752800000, + 1316872800000, + 1333202400000, + 1348927200000, + 1365256800000, + 1380376800000, + 1396706400000, + 1411826400000, + 1428156000000, + 1443276000000, + 1459605600000, + 1474725600000, + 1491055200000, + 1506175200000, + 1522504800000, + 1538229600000, + 1554559200000, + 1569679200000, + 1586008800000, + 1601128800000, + 1617458400000, + 1632578400000, + 1648908000000, + 1664028000000, + 1680357600000, + 1695477600000, + 1712412000000, + 1727532000000, + 1743861600000, + 1758981600000, + 1775311200000, + 1790431200000, + 1806760800000, + 1821880800000, + 1838210400000, + 1853330400000, + 1869660000000, + 1885384800000, + 1901714400000, + 1916834400000, + 1933164000000, + 1948284000000, + 1964613600000, + 1979733600000, + 1996063200000, + 2011183200000, + 2027512800000, + 2042632800000, + 2058962400000, + 2074687200000, + 2091016800000, + 2106136800000, + 2122466400000, + 2137586400000, + null + ], + "offsets": [ + -735, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825, + -765, + -825 + ], + "population": 600 + }, + { + "name": "Pacific/Chuuk", + "abbrs": [ + "CHUT" + ], + "untils": [ + null + ], + "offsets": [ + -600 + ], + "population": 48654 + }, + { + "name": "Pacific/Easter", + "abbrs": [ + "EMT", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST", + "EAST", + "EASST" + ], + "untils": [ + -1178124152000, + -36619200000, + -23922000000, + -3355200000, + 7527600000, + 24465600000, + 37767600000, + 55915200000, + 69217200000, + 87969600000, + 100666800000, + 118209600000, + 132116400000, + 150868800000, + 163566000000, + 182318400000, + 195620400000, + 213768000000, + 227070000000, + 245217600000, + 258519600000, + 277272000000, + 289969200000, + 308721600000, + 321418800000, + 340171200000, + 353473200000, + 371620800000, + 384922800000, + 403070400000, + 416372400000, + 434520000000, + 447822000000, + 466574400000, + 479271600000, + 498024000000, + 510721200000, + 529473600000, + 545194800000, + 560923200000, + 574225200000, + 592372800000, + 605674800000, + 624427200000, + 637124400000, + 653457600000, + 668574000000, + 687326400000, + 700628400000, + 718776000000, + 732078000000, + 750225600000, + 763527600000, + 781675200000, + 794977200000, + 813729600000, + 826426800000, + 845179200000, + 859690800000, + 876628800000, + 889930800000, + 906868800000, + 923194800000, + 939528000000, + 952830000000, + 971582400000, + 984279600000, + 1003032000000, + 1015729200000, + 1034481600000, + 1047178800000, + 1065931200000, + 1079233200000, + 1097380800000, + 1110682800000, + 1128830400000, + 1142132400000, + 1160884800000, + 1173582000000, + 1192334400000, + 1206846000000, + 1223784000000, + 1237086000000, + 1255233600000, + 1270350000000, + 1286683200000, + 1304823600000, + 1313899200000, + 1335668400000, + 1346558400000, + 1367118000000, + 1378612800000, + 1398567600000, + 1410062400000, + 1463281200000, + 1471147200000, + 1494730800000, + 1502596800000, + 1526180400000, + 1534046400000, + 1557630000000, + 1565496000000, + 1589079600000, + 1596945600000, + 1620529200000, + 1629000000000, + 1652583600000, + 1660449600000, + 1684033200000, + 1691899200000, + 1715482800000, + 1723348800000, + 1746932400000, + 1754798400000, + 1778382000000, + 1786248000000, + 1809831600000, + 1818302400000, + 1841886000000, + 1849752000000, + 1873335600000, + 1881201600000, + 1904785200000, + 1912651200000, + 1936234800000, + 1944100800000, + 1967684400000, + 1976155200000, + 1999738800000, + 2007604800000, + 2031188400000, + 2039054400000, + 2062638000000, + 2070504000000, + 2094087600000, + 2101953600000, + 2125537200000, + 2133403200000, + null + ], + "offsets": [ + 437.4667, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300 + ], + "population": 3000 + }, + { + "name": "Pacific/Efate", + "abbrs": [ + "LMT", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT", + "VUST", + "VUT" + ], + "untils": [ + -1829387596000, + 433256400000, + 448977600000, + 467298000000, + 480427200000, + 496760400000, + 511876800000, + 528210000000, + 543931200000, + 559659600000, + 575380800000, + 591109200000, + 606830400000, + 622558800000, + 638280000000, + 654008400000, + 669729600000, + 686062800000, + 696340800000, + 719931600000, + 727790400000, + null + ], + "offsets": [ + -673.2667, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660, + -720, + -660 + ], + "population": 65829 + }, + { + "name": "Pacific/Enderbury", + "abbrs": [ + "PHOT", + "PHOT", + "PHOT" + ], + "untils": [ + 307627200000, + 788958000000, + null + ], + "offsets": [ + 720, + 660, + -780 + ], + "population": 1 + }, + { + "name": "Pacific/Fakaofo", + "abbrs": [ + "TKT", + "TKT" + ], + "untils": [ + 1325242800000, + null + ], + "offsets": [ + 660, + -780 + ], + "population": 483 + }, + { + "name": "Pacific/Fiji", + "abbrs": [ + "LMT", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT", + "FJST", + "FJT" + ], + "untils": [ + -1709985344000, + 909842400000, + 920124000000, + 941896800000, + 951573600000, + 1259416800000, + 1269698400000, + 1287842400000, + 1299333600000, + 1319292000000, + 1327154400000, + 1350741600000, + 1358604000000, + 1382796000000, + 1390050000000, + 1414850400000, + 1421503200000, + 1446300000000, + 1452952800000, + 1478354400000, + 1484402400000, + 1509804000000, + 1516456800000, + 1541253600000, + 1547906400000, + 1572703200000, + 1579356000000, + 1604152800000, + 1610805600000, + 1636207200000, + 1642255200000, + 1667656800000, + 1673704800000, + 1699106400000, + 1705759200000, + 1730556000000, + 1737208800000, + 1762005600000, + 1768658400000, + 1793455200000, + 1800108000000, + 1825509600000, + 1831557600000, + 1856959200000, + 1863612000000, + 1888408800000, + 1895061600000, + 1919858400000, + 1926511200000, + 1951308000000, + 1957960800000, + 1983362400000, + 1989410400000, + 2014812000000, + 2020860000000, + 2046261600000, + 2052914400000, + 2077711200000, + 2084364000000, + 2109160800000, + 2115813600000, + 2140610400000, + 2147263200000, + null + ], + "offsets": [ + -715.7333, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720, + -780, + -720 + ], + "population": 881065 + }, + { + "name": "Pacific/Funafuti", + "abbrs": [ + "TVT" + ], + "untils": [ + null + ], + "offsets": [ + -720 + ], + "population": 4492 + }, + { + "name": "Pacific/Galapagos", + "abbrs": [ + "LMT", + "ECT", + "GALT" + ], + "untils": [ + -1230746496000, + 504939600000, + null + ], + "offsets": [ + 358.4, + 300, + 360 + ], + "population": 25000 + }, + { + "name": "Pacific/Gambier", + "abbrs": [ + "LMT", + "GAMT" + ], + "untils": [ + -1806678012000, + null + ], + "offsets": [ + 539.8, + 540 + ], + "population": 125 + }, + { + "name": "Pacific/Guadalcanal", + "abbrs": [ + "LMT", + "SBT" + ], + "untils": [ + -1806748788000, + null + ], + "offsets": [ + -639.8, + -660 + ], + "population": 109382 + }, + { + "name": "Pacific/Guam", + "abbrs": [ + "GST", + "ChST" + ], + "untils": [ + 977493600000, + null + ], + "offsets": [ + -600, + -600 + ], + "population": 165124 + }, + { + "name": "Pacific/Honolulu", + "abbrs": [ + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HST" + ], + "untils": [ + -1157283000000, + -1155436200000, + -880198200000, + -765376200000, + -712150200000, + null + ], + "offsets": [ + 630, + 570, + 630, + 570, + 630, + 600 + ], + "population": 374658 + }, + { + "name": "Pacific/Johnston", + "abbrs": [ + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HST" + ], + "untils": [ + -1157283000000, + -1155436200000, + -880198200000, + -765376200000, + -712150200000, + null + ], + "offsets": [ + 630, + 570, + 630, + 570, + 630, + 600 + ], + "population": 0 + }, + { + "name": "Pacific/Kiritimati", + "abbrs": [ + "LINT", + "LINT", + "LINT" + ], + "untils": [ + 307622400000, + 788954400000, + null + ], + "offsets": [ + 640, + 600, + -840 + ], + "population": 5115 + }, + { + "name": "Pacific/Kosrae", + "abbrs": [ + "KOST", + "KOST", + "KOST" + ], + "untils": [ + -7988400000, + 915105600000, + null + ], + "offsets": [ + -660, + -720, + -660 + ], + "population": 6616 + }, + { + "name": "Pacific/Kwajalein", + "abbrs": [ + "MHT", + "KWAT", + "MHT" + ], + "untils": [ + -7988400000, + 745848000000, + null + ], + "offsets": [ + -660, + 720, + -720 + ], + "population": 13500 + }, + { + "name": "Pacific/Majuro", + "abbrs": [ + "MHT", + "MHT" + ], + "untils": [ + -7988400000, + null + ], + "offsets": [ + -660, + -720 + ], + "population": 27797 + }, + { + "name": "Pacific/Marquesas", + "abbrs": [ + "LMT", + "MART" + ], + "untils": [ + -1806676920000, + null + ], + "offsets": [ + 558, + 570 + ], + "population": 8632 + }, + { + "name": "Pacific/Midway", + "abbrs": [ + "LMT", + "NST", + "BST", + "SST" + ], + "untils": [ + -1861879032000, + -86878800000, + 439038000000, + null + ], + "offsets": [ + 682.8, + 660, + 660, + 660 + ], + "population": 0 + }, + { + "name": "Pacific/Nauru", + "abbrs": [ + "LMT", + "NRT", + "JST", + "NRT", + "NRT" + ], + "untils": [ + -1545131260000, + -877347000000, + -800960400000, + 294323400000, + null + ], + "offsets": [ + -667.6667, + -690, + -540, + -690, + -720 + ], + "population": 10084 + }, + { + "name": "Pacific/Niue", + "abbrs": [ + "NUT", + "NUT", + "NUT" + ], + "untils": [ + -599575200000, + 276089400000, + null + ], + "offsets": [ + 680, + 690, + 660 + ], + "population": 1190 + }, + { + "name": "Pacific/Norfolk", + "abbrs": [ + "NMT", + "NFT", + "NFST", + "NFT", + "NFT" + ], + "untils": [ + -599656320000, + 152029800000, + 162912600000, + 1443882600000, + null + ], + "offsets": [ + -672, + -690, + -750, + -690, + -660 + ], + "population": 246139 + }, + { + "name": "Pacific/Noumea", + "abbrs": [ + "LMT", + "NCT", + "NCST", + "NCT", + "NCST", + "NCT", + "NCST", + "NCT" + ], + "untils": [ + -1829387148000, + 250002000000, + 257342400000, + 281451600000, + 288878400000, + 849366000000, + 857228400000, + null + ], + "offsets": [ + -665.8, + -660, + -720, + -660, + -720, + -660, + -720, + -660 + ], + "population": 97579 + }, + { + "name": "Pacific/Pago_Pago", + "abbrs": [ + "LMT", + "NST", + "BST", + "SST" + ], + "untils": [ + -1861879032000, + -86878800000, + 439038000000, + null + ], + "offsets": [ + 682.8, + 660, + 660, + 660 + ], + "population": 3656 + }, + { + "name": "Pacific/Palau", + "abbrs": [ + "PWT" + ], + "untils": [ + null + ], + "offsets": [ + -540 + ], + "population": 20918 + }, + { + "name": "Pacific/Pitcairn", + "abbrs": [ + "PNT", + "PST" + ], + "untils": [ + 893665800000, + null + ], + "offsets": [ + 510, + 480 + ], + "population": 56 + }, + { + "name": "Pacific/Pohnpei", + "abbrs": [ + "PONT" + ], + "untils": [ + null + ], + "offsets": [ + -660 + ], + "population": 34000 + }, + { + "name": "Pacific/Ponape", + "abbrs": [ + "PONT" + ], + "untils": [ + null + ], + "offsets": [ + -660 + ], + "population": 0 + }, + { + "name": "Pacific/Port_Moresby", + "abbrs": [ + "PGT" + ], + "untils": [ + null + ], + "offsets": [ + -600 + ], + "population": 254158 + }, + { + "name": "Pacific/Rarotonga", + "abbrs": [ + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT", + "CKHST", + "CKT" + ], + "untils": [ + 279714600000, + 289387800000, + 309952800000, + 320837400000, + 341402400000, + 352287000000, + 372852000000, + 384341400000, + 404906400000, + 415791000000, + 436356000000, + 447240600000, + 467805600000, + 478690200000, + 499255200000, + 510139800000, + 530704800000, + 541589400000, + 562154400000, + 573643800000, + 594208800000, + 605093400000, + 625658400000, + 636543000000, + 657108000000, + 667992600000, + null + ], + "offsets": [ + 630, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600, + 570, + 600 + ], + "population": 13095 + }, + { + "name": "Pacific/Saipan", + "abbrs": [ + "GST", + "ChST" + ], + "untils": [ + 977493600000, + null + ], + "offsets": [ + -600, + -600 + ], + "population": 0 + }, + { + "name": "Pacific/Samoa", + "abbrs": [ + "LMT", + "NST", + "BST", + "SST" + ], + "untils": [ + -1861879032000, + -86878800000, + 439038000000, + null + ], + "offsets": [ + 682.8, + 660, + 660, + 660 + ], + "population": 0 + }, + { + "name": "Pacific/Tahiti", + "abbrs": [ + "LMT", + "TAHT" + ], + "untils": [ + -1806674504000, + null + ], + "offsets": [ + 598.2667, + 600 + ], + "population": 178133 + }, + { + "name": "Pacific/Tarawa", + "abbrs": [ + "GILT" + ], + "untils": [ + null + ], + "offsets": [ + -720 + ], + "population": 28802 + }, + { + "name": "Pacific/Tongatapu", + "abbrs": [ + "+1220", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13", + "+14", + "+13" + ], + "untils": [ + -915193200000, + 939214800000, + 953384400000, + 973342800000, + 980596800000, + 1004792400000, + 1012046400000, + 1478350800000, + 1484398800000, + 1509800400000, + 1516453200000, + 1541250000000, + 1547902800000, + 1572699600000, + 1579352400000, + 1604149200000, + 1610802000000, + 1636203600000, + 1642251600000, + 1667653200000, + 1673701200000, + 1699102800000, + 1705755600000, + 1730552400000, + 1737205200000, + 1762002000000, + 1768654800000, + 1793451600000, + 1800104400000, + 1825506000000, + 1831554000000, + 1856955600000, + 1863608400000, + 1888405200000, + 1895058000000, + 1919854800000, + 1926507600000, + 1951304400000, + 1957957200000, + 1983358800000, + 1989406800000, + 2014808400000, + 2020856400000, + 2046258000000, + 2052910800000, + 2077707600000, + 2084360400000, + 2109157200000, + 2115810000000, + 2140606800000, + 2147259600000, + null + ], + "offsets": [ + -740, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780, + -840, + -780 + ], + "population": 75416 + }, + { + "name": "Pacific/Truk", + "abbrs": [ + "CHUT" + ], + "untils": [ + null + ], + "offsets": [ + -600 + ], + "population": 0 + }, + { + "name": "Pacific/Wake", + "abbrs": [ + "WAKT" + ], + "untils": [ + null + ], + "offsets": [ + -720 + ], + "population": 15500 + }, + { + "name": "Pacific/Wallis", + "abbrs": [ + "WFT" + ], + "untils": [ + null + ], + "offsets": [ + -720 + ], + "population": 94 + }, + { + "name": "Pacific/Yap", + "abbrs": [ + "CHUT" + ], + "untils": [ + null + ], + "offsets": [ + -600 + ], + "population": 0 + }, + { + "name": "Poland", + "abbrs": [ + "WMT", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "EET", + "EEST", + "EET", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET" + ], + "untils": [ + -1717032240000, + -1693706400000, + -1680483600000, + -1663455600000, + -1650150000000, + -1632006000000, + -1618700400000, + -1600473600000, + -1587168000000, + -1501725600000, + -931734000000, + -857257200000, + -844556400000, + -828226800000, + -812502000000, + -796608000000, + -778726800000, + -762660000000, + -748486800000, + -733273200000, + -715215600000, + -701910000000, + -684975600000, + -670460400000, + -654130800000, + -639010800000, + -397094400000, + -386812800000, + -371088000000, + -355363200000, + -334195200000, + -323308800000, + -307584000000, + -291859200000, + -271296000000, + -260409600000, + -239846400000, + -228960000000, + -208396800000, + -197510400000, + -176342400000, + -166060800000, + 228873600000, + 243993600000, + 260323200000, + 276048000000, + 291772800000, + 307497600000, + 323827200000, + 338947200000, + 354672000000, + 370396800000, + 386121600000, + 401846400000, + 417571200000, + 433296000000, + 449020800000, + 465350400000, + 481075200000, + 496800000000, + 512524800000, + 528249600000, + 543974400000, + 559699200000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + -84, + -60, + -120, + -60, + -120, + -60, + -120, + -120, + -180, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -120, + -60 + ], + "population": 0 + }, + { + "name": "Portugal", + "abbrs": [ + "LMT", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WET", + "WEST", + "WEMT", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "CET", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "CEST", + "CET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + -1830381795000, + -1689555600000, + -1677801600000, + -1667437200000, + -1647738000000, + -1635814800000, + -1616202000000, + -1604365200000, + -1584666000000, + -1572742800000, + -1553043600000, + -1541206800000, + -1521507600000, + -1442451600000, + -1426813200000, + -1379293200000, + -1364778000000, + -1348448400000, + -1333328400000, + -1316394000000, + -1301274000000, + -1284339600000, + -1269824400000, + -1221440400000, + -1206925200000, + -1191200400000, + -1175475600000, + -1127696400000, + -1111971600000, + -1096851600000, + -1080522000000, + -1063587600000, + -1049072400000, + -1033347600000, + -1017622800000, + -1002502800000, + -986173200000, + -969238800000, + -950490000000, + -942022800000, + -922669200000, + -906944400000, + -891133200000, + -877309200000, + -873684000000, + -864007200000, + -857955600000, + -845859600000, + -842839200000, + -831348000000, + -825901200000, + -814410000000, + -810784800000, + -799898400000, + -794451600000, + -782960400000, + -779335200000, + -768448800000, + -763002000000, + -749091600000, + -733366800000, + -717631200000, + -701906400000, + -686181600000, + -670456800000, + -654732000000, + -639007200000, + -591832800000, + -575503200000, + -559778400000, + -544053600000, + -528328800000, + -512604000000, + -496879200000, + -481154400000, + -465429600000, + -449704800000, + -433980000000, + -417650400000, + -401925600000, + -386200800000, + -370476000000, + -354751200000, + -339026400000, + -323301600000, + -307576800000, + -291852000000, + -276127200000, + -260402400000, + -244677600000, + -228348000000, + -212623200000, + -196898400000, + -181173600000, + -165448800000, + -149724000000, + -133999200000, + -118274400000, + 212544000000, + 228268800000, + 243993600000, + 260323200000, + 276048000000, + 291772800000, + 307501200000, + 323222400000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417578400000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 36.75, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + -120, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + -60, + -120, + -60, + -120, + -60, + -120, + -60, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "ROC", + "abbrs": [ + "JWST", + "JST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1017820800000, + -766224000000, + -745833600000, + -733827600000, + -716889600000, + -699613200000, + -683884800000, + -670669200000, + -652348800000, + -639133200000, + -620812800000, + -607597200000, + -589276800000, + -576061200000, + -562924800000, + -541760400000, + -528710400000, + -510224400000, + -497174400000, + -478688400000, + -465638400000, + -449830800000, + -434016000000, + -418208400000, + -402480000000, + -386672400000, + -370944000000, + -355136400000, + -339408000000, + -323600400000, + -302515200000, + -291978000000, + -270979200000, + -260442000000, + 133977600000, + 149785200000, + 165513600000, + 181321200000, + 299606400000, + 307551600000, + null + ], + "offsets": [ + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480, + -540, + -480 + ], + "population": 0 + }, + { + "name": "ROK", + "abbrs": [ + "LMT", + "KST", + "JCST", + "JST", + "KST", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KDT", + "KST", + "KST", + "KDT", + "KST", + "KDT", + "KST" + ], + "untils": [ + -1948782472000, + -1830414600000, + -1017824400000, + -767350800000, + -498128400000, + -462702600000, + -451733400000, + -429784200000, + -418296600000, + -399544200000, + -387451800000, + -368094600000, + -356002200000, + -336645000000, + -324552600000, + -305195400000, + -293103000000, + -264933000000, + 547578000000, + 560883600000, + 579027600000, + 592333200000, + null + ], + "offsets": [ + -507.8667, + -510, + -540, + -540, + -540, + -510, + -570, + -510, + -570, + -510, + -570, + -510, + -570, + -510, + -570, + -510, + -570, + -510, + -540, + -600, + -540, + -600, + -540 + ], + "population": 0 + }, + { + "name": "Singapore", + "abbrs": [ + "SMT", + "MALT", + "MALST", + "MALT", + "MALT", + "JST", + "MALT", + "SGT", + "SGT" + ], + "untils": [ + -2038200925000, + -1167634800000, + -1073028000000, + -894180000000, + -879665400000, + -767005200000, + -138785400000, + 378664200000, + null + ], + "offsets": [ + -415.4167, + -420, + -440, + -440, + -450, + -540, + -450, + -450, + -480 + ], + "population": 0 + }, + { + "name": "Turkey", + "abbrs": [ + "IMT", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "+04", + "+03", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "EET", + "EEST", + "+03" + ], + "untils": [ + -1869875816000, + -1693706400000, + -1680490800000, + -1570413600000, + -1552186800000, + -1538359200000, + -1522551600000, + -1507514400000, + -1490583600000, + -1440208800000, + -1428030000000, + -1409709600000, + -1396494000000, + -931140000000, + -922762800000, + -917834400000, + -892436400000, + -875844000000, + -857358000000, + -781063200000, + -764737200000, + -744343200000, + -733806000000, + -716436000000, + -701924400000, + -684986400000, + -670474800000, + -654141600000, + -639025200000, + -621828000000, + -606970800000, + -590032800000, + -575434800000, + -235620000000, + -228279600000, + -177732000000, + -165726000000, + 10533600000, + 23835600000, + 41983200000, + 55285200000, + 74037600000, + 87339600000, + 107910000000, + 121219200000, + 133920000000, + 152676000000, + 165362400000, + 183502800000, + 202428000000, + 215557200000, + 228866400000, + 245797200000, + 260316000000, + 277246800000, + 308779200000, + 323827200000, + 340228800000, + 354672000000, + 371678400000, + 386121600000, + 403128000000, + 428446800000, + 433886400000, + 482792400000, + 496702800000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 686098800000, + 701823600000, + 717548400000, + 733273200000, + 748998000000, + 764118000000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301274000000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396227600000, + 1414285200000, + 1427590800000, + 1446944400000, + 1459040400000, + 1473195600000, + null + ], + "offsets": [ + -116.9333, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -120, + -180, + -180 + ], + "population": 0 + }, + { + "name": "UCT", + "abbrs": [ + "UCT" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "US/Alaska", + "abbrs": [ + "CAT", + "CAWT", + "CAPT", + "CAT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "AHST", + "AHDT", + "YST", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST", + "AKDT", + "AKST" + ], + "untils": [ + -880200000000, + -769395600000, + -765378000000, + -86882400000, + -21470400000, + -5749200000, + 9979200000, + 25700400000, + 41428800000, + 57754800000, + 73483200000, + 89204400000, + 104932800000, + 120654000000, + 126705600000, + 152103600000, + 162388800000, + 183553200000, + 199281600000, + 215607600000, + 230731200000, + 247057200000, + 262785600000, + 278506800000, + 294235200000, + 309956400000, + 325684800000, + 341406000000, + 357134400000, + 372855600000, + 388584000000, + 404910000000, + 420033600000, + 436359600000, + 439030800000, + 452084400000, + 467805600000, + 483534000000, + 499255200000, + 514983600000, + 530704800000, + 544618800000, + 562154400000, + 576068400000, + 594208800000, + 607518000000, + 625658400000, + 638967600000, + 657108000000, + 671022000000, + 688557600000, + 702471600000, + 720007200000, + 733921200000, + 752061600000, + 765370800000, + 783511200000, + 796820400000, + 814960800000, + 828874800000, + 846410400000, + 860324400000, + 877860000000, + 891774000000, + 909309600000, + 923223600000, + 941364000000, + 954673200000, + 972813600000, + 986122800000, + 1004263200000, + 1018177200000, + 1035712800000, + 1049626800000, + 1067162400000, + 1081076400000, + 1099216800000, + 1112526000000, + 1130666400000, + 1143975600000, + 1162116000000, + 1173610800000, + 1194170400000, + 1205060400000, + 1225620000000, + 1236510000000, + 1257069600000, + 1268564400000, + 1289124000000, + 1300014000000, + 1320573600000, + 1331463600000, + 1352023200000, + 1362913200000, + 1383472800000, + 1394362800000, + 1414922400000, + 1425812400000, + 1446372000000, + 1457866800000, + 1478426400000, + 1489316400000, + 1509876000000, + 1520766000000, + 1541325600000, + 1552215600000, + 1572775200000, + 1583665200000, + 1604224800000, + 1615719600000, + 1636279200000, + 1647169200000, + 1667728800000, + 1678618800000, + 1699178400000, + 1710068400000, + 1730628000000, + 1741518000000, + 1762077600000, + 1772967600000, + 1793527200000, + 1805022000000, + 1825581600000, + 1836471600000, + 1857031200000, + 1867921200000, + 1888480800000, + 1899370800000, + 1919930400000, + 1930820400000, + 1951380000000, + 1962874800000, + 1983434400000, + 1994324400000, + 2014884000000, + 2025774000000, + 2046333600000, + 2057223600000, + 2077783200000, + 2088673200000, + 2109232800000, + 2120122800000, + 2140682400000, + null + ], + "offsets": [ + 600, + 540, + 540, + 600, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 540, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540, + 480, + 540 + ], + "population": 0 + }, + { + "name": "US/Aleutian", + "abbrs": [ + "NST", + "NWT", + "NPT", + "NST", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "BST", + "BDT", + "AHST", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HDT", + "HST" + ], + "untils": [ + -880196400000, + -769395600000, + -765374400000, + -86878800000, + -21466800000, + -5745600000, + 9982800000, + 25704000000, + 41432400000, + 57758400000, + 73486800000, + 89208000000, + 104936400000, + 120657600000, + 126709200000, + 152107200000, + 162392400000, + 183556800000, + 199285200000, + 215611200000, + 230734800000, + 247060800000, + 262789200000, + 278510400000, + 294238800000, + 309960000000, + 325688400000, + 341409600000, + 357138000000, + 372859200000, + 388587600000, + 404913600000, + 420037200000, + 436363200000, + 439034400000, + 452088000000, + 467809200000, + 483537600000, + 499258800000, + 514987200000, + 530708400000, + 544622400000, + 562158000000, + 576072000000, + 594212400000, + 607521600000, + 625662000000, + 638971200000, + 657111600000, + 671025600000, + 688561200000, + 702475200000, + 720010800000, + 733924800000, + 752065200000, + 765374400000, + 783514800000, + 796824000000, + 814964400000, + 828878400000, + 846414000000, + 860328000000, + 877863600000, + 891777600000, + 909313200000, + 923227200000, + 941367600000, + 954676800000, + 972817200000, + 986126400000, + 1004266800000, + 1018180800000, + 1035716400000, + 1049630400000, + 1067166000000, + 1081080000000, + 1099220400000, + 1112529600000, + 1130670000000, + 1143979200000, + 1162119600000, + 1173614400000, + 1194174000000, + 1205064000000, + 1225623600000, + 1236513600000, + 1257073200000, + 1268568000000, + 1289127600000, + 1300017600000, + 1320577200000, + 1331467200000, + 1352026800000, + 1362916800000, + 1383476400000, + 1394366400000, + 1414926000000, + 1425816000000, + 1446375600000, + 1457870400000, + 1478430000000, + 1489320000000, + 1509879600000, + 1520769600000, + 1541329200000, + 1552219200000, + 1572778800000, + 1583668800000, + 1604228400000, + 1615723200000, + 1636282800000, + 1647172800000, + 1667732400000, + 1678622400000, + 1699182000000, + 1710072000000, + 1730631600000, + 1741521600000, + 1762081200000, + 1772971200000, + 1793530800000, + 1805025600000, + 1825585200000, + 1836475200000, + 1857034800000, + 1867924800000, + 1888484400000, + 1899374400000, + 1919934000000, + 1930824000000, + 1951383600000, + 1962878400000, + 1983438000000, + 1994328000000, + 2014887600000, + 2025777600000, + 2046337200000, + 2057227200000, + 2077786800000, + 2088676800000, + 2109236400000, + 2120126400000, + 2140686000000, + null + ], + "offsets": [ + 660, + 600, + 600, + 660, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 660, + 600, + 600, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600, + 540, + 600 + ], + "population": 0 + }, + { + "name": "US/Arizona", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MST", + "MWT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -880210800000, + -820519140000, + -812653140000, + -796845540000, + -84380400000, + -68659200000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 0 + }, + { + "name": "US/Central", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -1563724800000, + -1551632400000, + -1538928000000, + -1520182800000, + -1504454400000, + -1491757200000, + -1473004800000, + -1459702800000, + -1441555200000, + -1428253200000, + -1410105600000, + -1396803600000, + -1378656000000, + -1365354000000, + -1347206400000, + -1333904400000, + -1315152000000, + -1301850000000, + -1283702400000, + -1270400400000, + -1252252800000, + -1238950800000, + -1220803200000, + -1207501200000, + -1189353600000, + -1176051600000, + -1157299200000, + -1144602000000, + -1125849600000, + -1112547600000, + -1094400000000, + -1081098000000, + -1067788800000, + -1045414800000, + -1031500800000, + -1018198800000, + -1000051200000, + -986749200000, + -967996800000, + -955299600000, + -936547200000, + -923245200000, + -905097600000, + -891795600000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -447267600000, + -431539200000, + -415818000000, + -400089600000, + -384368400000, + -368640000000, + -352918800000, + -337190400000, + -321469200000, + -305740800000, + -289414800000, + -273686400000, + -257965200000, + -242236800000, + -226515600000, + -210787200000, + -195066000000, + -179337600000, + -163616400000, + -147888000000, + -131562000000, + -116438400000, + -100112400000, + -84384000000, + -68662800000, + -52934400000, + -37213200000, + -21484800000, + -5763600000, + 9964800000, + 25686000000, + 41414400000, + 57740400000, + 73468800000, + 89190000000, + 104918400000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 702460800000, + 719996400000, + 733910400000, + 752050800000, + 765360000000, + 783500400000, + 796809600000, + 814950000000, + 828864000000, + 846399600000, + 860313600000, + 877849200000, + 891763200000, + 909298800000, + 923212800000, + 941353200000, + 954662400000, + 972802800000, + 986112000000, + 1004252400000, + 1018166400000, + 1035702000000, + 1049616000000, + 1067151600000, + 1081065600000, + 1099206000000, + 1112515200000, + 1130655600000, + 1143964800000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "US/East-Indiana", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -900259200000, + -891795600000, + -880214400000, + -769395600000, + -765392400000, + -747244800000, + -733942800000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -386787600000, + -368640000000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "US/Eastern", + "abbrs": [ + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -1633280400000, + -1615140000000, + -1601830800000, + -1583690400000, + -1570381200000, + -1551636000000, + -1536512400000, + -1523210400000, + -1504458000000, + -1491760800000, + -1473008400000, + -1459706400000, + -1441558800000, + -1428256800000, + -1410109200000, + -1396807200000, + -1378659600000, + -1365357600000, + -1347210000000, + -1333908000000, + -1315155600000, + -1301853600000, + -1283706000000, + -1270404000000, + -1252256400000, + -1238954400000, + -1220806800000, + -1207504800000, + -1189357200000, + -1176055200000, + -1157302800000, + -1144605600000, + -1125853200000, + -1112551200000, + -1094403600000, + -1081101600000, + -1062954000000, + -1049652000000, + -1031504400000, + -1018202400000, + -1000054800000, + -986752800000, + -968000400000, + -955303200000, + -936550800000, + -923248800000, + -905101200000, + -891799200000, + -880218000000, + -769395600000, + -765396000000, + -747248400000, + -733946400000, + -715798800000, + -702496800000, + -684349200000, + -671047200000, + -652899600000, + -639597600000, + -620845200000, + -608148000000, + -589395600000, + -576093600000, + -557946000000, + -544644000000, + -526496400000, + -513194400000, + -495046800000, + -481744800000, + -463597200000, + -447271200000, + -431542800000, + -415821600000, + -400093200000, + -384372000000, + -368643600000, + -352922400000, + -337194000000, + -321472800000, + -305744400000, + -289418400000, + -273690000000, + -257968800000, + -242240400000, + -226519200000, + -210790800000, + -195069600000, + -179341200000, + -163620000000, + -147891600000, + -131565600000, + -116442000000, + -100116000000, + -84387600000, + -68666400000, + -52938000000, + -37216800000, + -21488400000, + -5767200000, + 9961200000, + 25682400000, + 41410800000, + 57736800000, + 73465200000, + 89186400000, + 104914800000, + 120636000000, + 126687600000, + 152085600000, + 162370800000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "US/Hawaii", + "abbrs": [ + "HST", + "HDT", + "HST", + "HDT", + "HST", + "HST" + ], + "untils": [ + -1157283000000, + -1155436200000, + -880198200000, + -765376200000, + -712150200000, + null + ], + "offsets": [ + 630, + 570, + 630, + 570, + 630, + 600 + ], + "population": 0 + }, + { + "name": "US/Indiana-Starke", + "abbrs": [ + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CWT", + "CPT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "EST", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "EST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST", + "CDT", + "CST" + ], + "untils": [ + -1633276800000, + -1615136400000, + -1601827200000, + -1583686800000, + -880214400000, + -769395600000, + -765392400000, + -715795200000, + -702493200000, + -684345600000, + -671043600000, + -652896000000, + -639594000000, + -620841600000, + -608144400000, + -589392000000, + -576090000000, + -557942400000, + -544640400000, + -526492800000, + -513190800000, + -495043200000, + -481741200000, + -463593600000, + -447267600000, + -431539200000, + -415818000000, + -400089600000, + -386787600000, + -368640000000, + -355338000000, + -337190400000, + -321469200000, + -305740800000, + -289414800000, + -273686400000, + -257965200000, + -242236800000, + -195066000000, + -84384000000, + -68662800000, + -52934400000, + -37213200000, + -21484800000, + -5763600000, + 9964800000, + 25686000000, + 41414400000, + 57740400000, + 73468800000, + 89190000000, + 104918400000, + 120639600000, + 126691200000, + 152089200000, + 162374400000, + 183538800000, + 199267200000, + 215593200000, + 230716800000, + 247042800000, + 262771200000, + 278492400000, + 294220800000, + 309942000000, + 325670400000, + 341391600000, + 357120000000, + 372841200000, + 388569600000, + 404895600000, + 420019200000, + 436345200000, + 452073600000, + 467794800000, + 483523200000, + 499244400000, + 514972800000, + 530694000000, + 544608000000, + 562143600000, + 576057600000, + 594198000000, + 607507200000, + 625647600000, + 638956800000, + 657097200000, + 671011200000, + 688546800000, + 1143961200000, + 1162105200000, + 1173600000000, + 1194159600000, + 1205049600000, + 1225609200000, + 1236499200000, + 1257058800000, + 1268553600000, + 1289113200000, + 1300003200000, + 1320562800000, + 1331452800000, + 1352012400000, + 1362902400000, + 1383462000000, + 1394352000000, + 1414911600000, + 1425801600000, + 1446361200000, + 1457856000000, + 1478415600000, + 1489305600000, + 1509865200000, + 1520755200000, + 1541314800000, + 1552204800000, + 1572764400000, + 1583654400000, + 1604214000000, + 1615708800000, + 1636268400000, + 1647158400000, + 1667718000000, + 1678608000000, + 1699167600000, + 1710057600000, + 1730617200000, + 1741507200000, + 1762066800000, + 1772956800000, + 1793516400000, + 1805011200000, + 1825570800000, + 1836460800000, + 1857020400000, + 1867910400000, + 1888470000000, + 1899360000000, + 1919919600000, + 1930809600000, + 1951369200000, + 1962864000000, + 1983423600000, + 1994313600000, + 2014873200000, + 2025763200000, + 2046322800000, + 2057212800000, + 2077772400000, + 2088662400000, + 2109222000000, + 2120112000000, + 2140671600000, + null + ], + "offsets": [ + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 300, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360, + 300, + 360 + ], + "population": 0 + }, + { + "name": "US/Michigan", + "abbrs": [ + "LMT", + "CST", + "EST", + "EWT", + "EPT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST", + "EDT", + "EST" + ], + "untils": [ + -2051202469000, + -1724083200000, + -880218000000, + -769395600000, + -765396000000, + -684349200000, + -671047200000, + -80499600000, + -68666400000, + 104914800000, + 120636000000, + 126687600000, + 152085600000, + 167814000000, + 183535200000, + 199263600000, + 215589600000, + 230713200000, + 247039200000, + 262767600000, + 278488800000, + 294217200000, + 309938400000, + 325666800000, + 341388000000, + 357116400000, + 372837600000, + 388566000000, + 404892000000, + 420015600000, + 436341600000, + 452070000000, + 467791200000, + 483519600000, + 499240800000, + 514969200000, + 530690400000, + 544604400000, + 562140000000, + 576054000000, + 594194400000, + 607503600000, + 625644000000, + 638953200000, + 657093600000, + 671007600000, + 688543200000, + 702457200000, + 719992800000, + 733906800000, + 752047200000, + 765356400000, + 783496800000, + 796806000000, + 814946400000, + 828860400000, + 846396000000, + 860310000000, + 877845600000, + 891759600000, + 909295200000, + 923209200000, + 941349600000, + 954658800000, + 972799200000, + 986108400000, + 1004248800000, + 1018162800000, + 1035698400000, + 1049612400000, + 1067148000000, + 1081062000000, + 1099202400000, + 1112511600000, + 1130652000000, + 1143961200000, + 1162101600000, + 1173596400000, + 1194156000000, + 1205046000000, + 1225605600000, + 1236495600000, + 1257055200000, + 1268550000000, + 1289109600000, + 1299999600000, + 1320559200000, + 1331449200000, + 1352008800000, + 1362898800000, + 1383458400000, + 1394348400000, + 1414908000000, + 1425798000000, + 1446357600000, + 1457852400000, + 1478412000000, + 1489302000000, + 1509861600000, + 1520751600000, + 1541311200000, + 1552201200000, + 1572760800000, + 1583650800000, + 1604210400000, + 1615705200000, + 1636264800000, + 1647154800000, + 1667714400000, + 1678604400000, + 1699164000000, + 1710054000000, + 1730613600000, + 1741503600000, + 1762063200000, + 1772953200000, + 1793512800000, + 1805007600000, + 1825567200000, + 1836457200000, + 1857016800000, + 1867906800000, + 1888466400000, + 1899356400000, + 1919916000000, + 1930806000000, + 1951365600000, + 1962860400000, + 1983420000000, + 1994310000000, + 2014869600000, + 2025759600000, + 2046319200000, + 2057209200000, + 2077768800000, + 2088658800000, + 2109218400000, + 2120108400000, + 2140668000000, + null + ], + "offsets": [ + 332.1833, + 360, + 300, + 240, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300, + 240, + 300 + ], + "population": 0 + }, + { + "name": "US/Mountain", + "abbrs": [ + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MWT", + "MPT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST", + "MDT", + "MST" + ], + "untils": [ + -1633273200000, + -1615132800000, + -1601823600000, + -1583683200000, + -1570374000000, + -1551628800000, + -1538924400000, + -1534089600000, + -880210800000, + -769395600000, + -765388800000, + -147884400000, + -131558400000, + -116434800000, + -100108800000, + -84380400000, + -68659200000, + -52930800000, + -37209600000, + -21481200000, + -5760000000, + 9968400000, + 25689600000, + 41418000000, + 57744000000, + 73472400000, + 89193600000, + 104922000000, + 120643200000, + 126694800000, + 152092800000, + 162378000000, + 183542400000, + 199270800000, + 215596800000, + 230720400000, + 247046400000, + 262774800000, + 278496000000, + 294224400000, + 309945600000, + 325674000000, + 341395200000, + 357123600000, + 372844800000, + 388573200000, + 404899200000, + 420022800000, + 436348800000, + 452077200000, + 467798400000, + 483526800000, + 499248000000, + 514976400000, + 530697600000, + 544611600000, + 562147200000, + 576061200000, + 594201600000, + 607510800000, + 625651200000, + 638960400000, + 657100800000, + 671014800000, + 688550400000, + 702464400000, + 720000000000, + 733914000000, + 752054400000, + 765363600000, + 783504000000, + 796813200000, + 814953600000, + 828867600000, + 846403200000, + 860317200000, + 877852800000, + 891766800000, + 909302400000, + 923216400000, + 941356800000, + 954666000000, + 972806400000, + 986115600000, + 1004256000000, + 1018170000000, + 1035705600000, + 1049619600000, + 1067155200000, + 1081069200000, + 1099209600000, + 1112518800000, + 1130659200000, + 1143968400000, + 1162108800000, + 1173603600000, + 1194163200000, + 1205053200000, + 1225612800000, + 1236502800000, + 1257062400000, + 1268557200000, + 1289116800000, + 1300006800000, + 1320566400000, + 1331456400000, + 1352016000000, + 1362906000000, + 1383465600000, + 1394355600000, + 1414915200000, + 1425805200000, + 1446364800000, + 1457859600000, + 1478419200000, + 1489309200000, + 1509868800000, + 1520758800000, + 1541318400000, + 1552208400000, + 1572768000000, + 1583658000000, + 1604217600000, + 1615712400000, + 1636272000000, + 1647162000000, + 1667721600000, + 1678611600000, + 1699171200000, + 1710061200000, + 1730620800000, + 1741510800000, + 1762070400000, + 1772960400000, + 1793520000000, + 1805014800000, + 1825574400000, + 1836464400000, + 1857024000000, + 1867914000000, + 1888473600000, + 1899363600000, + 1919923200000, + 1930813200000, + 1951372800000, + 1962867600000, + 1983427200000, + 1994317200000, + 2014876800000, + 2025766800000, + 2046326400000, + 2057216400000, + 2077776000000, + 2088666000000, + 2109225600000, + 2120115600000, + 2140675200000, + null + ], + "offsets": [ + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420, + 360, + 420 + ], + "population": 0 + }, + { + "name": "US/Pacific-New", + "abbrs": [ + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1633269600000, + -1615129200000, + -1601820000000, + -1583679600000, + -880207200000, + -769395600000, + -765385200000, + -687967140000, + -662655600000, + -620838000000, + -608137200000, + -589388400000, + -576082800000, + -557938800000, + -544633200000, + -526489200000, + -513183600000, + -495039600000, + -481734000000, + -463590000000, + -450284400000, + -431535600000, + -418230000000, + -400086000000, + -386780400000, + -368636400000, + -355330800000, + -337186800000, + -323881200000, + -305737200000, + -292431600000, + -273682800000, + -260982000000, + -242233200000, + -226508400000, + -210783600000, + -195058800000, + -179334000000, + -163609200000, + -147884400000, + -131554800000, + -116434800000, + -100105200000, + -84376800000, + -68655600000, + -52927200000, + -37206000000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 126698400000, + 152096400000, + 162381600000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 0 + }, + { + "name": "US/Pacific", + "abbrs": [ + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PWT", + "PPT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST", + "PDT", + "PST" + ], + "untils": [ + -1633269600000, + -1615129200000, + -1601820000000, + -1583679600000, + -880207200000, + -769395600000, + -765385200000, + -687967140000, + -662655600000, + -620838000000, + -608137200000, + -589388400000, + -576082800000, + -557938800000, + -544633200000, + -526489200000, + -513183600000, + -495039600000, + -481734000000, + -463590000000, + -450284400000, + -431535600000, + -418230000000, + -400086000000, + -386780400000, + -368636400000, + -355330800000, + -337186800000, + -323881200000, + -305737200000, + -292431600000, + -273682800000, + -260982000000, + -242233200000, + -226508400000, + -210783600000, + -195058800000, + -179334000000, + -163609200000, + -147884400000, + -131554800000, + -116434800000, + -100105200000, + -84376800000, + -68655600000, + -52927200000, + -37206000000, + -21477600000, + -5756400000, + 9972000000, + 25693200000, + 41421600000, + 57747600000, + 73476000000, + 89197200000, + 104925600000, + 120646800000, + 126698400000, + 152096400000, + 162381600000, + 183546000000, + 199274400000, + 215600400000, + 230724000000, + 247050000000, + 262778400000, + 278499600000, + 294228000000, + 309949200000, + 325677600000, + 341398800000, + 357127200000, + 372848400000, + 388576800000, + 404902800000, + 420026400000, + 436352400000, + 452080800000, + 467802000000, + 483530400000, + 499251600000, + 514980000000, + 530701200000, + 544615200000, + 562150800000, + 576064800000, + 594205200000, + 607514400000, + 625654800000, + 638964000000, + 657104400000, + 671018400000, + 688554000000, + 702468000000, + 720003600000, + 733917600000, + 752058000000, + 765367200000, + 783507600000, + 796816800000, + 814957200000, + 828871200000, + 846406800000, + 860320800000, + 877856400000, + 891770400000, + 909306000000, + 923220000000, + 941360400000, + 954669600000, + 972810000000, + 986119200000, + 1004259600000, + 1018173600000, + 1035709200000, + 1049623200000, + 1067158800000, + 1081072800000, + 1099213200000, + 1112522400000, + 1130662800000, + 1143972000000, + 1162112400000, + 1173607200000, + 1194166800000, + 1205056800000, + 1225616400000, + 1236506400000, + 1257066000000, + 1268560800000, + 1289120400000, + 1300010400000, + 1320570000000, + 1331460000000, + 1352019600000, + 1362909600000, + 1383469200000, + 1394359200000, + 1414918800000, + 1425808800000, + 1446368400000, + 1457863200000, + 1478422800000, + 1489312800000, + 1509872400000, + 1520762400000, + 1541322000000, + 1552212000000, + 1572771600000, + 1583661600000, + 1604221200000, + 1615716000000, + 1636275600000, + 1647165600000, + 1667725200000, + 1678615200000, + 1699174800000, + 1710064800000, + 1730624400000, + 1741514400000, + 1762074000000, + 1772964000000, + 1793523600000, + 1805018400000, + 1825578000000, + 1836468000000, + 1857027600000, + 1867917600000, + 1888477200000, + 1899367200000, + 1919926800000, + 1930816800000, + 1951376400000, + 1962871200000, + 1983430800000, + 1994320800000, + 2014880400000, + 2025770400000, + 2046330000000, + 2057220000000, + 2077779600000, + 2088669600000, + 2109229200000, + 2120119200000, + 2140678800000, + null + ], + "offsets": [ + 480, + 420, + 480, + 420, + 480, + 420, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480, + 420, + 480 + ], + "population": 0 + }, + { + "name": "US/Samoa", + "abbrs": [ + "LMT", + "NST", + "BST", + "SST" + ], + "untils": [ + -1861879032000, + -86878800000, + 439038000000, + null + ], + "offsets": [ + 682.8, + 660, + 660, + 660 + ], + "population": 0 + }, + { + "name": "UTC", + "abbrs": [ + "UTC" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "Universal", + "abbrs": [ + "UTC" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + }, + { + "name": "W-SU", + "abbrs": [ + "MMT", + "MMT", + "MST", + "MMT", + "MDST", + "MST", + "MDST", + "MSD", + "MSK", + "MSD", + "+05", + "MSD", + "MSK", + "EET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "EEST", + "EET", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSD", + "MSK", + "MSK", + "MSK" + ], + "untils": [ + -1688265017000, + -1656819079000, + -1641353479000, + -1627965079000, + -1618716679000, + -1596429079000, + -1593820800000, + -1589860800000, + -1542427200000, + -1539493200000, + -1525323600000, + -1522728000000, + -1491188400000, + -1247536800000, + 354920400000, + 370728000000, + 386456400000, + 402264000000, + 417992400000, + 433800000000, + 449614800000, + 465346800000, + 481071600000, + 496796400000, + 512521200000, + 528246000000, + 543970800000, + 559695600000, + 575420400000, + 591145200000, + 606870000000, + 622594800000, + 638319600000, + 654649200000, + 670374000000, + 686102400000, + 695779200000, + 701823600000, + 717548400000, + 733273200000, + 748998000000, + 764722800000, + 780447600000, + 796172400000, + 811897200000, + 828226800000, + 846370800000, + 859676400000, + 877820400000, + 891126000000, + 909270000000, + 922575600000, + 941324400000, + 954025200000, + 972774000000, + 985474800000, + 1004223600000, + 1017529200000, + 1035673200000, + 1048978800000, + 1067122800000, + 1080428400000, + 1099177200000, + 1111878000000, + 1130626800000, + 1143327600000, + 1162076400000, + 1174777200000, + 1193526000000, + 1206831600000, + 1224975600000, + 1238281200000, + 1256425200000, + 1269730800000, + 1288479600000, + 1301180400000, + 1414274400000, + null + ], + "offsets": [ + -150.2833, + -151.3167, + -211.3167, + -151.3167, + -271.3167, + -211.3167, + -271.3167, + -240, + -180, + -240, + -300, + -240, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -180, + -120, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180, + -240, + -180 + ], + "population": 0 + }, + { + "name": "WET", + "abbrs": [ + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET", + "WEST", + "WET" + ], + "untils": [ + 228877200000, + 243997200000, + 260326800000, + 276051600000, + 291776400000, + 307501200000, + 323830800000, + 338950800000, + 354675600000, + 370400400000, + 386125200000, + 401850000000, + 417574800000, + 433299600000, + 449024400000, + 465354000000, + 481078800000, + 496803600000, + 512528400000, + 528253200000, + 543978000000, + 559702800000, + 575427600000, + 591152400000, + 606877200000, + 622602000000, + 638326800000, + 654656400000, + 670381200000, + 686106000000, + 701830800000, + 717555600000, + 733280400000, + 749005200000, + 764730000000, + 780454800000, + 796179600000, + 811904400000, + 828234000000, + 846378000000, + 859683600000, + 877827600000, + 891133200000, + 909277200000, + 922582800000, + 941331600000, + 954032400000, + 972781200000, + 985482000000, + 1004230800000, + 1017536400000, + 1035680400000, + 1048986000000, + 1067130000000, + 1080435600000, + 1099184400000, + 1111885200000, + 1130634000000, + 1143334800000, + 1162083600000, + 1174784400000, + 1193533200000, + 1206838800000, + 1224982800000, + 1238288400000, + 1256432400000, + 1269738000000, + 1288486800000, + 1301187600000, + 1319936400000, + 1332637200000, + 1351386000000, + 1364691600000, + 1382835600000, + 1396141200000, + 1414285200000, + 1427590800000, + 1445734800000, + 1459040400000, + 1477789200000, + 1490490000000, + 1509238800000, + 1521939600000, + 1540688400000, + 1553994000000, + 1572138000000, + 1585443600000, + 1603587600000, + 1616893200000, + 1635642000000, + 1648342800000, + 1667091600000, + 1679792400000, + 1698541200000, + 1711846800000, + 1729990800000, + 1743296400000, + 1761440400000, + 1774746000000, + 1792890000000, + 1806195600000, + 1824944400000, + 1837645200000, + 1856394000000, + 1869094800000, + 1887843600000, + 1901149200000, + 1919293200000, + 1932598800000, + 1950742800000, + 1964048400000, + 1982797200000, + 1995498000000, + 2014246800000, + 2026947600000, + 2045696400000, + 2058397200000, + 2077146000000, + 2090451600000, + 2108595600000, + 2121901200000, + 2140045200000, + null + ], + "offsets": [ + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0, + -60, + 0 + ], + "population": 0 + }, + { + "name": "Zulu", + "abbrs": [ + "UTC" + ], + "untils": [ + null + ], + "offsets": [ + 0 + ], + "population": 0 + } + ], + "links": [] +} \ No newline at end of file diff --git a/node_modules/moment-timezone/index.js b/node_modules/moment-timezone/index.js new file mode 100644 index 0000000..61a6dcc --- /dev/null +++ b/node_modules/moment-timezone/index.js @@ -0,0 +1,2 @@ +var moment = module.exports = require("./moment-timezone"); +moment.tz.load(require('./data/packed/latest.json')); diff --git a/node_modules/moment-timezone/moment-timezone-utils.js b/node_modules/moment-timezone/moment-timezone-utils.js new file mode 100644 index 0000000..a953b90 --- /dev/null +++ b/node_modules/moment-timezone/moment-timezone-utils.js @@ -0,0 +1,316 @@ +//! moment-timezone-utils.js +//! version : 0.5.11 +//! Copyright (c) JS Foundation and other contributors +//! license : MIT +//! github.com/moment/moment-timezone + +(function (root, factory) { + "use strict"; + + /*global define*/ + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof module === 'object' && module.exports) { + module.exports = factory(require('./')); // Node + } else { + factory(root.moment); // Browser + } +}(this, function (moment) { + "use strict"; + + if (!moment.tz) { + throw new Error("moment-timezone-utils.js must be loaded after moment-timezone.js"); + } + + /************************************ + Pack Base 60 + ************************************/ + + var BASE60 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX', + EPSILON = 0.000001; // Used to fix floating point rounding errors + + function packBase60Fraction(fraction, precision) { + var buffer = '.', + output = '', + current; + + while (precision > 0) { + precision -= 1; + fraction *= 60; + current = Math.floor(fraction + EPSILON); + buffer += BASE60[current]; + fraction -= current; + + // Only add buffer to output once we have a non-zero value. + // This makes '.000' output '', and '.100' output '.1' + if (current) { + output += buffer; + buffer = ''; + } + } + + return output; + } + + function packBase60(number, precision) { + var output = '', + absolute = Math.abs(number), + whole = Math.floor(absolute), + fraction = packBase60Fraction(absolute - whole, Math.min(~~precision, 10)); + + while (whole > 0) { + output = BASE60[whole % 60] + output; + whole = Math.floor(whole / 60); + } + + if (number < 0) { + output = '-' + output; + } + + if (output && fraction) { + return output + fraction; + } + + if (!fraction && output === '-') { + return '0'; + } + + return output || fraction || '0'; + } + + /************************************ + Pack + ************************************/ + + function packUntils(untils) { + var out = [], + last = 0, + i; + + for (i = 0; i < untils.length - 1; i++) { + out[i] = packBase60(Math.round((untils[i] - last) / 1000) / 60, 1); + last = untils[i]; + } + + return out.join(' '); + } + + function packAbbrsAndOffsets(source) { + var index = 0, + abbrs = [], + offsets = [], + indices = [], + map = {}, + i, key; + + for (i = 0; i < source.abbrs.length; i++) { + key = source.abbrs[i] + '|' + source.offsets[i]; + if (map[key] === undefined) { + map[key] = index; + abbrs[index] = source.abbrs[i]; + offsets[index] = packBase60(Math.round(source.offsets[i] * 60) / 60, 1); + index++; + } + indices[i] = packBase60(map[key], 0); + } + + return abbrs.join(' ') + '|' + offsets.join(' ') + '|' + indices.join(''); + } + + function packPopulation (number) { + if (!number) { + return ''; + } + if (number < 1000) { + return '|' + number; + } + var exponent = String(number | 0).length - 2; + var precision = Math.round(number / Math.pow(10, exponent)); + return '|' + precision + 'e' + exponent; + } + + function validatePackData (source) { + if (!source.name) { throw new Error("Missing name"); } + if (!source.abbrs) { throw new Error("Missing abbrs"); } + if (!source.untils) { throw new Error("Missing untils"); } + if (!source.offsets) { throw new Error("Missing offsets"); } + if ( + source.offsets.length !== source.untils.length || + source.offsets.length !== source.abbrs.length + ) { + throw new Error("Mismatched array lengths"); + } + } + + function pack (source) { + validatePackData(source); + return [ + source.name, + packAbbrsAndOffsets(source), + packUntils(source.untils) + packPopulation(source.population) + ].join('|'); + } + + /************************************ + Create Links + ************************************/ + + function arraysAreEqual(a, b) { + var i; + + if (a.length !== b.length) { return false; } + + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + } + + function zonesAreEqual(a, b) { + return arraysAreEqual(a.offsets, b.offsets) && arraysAreEqual(a.abbrs, b.abbrs) && arraysAreEqual(a.untils, b.untils); + } + + function findAndCreateLinks (input, output, links) { + var i, j, a, b, group, foundGroup, groups = []; + + for (i = 0; i < input.length; i++) { + foundGroup = false; + a = input[i]; + + for (j = 0; j < groups.length; j++) { + group = groups[j]; + b = group[0]; + if (zonesAreEqual(a, b)) { + if (a.population > b.population) { + group.unshift(a); + } else { + group.push(a); + } + foundGroup = true; + } + } + + if (!foundGroup) { + groups.push([a]); + } + } + + for (i = 0; i < groups.length; i++) { + group = groups[i]; + output.push(group[0]); + for (j = 1; j < group.length; j++) { + links.push(group[0].name + '|' + group[j].name); + } + } + } + + function createLinks (source) { + var zones = [], + links = []; + + if (source.links) { + links = source.links.slice(); + } + + findAndCreateLinks(source.zones, zones, links); + + return { + version : source.version, + zones : zones, + links : links.sort() + }; + } + + /************************************ + Filter Years + ************************************/ + + function findStartAndEndIndex (untils, start, end) { + var startI = 0, + endI = untils.length + 1, + untilYear, + i; + + if (!end) { + end = start; + } + + if (start > end) { + i = start; + start = end; + end = i; + } + + for (i = 0; i < untils.length; i++) { + if (untils[i] == null) { + continue; + } + untilYear = new Date(untils[i]).getUTCFullYear(); + if (untilYear < start) { + startI = i + 1; + } + if (untilYear > end) { + endI = Math.min(endI, i + 1); + } + } + + return [startI, endI]; + } + + function filterYears (source, start, end) { + var slice = Array.prototype.slice, + indices = findStartAndEndIndex(source.untils, start, end), + untils = slice.apply(source.untils, indices); + + untils[untils.length - 1] = null; + + return { + name : source.name, + abbrs : slice.apply(source.abbrs, indices), + untils : untils, + offsets : slice.apply(source.offsets, indices), + population : source.population + }; + } + + /************************************ + Filter, Link, and Pack + ************************************/ + + function filterLinkPack (input, start, end) { + var i, + inputZones = input.zones, + outputZones = [], + output; + + for (i = 0; i < inputZones.length; i++) { + outputZones[i] = filterYears(inputZones[i], start, end); + } + + output = createLinks({ + zones : outputZones, + links : input.links.slice(), + version : input.version + }); + + for (i = 0; i < output.zones.length; i++) { + output.zones[i] = pack(output.zones[i]); + } + + return output; + } + + /************************************ + Exports + ************************************/ + + moment.tz.pack = pack; + moment.tz.packBase60 = packBase60; + moment.tz.createLinks = createLinks; + moment.tz.filterYears = filterYears; + moment.tz.filterLinkPack = filterLinkPack; + + return moment; +})); diff --git a/node_modules/moment-timezone/moment-timezone.js b/node_modules/moment-timezone/moment-timezone.js new file mode 100644 index 0000000..bd3f15b --- /dev/null +++ b/node_modules/moment-timezone/moment-timezone.js @@ -0,0 +1,601 @@ +//! moment-timezone.js +//! version : 0.5.11 +//! Copyright (c) JS Foundation and other contributors +//! license : MIT +//! github.com/moment/moment-timezone + +(function (root, factory) { + "use strict"; + + /*global define*/ + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof module === 'object' && module.exports) { + module.exports = factory(require('moment')); // Node + } else { + factory(root.moment); // Browser + } +}(this, function (moment) { + "use strict"; + + // Do not load moment-timezone a second time. + // if (moment.tz !== undefined) { + // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); + // return moment; + // } + + var VERSION = "0.5.11", + zones = {}, + links = {}, + names = {}, + guesses = {}, + cachedGuess, + + momentVersion = moment.version.split('.'), + major = +momentVersion[0], + minor = +momentVersion[1]; + + // Moment.js version check + if (major < 2 || (major === 2 && minor < 6)) { + logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); + } + + /************************************ + Unpacking + ************************************/ + + function charCodeToInt(charCode) { + if (charCode > 96) { + return charCode - 87; + } else if (charCode > 64) { + return charCode - 29; + } + return charCode - 48; + } + + function unpackBase60(string) { + var i = 0, + parts = string.split('.'), + whole = parts[0], + fractional = parts[1] || '', + multiplier = 1, + num, + out = 0, + sign = 1; + + // handle negative numbers + if (string.charCodeAt(0) === 45) { + i = 1; + sign = -1; + } + + // handle digits before the decimal + for (i; i < whole.length; i++) { + num = charCodeToInt(whole.charCodeAt(i)); + out = 60 * out + num; + } + + // handle digits after the decimal + for (i = 0; i < fractional.length; i++) { + multiplier = multiplier / 60; + num = charCodeToInt(fractional.charCodeAt(i)); + out += num * multiplier; + } + + return out * sign; + } + + function arrayToInt (array) { + for (var i = 0; i < array.length; i++) { + array[i] = unpackBase60(array[i]); + } + } + + function intToUntil (array, length) { + for (var i = 0; i < length; i++) { + array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds + } + + array[length - 1] = Infinity; + } + + function mapIndices (source, indices) { + var out = [], i; + + for (i = 0; i < indices.length; i++) { + out[i] = source[indices[i]]; + } + + return out; + } + + function unpack (string) { + var data = string.split('|'), + offsets = data[2].split(' '), + indices = data[3].split(''), + untils = data[4].split(' '); + + arrayToInt(offsets); + arrayToInt(indices); + arrayToInt(untils); + + intToUntil(untils, indices.length); + + return { + name : data[0], + abbrs : mapIndices(data[1].split(' '), indices), + offsets : mapIndices(offsets, indices), + untils : untils, + population : data[5] | 0 + }; + } + + /************************************ + Zone object + ************************************/ + + function Zone (packedString) { + if (packedString) { + this._set(unpack(packedString)); + } + } + + Zone.prototype = { + _set : function (unpacked) { + this.name = unpacked.name; + this.abbrs = unpacked.abbrs; + this.untils = unpacked.untils; + this.offsets = unpacked.offsets; + this.population = unpacked.population; + }, + + _index : function (timestamp) { + var target = +timestamp, + untils = this.untils, + i; + + for (i = 0; i < untils.length; i++) { + if (target < untils[i]) { + return i; + } + } + }, + + parse : function (timestamp) { + var target = +timestamp, + offsets = this.offsets, + untils = this.untils, + max = untils.length - 1, + offset, offsetNext, offsetPrev, i; + + for (i = 0; i < max; i++) { + offset = offsets[i]; + offsetNext = offsets[i + 1]; + offsetPrev = offsets[i ? i - 1 : i]; + + if (offset < offsetNext && tz.moveAmbiguousForward) { + offset = offsetNext; + } else if (offset > offsetPrev && tz.moveInvalidForward) { + offset = offsetPrev; + } + + if (target < untils[i] - (offset * 60000)) { + return offsets[i]; + } + } + + return offsets[max]; + }, + + abbr : function (mom) { + return this.abbrs[this._index(mom)]; + }, + + offset : function (mom) { + return this.offsets[this._index(mom)]; + } + }; + + /************************************ + Current Timezone + ************************************/ + + function OffsetAt(at) { + var timeString = at.toTimeString(); + var abbr = timeString.match(/\([a-z ]+\)/i); + if (abbr && abbr[0]) { + // 17:56:31 GMT-0600 (CST) + // 17:56:31 GMT-0600 (Central Standard Time) + abbr = abbr[0].match(/[A-Z]/g); + abbr = abbr ? abbr.join('') : undefined; + } else { + // 17:56:31 CST + // 17:56:31 GMT+0800 (台北標準時間) + abbr = timeString.match(/[A-Z]{3,5}/g); + abbr = abbr ? abbr[0] : undefined; + } + + if (abbr === 'GMT') { + abbr = undefined; + } + + this.at = +at; + this.abbr = abbr; + this.offset = at.getTimezoneOffset(); + } + + function ZoneScore(zone) { + this.zone = zone; + this.offsetScore = 0; + this.abbrScore = 0; + } + + ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { + this.offsetScore += Math.abs(this.zone.offset(offsetAt.at) - offsetAt.offset); + if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { + this.abbrScore++; + } + }; + + function findChange(low, high) { + var mid, diff; + + while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { + mid = new OffsetAt(new Date(low.at + diff)); + if (mid.offset === low.offset) { + low = mid; + } else { + high = mid; + } + } + + return low; + } + + function userOffsets() { + var startYear = new Date().getFullYear() - 2, + last = new OffsetAt(new Date(startYear, 0, 1)), + offsets = [last], + change, next, i; + + for (i = 1; i < 48; i++) { + next = new OffsetAt(new Date(startYear, i, 1)); + if (next.offset !== last.offset) { + change = findChange(last, next); + offsets.push(change); + offsets.push(new OffsetAt(new Date(change.at + 6e4))); + } + last = next; + } + + for (i = 0; i < 4; i++) { + offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); + offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); + } + + return offsets; + } + + function sortZoneScores (a, b) { + if (a.offsetScore !== b.offsetScore) { + return a.offsetScore - b.offsetScore; + } + if (a.abbrScore !== b.abbrScore) { + return a.abbrScore - b.abbrScore; + } + return b.zone.population - a.zone.population; + } + + function addToGuesses (name, offsets) { + var i, offset; + arrayToInt(offsets); + for (i = 0; i < offsets.length; i++) { + offset = offsets[i]; + guesses[offset] = guesses[offset] || {}; + guesses[offset][name] = true; + } + } + + function guessesForUserOffsets (offsets) { + var offsetsLength = offsets.length, + filteredGuesses = {}, + out = [], + i, j, guessesOffset; + + for (i = 0; i < offsetsLength; i++) { + guessesOffset = guesses[offsets[i].offset] || {}; + for (j in guessesOffset) { + if (guessesOffset.hasOwnProperty(j)) { + filteredGuesses[j] = true; + } + } + } + + for (i in filteredGuesses) { + if (filteredGuesses.hasOwnProperty(i)) { + out.push(names[i]); + } + } + + return out; + } + + function rebuildGuess () { + + // use Intl API when available and returning valid time zone + try { + var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; + if (intlName){ + var name = names[normalizeName(intlName)]; + if (name) { + return name; + } + logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); + } + } catch (e) { + // Intl unavailable, fall back to manual guessing. + } + + var offsets = userOffsets(), + offsetsLength = offsets.length, + guesses = guessesForUserOffsets(offsets), + zoneScores = [], + zoneScore, i, j; + + for (i = 0; i < guesses.length; i++) { + zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); + for (j = 0; j < offsetsLength; j++) { + zoneScore.scoreOffsetAt(offsets[j]); + } + zoneScores.push(zoneScore); + } + + zoneScores.sort(sortZoneScores); + + return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; + } + + function guess (ignoreCache) { + if (!cachedGuess || ignoreCache) { + cachedGuess = rebuildGuess(); + } + return cachedGuess; + } + + /************************************ + Global Methods + ************************************/ + + function normalizeName (name) { + return (name || '').toLowerCase().replace(/\//g, '_'); + } + + function addZone (packed) { + var i, name, split, normalized; + + if (typeof packed === "string") { + packed = [packed]; + } + + for (i = 0; i < packed.length; i++) { + split = packed[i].split('|'); + name = split[0]; + normalized = normalizeName(name); + zones[normalized] = packed[i]; + names[normalized] = name; + if (split[5]) { + addToGuesses(normalized, split[2].split(' ')); + } + } + } + + function getZone (name, caller) { + name = normalizeName(name); + + var zone = zones[name]; + var link; + + if (zone instanceof Zone) { + return zone; + } + + if (typeof zone === 'string') { + zone = new Zone(zone); + zones[name] = zone; + return zone; + } + + // Pass getZone to prevent recursion more than 1 level deep + if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { + zone = zones[name] = new Zone(); + zone._set(link); + zone.name = names[name]; + return zone; + } + + return null; + } + + function getNames () { + var i, out = []; + + for (i in names) { + if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { + out.push(names[i]); + } + } + + return out.sort(); + } + + function addLink (aliases) { + var i, alias, normal0, normal1; + + if (typeof aliases === "string") { + aliases = [aliases]; + } + + for (i = 0; i < aliases.length; i++) { + alias = aliases[i].split('|'); + + normal0 = normalizeName(alias[0]); + normal1 = normalizeName(alias[1]); + + links[normal0] = normal1; + names[normal0] = alias[0]; + + links[normal1] = normal0; + names[normal1] = alias[1]; + } + } + + function loadData (data) { + addZone(data.zones); + addLink(data.links); + tz.dataVersion = data.version; + } + + function zoneExists (name) { + if (!zoneExists.didShowError) { + zoneExists.didShowError = true; + logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); + } + return !!getZone(name); + } + + function needsOffset (m) { + return !!(m._a && (m._tzm === undefined)); + } + + function logError (message) { + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + } + + /************************************ + moment.tz namespace + ************************************/ + + function tz (input) { + var args = Array.prototype.slice.call(arguments, 0, -1), + name = arguments[arguments.length - 1], + zone = getZone(name), + out = moment.utc.apply(null, args); + + if (zone && !moment.isMoment(input) && needsOffset(out)) { + out.add(zone.parse(out), 'minutes'); + } + + out.tz(name); + + return out; + } + + tz.version = VERSION; + tz.dataVersion = ''; + tz._zones = zones; + tz._links = links; + tz._names = names; + tz.add = addZone; + tz.link = addLink; + tz.load = loadData; + tz.zone = getZone; + tz.zoneExists = zoneExists; // deprecated in 0.1.0 + tz.guess = guess; + tz.names = getNames; + tz.Zone = Zone; + tz.unpack = unpack; + tz.unpackBase60 = unpackBase60; + tz.needsOffset = needsOffset; + tz.moveInvalidForward = true; + tz.moveAmbiguousForward = false; + + /************************************ + Interface with Moment.js + ************************************/ + + var fn = moment.fn; + + moment.tz = tz; + + moment.defaultZone = null; + + moment.updateOffset = function (mom, keepTime) { + var zone = moment.defaultZone, + offset; + + if (mom._z === undefined) { + if (zone && needsOffset(mom) && !mom._isUTC) { + mom._d = moment.utc(mom._a)._d; + mom.utc().add(zone.parse(mom), 'minutes'); + } + mom._z = zone; + } + if (mom._z) { + offset = mom._z.offset(mom); + if (Math.abs(offset) < 16) { + offset = offset / 60; + } + if (mom.utcOffset !== undefined) { + mom.utcOffset(-offset, keepTime); + } else { + mom.zone(offset, keepTime); + } + } + }; + + fn.tz = function (name) { + if (name) { + this._z = getZone(name); + if (this._z) { + moment.updateOffset(this); + } else { + logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); + } + return this; + } + if (this._z) { return this._z.name; } + }; + + function abbrWrap (old) { + return function () { + if (this._z) { return this._z.abbr(this); } + return old.call(this); + }; + } + + function resetZoneWrap (old) { + return function () { + this._z = null; + return old.apply(this, arguments); + }; + } + + fn.zoneName = abbrWrap(fn.zoneName); + fn.zoneAbbr = abbrWrap(fn.zoneAbbr); + fn.utc = resetZoneWrap(fn.utc); + + moment.tz.setDefault = function(name) { + if (major < 2 || (major === 2 && minor < 9)) { + logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); + } + moment.defaultZone = name ? getZone(name) : null; + return moment; + }; + + // Cloning a moment should include the _z property. + var momentProperties = moment.momentProperties; + if (Object.prototype.toString.call(momentProperties) === '[object Array]') { + // moment 2.8.1+ + momentProperties.push('_z'); + momentProperties.push('_a'); + } else if (momentProperties) { + // moment 2.7.0 + momentProperties._z = null; + } + + // INJECT DATA + + return moment; +})); diff --git a/node_modules/moment-timezone/package.json b/node_modules/moment-timezone/package.json new file mode 100644 index 0000000..30f2a67 --- /dev/null +++ b/node_modules/moment-timezone/package.json @@ -0,0 +1,128 @@ +{ + "_args": [ + [ + { + "raw": "moment-timezone", + "scope": null, + "escapedName": "moment-timezone", + "name": "moment-timezone", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "/home/burchettm/modbot" + ] + ], + "_from": "moment-timezone@latest", + "_id": "moment-timezone@0.5.11", + "_inCache": true, + "_location": "/moment-timezone", + "_nodeVersion": "6.9.1", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/moment-timezone-0.5.11.tgz_1482518103072_0.8412602993194014" + }, + "_npmUser": { + "name": "maggiepint", + "email": "maggiepint@gmail.com" + }, + "_npmVersion": "3.10.8", + "_phantomChildren": {}, + "_requested": { + "raw": "moment-timezone", + "scope": null, + "escapedName": "moment-timezone", + "name": "moment-timezone", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "#USER" + ], + "_resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.11.tgz", + "_shasum": "9b76c03d8ef514c7e4249a7bbce649eed39ef29f", + "_shrinkwrap": null, + "_spec": "moment-timezone", + "_where": "/home/burchettm/modbot", + "author": { + "name": "Tim Wood", + "email": "washwithcare@gmail.com", + "url": "http://timwoodcreates.com/" + }, + "bugs": { + "url": "https://github.com/moment/moment-timezone/issues" + }, + "dependencies": { + "moment": ">= 2.6.0" + }, + "description": "Parse and display moments in any timezone.", + "devDependencies": { + "grunt": "0.4.5", + "grunt-contrib-clean": "0.6.0", + "grunt-contrib-jshint": "0.11.2", + "grunt-contrib-nodeunit": "0.4.1", + "grunt-contrib-uglify": "0.9.1" + }, + "directories": {}, + "dist": { + "shasum": "9b76c03d8ef514c7e4249a7bbce649eed39ef29f", + "tarball": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.11.tgz" + }, + "engines": { + "node": "*" + }, + "gitHead": "2124976c909dd440bea4499c5fd9c8ca4da95fd8", + "homepage": "http://momentjs.com/timezone/", + "jspm": { + "main": "builds/moment-timezone-with-data", + "shim": { + "moment-timezone": { + "deps": [ + "moment" + ] + } + } + }, + "keywords": [ + "moment", + "date", + "time", + "timezone", + "olson", + "iana", + "zone", + "tz" + ], + "license": "MIT", + "main": "./index.js", + "maintainers": [ + { + "name": "ichernev", + "email": "iskren.chernev@gmail.com" + }, + { + "name": "maggiepint", + "email": "maggiepint@gmail.com" + }, + { + "name": "mj1856", + "email": "mj1856@hotmail.com" + }, + { + "name": "timrwood", + "email": "washwithcare@gmail.com" + } + ], + "name": "moment-timezone", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/moment/moment-timezone.git" + }, + "scripts": { + "test": "grunt" + }, + "version": "0.5.11" +} diff --git a/node_modules/moment/CHANGELOG.md b/node_modules/moment/CHANGELOG.md new file mode 100644 index 0000000..bff62fa --- /dev/null +++ b/node_modules/moment/CHANGELOG.md @@ -0,0 +1,766 @@ +Changelog +========= + +### 2.18.1 + +* Release Mar 22, 2017 + +* [#3853](https://github.com/moment/moment/pull/3853) [misc] Fix invalid whitespace character causing inability to parse + moment.js + +### 2.18.0 [See full changelog](https://gist.github.com/ichernev/78920c5a1e419fb28c6e4546d1b7235c) + +* Release Mar 18, 2017 + +## Features + +* [#3708](https://github.com/moment/moment/pull/3708) [feature] RFC2822 parsing +* [#3611](https://github.com/moment/moment/pull/3611) [feature] Durations gain validity +* [#3738](https://github.com/moment/moment/pull/3738) [feature] Enable relative time for multiple seconds, request [#2558](https://github.com/moment/moment/issues/2558) +* [#3766](https://github.com/moment/moment/pull/3766) [feature] Add support for k and kk format parsing + +## Bugfixes + +* [#3643](https://github.com/moment/moment/pull/3643) [bugfix] Fixes [#3520](https://github.com/moment/moment/issues/3520), parseZone incorrectly handled minutes under 16 +* [#3710](https://github.com/moment/moment/pull/3710) [bugfix] Fixes [#3632](https://github.com/moment/moment/issues/3632), toISOString returns null for invalid date +* [#3787](https://github.com/moment/moment/pull/3787) [bugfix] Fixes [#3717](https://github.com/moment/moment/issues/3717), ensure day-of-year is non-zero +* [#3780](https://github.com/moment/moment/pull/3780) [bugfix] Fixes [#3765](https://github.com/moment/moment/issues/3765): Ensure year 0 is formatted with YYYY +* [#3806](https://github.com/moment/moment/pull/3806) [bugfix] Fixes [#3805](https://github.com/moment/moment/issues/3805), fix locale month getters for standalone/format cases + +7 new locales, many locale improvements and some misc changes + +### 2.17.1 [Also available here](https://gist.github.com/ichernev/f38280b2b29c4932914a6d3a4e50bfb2) +* Release Dec 03, 2016 + +* [#3638](https://github.com/moment/moment/pull/3638) [misc] TS: Make typescript definitions work with 1.x +* [#3628](https://github.com/moment/moment/pull/3628) [misc] Adds "sign CLA" link to `CONTRIBUTING.md` +* [#3640](https://github.com/moment/moment/pull/3640) [misc] Fix locale issues + +### 2.17.0 [Also available here](https://gist.github.com/ichernev/ed58f76fb95205eeac653d719972b90c) +* Release Nov 22, 2016 + +* [#3435](https://github.com/moment/moment/pull/3435) [new locale] yo: Yoruba (Nigeria) locale +* [#3595](https://github.com/moment/moment/pull/3595) [bugfix] Fix accidental reference to global "value" variable +* [#3506](https://github.com/moment/moment/pull/3506) [bugfix] Fix invalid moments returning valid dates to method calls +* [#3563](https://github.com/moment/moment/pull/3563) [locale] ca: Change future relative time +* [#3504](https://github.com/moment/moment/pull/3504) [tests] Fixes [#3463](https://github.com/moment/moment/issues/3463), parseZone not handling Z correctly (tests only) +* [#3591](https://github.com/moment/moment/pull/3591) [misc] typescript: update typescript to 2.0.8, add strictNullChecks=true +* [#3597](https://github.com/moment/moment/pull/3597) [misc] Fixed capitalization in nuget spec + +### 2.16.0 [See full changelog](https://gist.github.com/ichernev/17bffc1005a032cb1a8ac4c1558b4994) +* Release Nov 9, 2016 + +## Features +* [#3530](https://github.com/moment/moment/pull/3530) [feature] Check whether input is date before checking if format is array +* [#3515](https://github.com/moment/moment/pull/3515) [feature] Fix [#2300](https://github.com/moment/moment/issues/2300): Default to current week. + +## Bugfixes +* [#3546](https://github.com/moment/moment/pull/3546) [bugfix] Implement lazy-loading of child locales with missing prents +* [#3523](https://github.com/moment/moment/pull/3523) [bugfix] parseZone should handle UTC +* [#3502](https://github.com/moment/moment/pull/3502) [bugfix] Fix [#3500](https://github.com/moment/moment/issues/3500): ISO 8601 parsing should match the full string, not the beginning of the string. +* [#3581](https://github.com/moment/moment/pull/3581) [bugfix] Fix parseZone, redo [#3504](https://github.com/moment/moment/issues/3504), fix [#3463](https://github.com/moment/moment/issues/3463) + +## New Locales +* [#3416](https://github.com/moment/moment/pull/3416) [new locale] nl-be: Dutch (Belgium) locale +* [#3393](https://github.com/moment/moment/pull/3393) [new locale] ar-dz: Arabic (Algeria) locale +* [#3342](https://github.com/moment/moment/pull/3342) [new locale] tet: Tetun Dili (East Timor) locale + +And more locale, build and typescript improvements + +### 2.15.2 +* Release Oct 23, 2016 +* [#3525](https://github.com/moment/moment/pull/3525) Speedup month standalone/format regexes **(IMPORTANT)** +* [#3466](https://github.com/moment/moment/pull/3466) Fix typo of Javanese + +### 2.15.1 +* Release Sept 20, 2016 +* [#3438](https://github.com/moment/moment/pull/3438) Fix locale autoload, revert [#3344](https://github.com/moment/moment/pull/3344) + +### 2.15.0 [See full changelog](https://gist.github.com/ichernev/10e1c5bf647545c72ca30e9628a09ed3) +- Release Sept 12, 2016 + +## New Locales +* [#3255](https://github.com/moment/moment/pull/3255) [new locale] mi: Maori language +* [#3267](https://github.com/moment/moment/pull/3267) [new locale] ar-ly: Arabic (Libya) locale +* [#3333](https://github.com/moment/moment/pull/3333) [new locale] zh-hk: Chinese (Hong Kong) locale + +## Bugfixes +* [#3276](https://github.com/moment/moment/pull/3276) [bugfix] duration: parser: Support ms durations in .NET syntax +* [#3312](https://github.com/moment/moment/pull/3312) [bugfix] locales: Enable locale-data getters without moment (fixes [#3284](https://github.com/moment/moment/issues/3284)) +* [#3381](https://github.com/moment/moment/pull/3381) [bugfix] parsing: Fix parseZone without timezone in string, fixes [#3083](https://github.com/moment/moment/issues/3083) +* [#3383](https://github.com/moment/moment/pull/3383) [bugfix] toJSON: Fix isValid so that toJSON works after a moment is frozen +* [#3427](https://github.com/moment/moment/pull/3427) [bugfix] ie8: Fix IE8 (regression in 2.14.x) + +## Packaging +* [#3299](https://github.com/moment/moment/pull/3299) [pkg] npm: Do not include .npmignore in npm package +* [#3273](https://github.com/moment/moment/pull/3273) [pkg] jspm: Include moment.d.ts file in package +* [#3344](https://github.com/moment/moment/pull/3344) [pkg] exports: use module.require for nodejs + +Also some locale and typescript improvements + +### 2.14.1 +- Release July 20, 2016 +* [#3280](https://github.com/moment/moment/pull/3280) Fix typescript definitions + + +### 2.14.0 [See full changelog](https://gist.github.com/ichernev/812e79ac36a7829a22598fe964bfc18a) + +- Release July 20, 2016 + +## New Features +* [#3233](https://github.com/moment/moment/pull/3233) Introduce month.isFormat for format/standalone discovery +* [#2848](https://github.com/moment/moment/pull/2848) Allow user to get/set the rounding method used when calculating relative time +* [#3112](https://github.com/moment/moment/pull/3112) optimize configFromStringAndFormat +* [#3147](https://github.com/moment/moment/pull/3147) Call calendar format function with moment context +* [#3160](https://github.com/moment/moment/pull/3160) deprecate isDSTShifted +* [#3175](https://github.com/moment/moment/pull/3175) make moment calendar extensible with ad-hoc options +* [#3191](https://github.com/moment/moment/pull/3191) toDate returns a copy of the internal date object +* [#3192](https://github.com/moment/moment/pull/3192) Adding support for rollup import. +* [#3238](https://github.com/moment/moment/pull/3238) Handle empty object and empty array for creation as now +* [#3082](https://github.com/moment/moment/pull/3082) Use relative AMD moment dependency + +## Bugfixes +* [#3241](https://github.com/moment/moment/pull/3241) Escape all 24 mixed pieces, not only first 12 in computeMonthsParse +* [#3008](https://github.com/moment/moment/pull/3008) Object setter orders sets based on size of unit +* [#3177](https://github.com/moment/moment/pull/3177) Bug Fix [#2704](https://github.com/moment/moment/pull/2704) - isoWeekday(String) inconsistent with isoWeekday(Number) +* [#3230](https://github.com/moment/moment/pull/3230) fix passing date with format string to ignore format string +* [#3232](https://github.com/moment/moment/pull/3232) Fix negative 0 in certain diff cases +* [#3235](https://github.com/moment/moment/pull/3235) Use proper locale inheritance for the base locale, fixes [#3137](https://github.com/moment/moment/pull/3137) + +Plus es-do locale and locale bugfixes + +### 2.13.0 [See full changelog](https://gist.github.com/ichernev/0132fcf5b61f7fc140b0bb0090480d49) +- Release April 18, 2016 + +## Enhancements: +* [#2982](https://github.com/moment/moment/pull/2982) Add 'date' as alias to 'day' for startOf() and endOf(). +* [#2955](https://github.com/moment/moment/pull/2955) Add parsing negative components in durations when ISO 8601 +* [#2991](https://github.com/moment/moment/pull/2991) isBetween support for both open and closed intervals +* [#3105](https://github.com/moment/moment/pull/3105) Add localeSorted argument to weekday listers +* [#3102](https://github.com/moment/moment/pull/3102) Add k and kk formatting tokens + +## Bugfixes +* [#3109](https://github.com/moment/moment/pull/3109) Fix [#1756](https://github.com/moment/moment/issues/1756) Resolved thread-safe issue on server side. +* [#3078](https://github.com/moment/moment/pull/3078) Fix parsing for months/weekdays with weird characters +* [#3098](https://github.com/moment/moment/pull/3098) Use Z suffix when in UTC mode ([#3020](https://github.com/moment/moment/issues/3020)) +* [#2995](https://github.com/moment/moment/pull/2995) Fix floating point rounding errors in durations +* [#3059](https://github.com/moment/moment/pull/3059) fix bug where diff returns -0 in month-related diffs +* [#3045](https://github.com/moment/moment/pull/3045) Fix mistaking any input for 'a' token +* [#2877](https://github.com/moment/moment/pull/2877) Use explicit .valueOf() calls instead of coercion +* [#3036](https://github.com/moment/moment/pull/3036) Year setter should keep time when DST changes + +Plus 3 new locales and locale fixes. + +### 2.12.0 [See full changelog](https://gist.github.com/ichernev/6e5bfdf8d6522fc4ac73) + +- Release March 7, 2016 + +## Enhancements: +* [#2932](https://github.com/moment/moment/pull/2932) List loaded locales +* [#2818](https://github.com/moment/moment/pull/2818) Parse ISO-8061 duration containing both day and week values +* [#2774](https://github.com/moment/moment/pull/2774) Implement locale inheritance and locale updating + +## Bugfixes: +* [#2970](https://github.com/moment/moment/pull/2970) change add subtract to handle decimal values by rounding +* [#2887](https://github.com/moment/moment/pull/2887) Fix toJSON casting of invalid moment +* [#2897](https://github.com/moment/moment/pull/2897) parse string arguments for month() correctly, closes #2884 +* [#2946](https://github.com/moment/moment/pull/2946) Fix usage suggestions for min and max + +## New locales: +* [#2917](https://github.com/moment/moment/pull/2917) Locale Punjabi(Gurmukhi) India format conversion + +And more + +### 2.11.2 (Fix ReDoS attack vector) + +- Release February 7, 2016 + +* [#2939](https://github.com/moment/moment/pull/2939) use full-string match to speed up aspnet regex match + +### 2.11.1 [See full changelog](https://gist.github.com/ichernev/8ec3ee25b749b4cff3c2) + +- Release January 9, 2016 + +## Bugfixes: +* [#2881](https://github.com/moment/moment/pull/2881) Revert "Merge pull request #2746 from mbad0la:develop" Sep->Sept +* [#2868](https://github.com/moment/moment/pull/2868) Add format and parse token Y, so it actually works +* [#2865](https://github.com/moment/moment/pull/2865) Use typeof checks for undefined for global variables +* [#2858](https://github.com/moment/moment/pull/2858) Fix Date mocking regression introduced in 2.11.0 +* [#2864](https://github.com/moment/moment/pull/2864) Include changelog in npm release +* [#2830](https://github.com/moment/moment/pull/2830) dep: add grunt-cli +* [#2869](https://github.com/moment/moment/pull/2869) Fix months parsing for some locales + +### 2.11.0 [See full changelog](https://gist.github.com/ichernev/6594bc29719dde6b2f66) + +- Release January 4, 2016 + +* [#2624](https://github.com/moment/moment/pull/2624) Proper handling of invalid moments +* [#2634](https://github.com/moment/moment/pull/2634) Fix strict month parsing issue in cs,ru,sk +* [#2735](https://github.com/moment/moment/pull/2735) Reset the locale back to 'en' after defining all locales in min/locales.js +* [#2702](https://github.com/moment/moment/pull/2702) Week rework +* [#2746](https://github.com/moment/moment/pull/2746) Changed September Abbreviation to "Sept" in locale-specific english + files and default locale file +* [#2646](https://github.com/moment/moment/pull/2646) Fix [#2645](https://github.com/moment/moment/pull/2645) - invalid dates pre-1970 + +* [#2641](https://github.com/moment/moment/pull/2641) Implement basic format and comma as ms separator in ISO 8601 +* [#2665](https://github.com/moment/moment/pull/2665) Implement stricter weekday parsing +* [#2700](https://github.com/moment/moment/pull/2700) Add [Hh]mm and [Hh]mmss formatting tokens, so you can parse 123 with + hmm for example +* [#2565](https://github.com/moment/moment/pull/2565) [#2835](https://github.com/moment/moment/pull/2835) Expose arguments used for moment creation with creationData + (fix [#2443](https://github.com/moment/moment/pull/2443)) +* [#2648](https://github.com/moment/moment/pull/2648) fix issue [#2640](https://github.com/moment/moment/pull/2640): support instanceof operator +* [#2709](https://github.com/moment/moment/pull/2709) Add isSameOrAfter and isSameOrBefore comparison methods +* [#2721](https://github.com/moment/moment/pull/2721) Fix moment creation from object with strings values +* [#2740](https://github.com/moment/moment/pull/2740) Enable 'd hh:mm:ss.sss' format for durations +* [#2766](https://github.com/moment/moment/pull/2766) [#2833](https://github.com/moment/moment/pull/2833) Alternate Clock Source Support + +### 2.10.6 + +- Release July 28, 2015 + +[#2515](https://github.com/moment/moment/pull/2515) Fix regression introduced +in `2.10.5` related to `moment.ISO_8601` parsing. + +### 2.10.5 [See full changelog](https://gist.github.com/ichernev/6ec13ac7efc396da44b2) + +- Release July 26, 2015 + +Important changes: +* [#2357](https://github.com/moment/moment/pull/2357) Improve unit bubbling for ISO dates + this fixes day to year conversions to work around end-of-year (~365 days). As + a side effect 365 days is 11 months and 30 days, and 366 days is one year. +* [#2438](https://github.com/moment/moment/pull/2438) Fix inconsistent moment.min and moment.max results + Return invalid result if any of the inputs is invalid +* [#2494](https://github.com/moment/moment/pull/2494) Fix two digit year parsing with YYYY format + This brings the benefits of YY to YYYY +* [#2368](https://github.com/moment/moment/pull/2368) perf: use faster form of copying dates, across the board improvement + + +### 2.10.3 [See full changelog](https://gist.github.com/ichernev/f264b9bed5b00f8b1b7f) + +- Release May 13, 2015 + +* add `moment.fn.to` and `moment.fn.toNow` (similar to `from` and `fromNow`) +* new locales (Sinhalese (si), Montenegrin (me), Javanese (ja)) +* performance improvements + +### 2.10.2 + +- Release April 9, 2015 + +* fixed moment-with-locales in browser env caused by esperanto change + +### 2.10.1 + +* regression: Add moment.duration.fn back + +### 2.10.0 + +Ported code to es6 modules. + +### 2.9.0 [See full changelog](https://gist.github.com/ichernev/0c9a9b49951111a27ce7) + +- Release January 8, 2015 + +languages: +* [2104](https://github.com/moment/moment/issues/2104) Frisian (fy) language file with unit test +* [2097](https://github.com/moment/moment/issues/2097) add ar-tn locale + +deprecations: +* [2074](https://github.com/moment/moment/issues/2074) Implement `moment.fn.utcOffset`, deprecate `moment.fn.zone` + +features: +* [2088](https://github.com/moment/moment/issues/2088) add moment.fn.isBetween +* [2054](https://github.com/moment/moment/issues/2054) Call updateOffset when creating moment (needed for default timezone in + moment-timezone) +* [1893](https://github.com/moment/moment/issues/1893) Add moment.isDate method +* [1825](https://github.com/moment/moment/issues/1825) Implement toJSON function on Duration +* [1809](https://github.com/moment/moment/issues/1809) Allowing moment.set() to accept a hash of units +* [2128](https://github.com/moment/moment/issues/2128) Add firstDayOfWeek, firstDayOfYear locale getters +* [2131](https://github.com/moment/moment/issues/2131) Add quarter diff support + +Some bugfixes and language improvements -- [full changelog](https://gist.github.com/ichernev/0c9a9b49951111a27ce7) + +### 2.8.4 [See full changelog](https://gist.github.com/ichernev/a4fcb0a46d74e4b9b996) + +- Release November 19, 2014 + +Features: + +* [#2000](https://github.com/moment/moment/issues/2000) Add LTS localised format that includes seconds +* [#1960](https://github.com/moment/moment/issues/1960) added formatToken 'x' for unix offset in milliseconds #1938 +* [#1965](https://github.com/moment/moment/issues/1965) Support 24:00:00.000 to mean next day, at midnight. +* [#2002](https://github.com/moment/moment/issues/2002) Accept 'date' key when creating moment with object +* [#2009](https://github.com/moment/moment/issues/2009) Use native toISOString when we can + +Some bugfixes and language improvements -- [full changelog](https://gist.github.com/ichernev/a4fcb0a46d74e4b9b996) + +### 2.8.3 + +- Release September 5, 2014 + +Bugfixes: + +* [#1801](https://github.com/moment/moment/issues/1801) proper pluralization for Arabic +* [#1833](https://github.com/moment/moment/issues/1833) improve spm integration +* [#1871](https://github.com/moment/moment/issues/1871) fix zone bug caused by Firefox 24 +* [#1882](https://github.com/moment/moment/issues/1882) Use hh:mm in Czech +* [#1883](https://github.com/moment/moment/issues/1883) Fix 2.8.0 regression in duration as conversions +* [#1890](https://github.com/moment/moment/issues/1890) Faster travis builds +* [#1892](https://github.com/moment/moment/issues/1892) Faster isBefore/After/Same +* [#1848](https://github.com/moment/moment/issues/1848) Fix flaky month diffs +* [#1895](https://github.com/moment/moment/issues/1895) Fix 2.8.0 regression in moment.utc with format array +* [#1896](https://github.com/moment/moment/issues/1896) Support setting invalid instance locale (noop) +* [#1897](https://github.com/moment/moment/issues/1897) Support moment([str]) in addition to moment([int]) + +### 2.8.2 + +- Release August 22, 2014 + +Minor bugfixes: + +* [#1874](https://github.com/moment/moment/issues/1874) use `Object.prototype.hasOwnProperty` + instead of `obj.hasOwnProperty` (ie8 bug) +* [#1873](https://github.com/moment/moment/issues/1873) add `duration#toString()` +* [#1859](https://github.com/moment/moment/issues/1859) better month/weekday names in norwegian +* [#1812](https://github.com/moment/moment/issues/1812) meridiem parsing for greek +* [#1804](https://github.com/moment/moment/issues/1804) spanish del -> de +* [#1800](https://github.com/moment/moment/issues/1800) korean LT improvement + +### 2.8.1 + +- Release August 1, 2014 + +* bugfix [#1813](https://github.com/moment/moment/issues/1813): fix moment().lang([key]) incompatibility + +### 2.8.0 [See changelog](https://gist.github.com/ichernev/ac3899324a5fa6c8c9b4) + +- Release July 31, 2014 + +* incompatible changes + * [#1761](https://github.com/moment/moment/issues/1761): moments created without a language are no longer following the global language, in case it changes. Only newly created moments take the global language by default. In case you're affected by this, wait, comment on [#1797](https://github.com/moment/moment/issues/1797) and wait for a proper reimplementation + * [#1642](https://github.com/moment/moment/issues/1642): 45 days is no longer "a month" according to humanize, cutoffs for month, and year have changed. Hopefully your code does not depend on a particular answer from humanize (which it shouldn't anyway) + * [#1784](https://github.com/moment/moment/issues/1784): if you use the human readable English datetime format in a weird way (like storing them in a database) that would break when the format changes you're at risk. + +* deprecations (old behavior will be dropped in 3.0) + * [#1761](https://github.com/moment/moment/issues/1761) `lang` is renamed to `locale`, `langData` -> `localeData`. Also there is now `defineLocale` that should be used when creating new locales + * [#1763](https://github.com/moment/moment/issues/1763) `add(unit, value)` and `subtract(unit, value)` are now deprecated. Use `add(value, unit)` and `subtract(value, unit)` instead. + * [#1759](https://github.com/moment/moment/issues/1759) rename `duration.toIsoString` to `duration.toISOString`. The js standard library and moment's `toISOString` follow that convention. + +* new locales + * [#1789](https://github.com/moment/moment/issues/1789) Tibetan (bo) + * [#1786](https://github.com/moment/moment/issues/1786) Africaans (af) + * [#1778](https://github.com/moment/moment/issues/1778) Burmese (my) + * [#1727](https://github.com/moment/moment/issues/1727) Belarusian (be) + +* bugfixes, locale bugfixes, performance improvements, features + +### 2.7.0 [See changelog](https://gist.github.com/ichernev/b0a3d456d5a84c9901d7) + +- Release June 12, 2014 + +* new languages + + * [#1678](https://github.com/moment/moment/issues/1678) Bengali (bn) + * [#1628](https://github.com/moment/moment/issues/1628) Azerbaijani (az) + * [#1633](https://github.com/moment/moment/issues/1633) Arabic, Saudi Arabia (ar-sa) + * [#1648](https://github.com/moment/moment/issues/1648) Austrian German (de-at) + +* features + + * [#1663](https://github.com/moment/moment/issues/1663) configurable relative time thresholds + * [#1554](https://github.com/moment/moment/issues/1554) support anchor time in moment.calendar + * [#1693](https://github.com/moment/moment/issues/1693) support moment.ISO_8601 as parsing format + * [#1637](https://github.com/moment/moment/issues/1637) add moment.min and moment.max and deprecate min/max instance methods + * [#1704](https://github.com/moment/moment/issues/1704) support string value in add/subtract + * [#1647](https://github.com/moment/moment/issues/1647) add spm support (package manager) + +* bugfixes + +### 2.6.0 [See changelog](https://gist.github.com/ichernev/10544682) + +- Release April 12 , 2014 + +* languages + * [#1529](https://github.com/moment/moment/issues/1529) Serbian-Cyrillic (sr-cyr) + * [#1544](https://github.com/moment/moment/issues/1544), [#1546](https://github.com/moment/moment/issues/1546) Khmer Cambodia (km) + +* features + * [#1419](https://github.com/moment/moment/issues/1419), [#1468](https://github.com/moment/moment/issues/1468), [#1467](https://github.com/moment/moment/issues/1467), [#1546](https://github.com/moment/moment/issues/1546) better handling of timezone-d moments around DST + * [#1462](https://github.com/moment/moment/issues/1462) add weeksInYear and isoWeeksInYear + * [#1475](https://github.com/moment/moment/issues/1475) support ordinal parsing + * [#1499](https://github.com/moment/moment/issues/1499) composer support + * [#1577](https://github.com/moment/moment/issues/1577), [#1604](https://github.com/moment/moment/issues/1604) put Date parsing in moment.createFromInputFallback so it can be properly deprecated and controlled in the future + * [#1545](https://github.com/moment/moment/issues/1545) extract two-digit year parsing in moment.parseTwoDigitYear, so it can be overwritten + * [#1590](https://github.com/moment/moment/issues/1590) (see [#1574](https://github.com/moment/moment/issues/1574)) set AMD global before module definition to better support non AMD module dependencies used in AMD environment + * [#1589](https://github.com/moment/moment/issues/1589) remove global in Node.JS environment (was not working before, nobody complained, was scheduled for removal anyway) + * [#1586](https://github.com/moment/moment/issues/1586) support quarter setting and parsing + +* 18 bugs fixed + +### 2.5.1 + +- Release January 22, 2014 + +* languages + * [#1392](https://github.com/moment/moment/issues/1392) Armenian (hy-am) + +* bugfixes + * [#1429](https://github.com/moment/moment/issues/1429) fixes [#1423](https://github.com/moment/moment/issues/1423) weird chrome-32 bug with js object creation + * [#1421](https://github.com/moment/moment/issues/1421) remove html entities from Welsh + * [#1418](https://github.com/moment/moment/issues/1418) fixes [#1401](https://github.com/moment/moment/issues/1401) improved non-padded tokens in strict matching + * [#1417](https://github.com/moment/moment/issues/1417) fixes [#1404](https://github.com/moment/moment/issues/1404) handle buggy moment object created by property cloning + * [#1398](https://github.com/moment/moment/issues/1398) fixes [#1397](https://github.com/moment/moment/issues/1397) fix Arabic-like week number parsing + * [#1396](https://github.com/moment/moment/issues/1396) add leftZeroFill(4) to GGGG and gggg formats + * [#1373](https://github.com/moment/moment/issues/1373) use lowercase for months and days in Catalan + +* testing + * [#1374](https://github.com/moment/moment/issues/1374) run tests on multiple browser/os combos via SauceLabs and Travis + +### 2.5.0 [See changelog](https://gist.github.com/ichernev/8104451) + +- Release Dec 24, 2013 + +* New languages + * Luxemburish (lb) [1247](https://github.com/moment/moment/issues/1247) + * Serbian (rs) [1319](https://github.com/moment/moment/issues/1319) + * Tamil (ta) [1324](https://github.com/moment/moment/issues/1324) + * Macedonian (mk) [1337](https://github.com/moment/moment/issues/1337) + +* Features + * [1311](https://github.com/moment/moment/issues/1311) Add quarter getter and format token `Q` + * [1303](https://github.com/moment/moment/issues/1303) strict parsing now respects number of digits per token (fix [1196](https://github.com/moment/moment/issues/1196)) + * 0d30bb7 add jspm support + * [1347](https://github.com/moment/moment/issues/1347) improve zone parsing + * [1362](https://github.com/moment/moment/issues/1362) support merideam parsing in Korean + +* 22 bugfixes + +### 2.4.0 + +- Release Oct 27, 2013 + +* **Deprecate** globally exported moment, will be removed in next major +* New languages + * Farose (fo) [#1206](https://github.com/moment/moment/issues/1206) + * Tagalog/Filipino (tl-ph) [#1197](https://github.com/moment/moment/issues/1197) + * Welsh (cy) [#1215](https://github.com/moment/moment/issues/1215) +* Bugfixes + * properly handle Z at the end of iso RegExp [#1187](https://github.com/moment/moment/issues/1187) + * chinese meridian time improvements [#1076](https://github.com/moment/moment/issues/1076) + * fix language tests [#1177](https://github.com/moment/moment/issues/1177) + * remove some failing tests (that should have never existed :)) + [#1185](https://github.com/moment/moment/issues/1185) + [#1183](https://github.com/moment/moment/issues/1183) + * handle russian noun cases in weird cases [#1195](https://github.com/moment/moment/issues/1195) + +### 2.3.1 + +- Release Oct 9, 2013 + +Removed a trailing comma [1169] and fixed a bug with `months`, `weekdays` getters [#1171](https://github.com/moment/moment/issues/1171). + +### 2.3.0 [See changelog](https://gist.github.com/ichernev/6864354) + +- Release Oct 7, 2013 + +Changed isValid, added strict parsing. +Week tokens parsing. + +### 2.2.1 + +- Release Sep 12, 2013 + +Fixed bug in string prototype test. +Updated authors and contributors. + +### 2.2.0 [See changelog](https://gist.github.com/ichernev/00f837a9baf46a3565e4) + +- Release Sep 11, 2013 + +Added bower support. + +Language files now use UMD. + +Creating moment defaults to current date/month/year. + +Added a bundle of moment and all language files. + +### 2.1.0 [See changelog](https://gist.github.com/timrwood/b8c2d90d528eddb53ab5) + +- Release Jul 8, 2013 + +Added better week support. + +Added ability to set offset with `moment#zone`. + +Added ability to set month or weekday from a string. + +Added `moment#min` and `moment#max` + +### 2.0.0 [See changelog](https://gist.github.com/timrwood/e72f2eef320ed9e37c51) + +- Release Feb 9, 2013 + +Added short form localized tokens. + +Added ability to define language a string should be parsed in. + +Added support for reversed add/subtract arguments. + +Added support for `endOf('week')` and `startOf('week')`. + +Fixed the logic for `moment#diff(Moment, 'months')` and `moment#diff(Moment, 'years')` + +`moment#diff` now floors instead of rounds. + +Normalized `moment#toString`. + +Added `isSame`, `isAfter`, and `isBefore` methods. + +Added better week support. + +Added `moment#toJSON` + +Bugfix: Fixed parsing of first century dates + +Bugfix: Parsing 10Sep2001 should work as expected + +Bugfix: Fixed weirdness with `moment.utc()` parsing. + +Changed language ordinal method to return the number + ordinal instead of just the ordinal. + +Changed two digit year parsing cutoff to match strptime. + +Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`. + +Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`. + +Removed the lang data objects from the top level namespace. + +Duplicate `Date` passed to `moment()` instead of referencing it. + +### 1.7.2 [See discussion](https://github.com/timrwood/moment/issues/456) + +- Release Oct 2, 2012 + +Bugfixes + +### 1.7.1 [See discussion](https://github.com/timrwood/moment/issues/384) + +- Release Oct 1, 2012 + +Bugfixes + +### 1.7.0 [See discussion](https://github.com/timrwood/moment/issues/288) + +- Release Jul 26, 2012 + +Added `moment.fn.endOf()` and `moment.fn.startOf()`. + +Added validation via `moment.fn.isValid()`. + +Made formatting method 3x faster. http://jsperf.com/momentjs-cached-format-functions + +Add support for month/weekday callbacks in `moment.fn.format()` + +Added instance specific languages. + +Added two letter weekday abbreviations with the formatting token `dd`. + +Various language updates. + +Various bugfixes. + +### 1.6.0 [See discussion](https://github.com/timrwood/moment/pull/268) + +- Release Apr 26, 2012 + +Added Durations. + +Revamped parser to support parsing non-separated strings (YYYYMMDD vs YYYY-MM-DD). + +Added support for millisecond parsing and formatting tokens (S SS SSS) + +Added a getter for `moment.lang()` + +Various bugfixes. + +There are a few things deprecated in the 1.6.0 release. + +1. The format tokens `z` and `zz` (timezone abbreviations like EST CST MST etc) will no longer be supported. Due to inconsistent browser support, we are unable to consistently produce this value. See [this issue](https://github.com/timrwood/moment/issues/162) for more background. + +2. The method `moment.fn.native` is deprecated in favor of `moment.fn.toDate`. There continue to be issues with Google Closure Compiler throwing errors when using `native`, even in valid instances. + +3. The way to customize am/pm strings is being changed. This would only affect you if you created a custom language file. For more information, see [this issue](https://github.com/timrwood/moment/pull/222). + +### 1.5.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=10&page=1&state=closed) + +- Release Mar 20, 2012 + +Added UTC mode. + +Added automatic ISO8601 parsing. + +Various bugfixes. + +### 1.4.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=8&state=closed) + +- Release Feb 4, 2012 + +Added `moment.fn.toDate` as a replacement for `moment.fn.native`. + +Added `moment.fn.sod` and `moment.fn.eod` to get the start and end of day. + +Various bugfixes. + +### 1.3.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=7&state=closed) + +- Release Jan 5, 2012 + +Added support for parsing month names in the current language. + +Added escape blocks for parsing tokens. + +Added `moment.fn.calendar` to format strings like 'Today 2:30 PM', 'Tomorrow 1:25 AM', and 'Last Sunday 4:30 AM'. + +Added `moment.fn.day` as a setter. + +Various bugfixes + +### 1.2.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=4&state=closed) + +- Release Dec 7, 2011 + +Added timezones to parser and formatter. + +Added `moment.fn.isDST`. + +Added `moment.fn.zone` to get the timezone offset in minutes. + +### 1.1.2 [See milestone](https://github.com/timrwood/moment/issues?milestone=6&state=closed) + +- Release Nov 18, 2011 + +Various bugfixes + +### 1.1.1 [See milestone](https://github.com/timrwood/moment/issues?milestone=5&state=closed) + +- Release Nov 12, 2011 + +Added time specific diffs (months, days, hours, etc) + +### 1.1.0 + +- Release Oct 28, 2011 + +Added `moment.fn.format` localized masks. 'L LL LLL LLLL' [issue 29](https://github.com/timrwood/moment/pull/29) + +Fixed [issue 31](https://github.com/timrwood/moment/pull/31). + +### 1.0.1 + +- Release Oct 18, 2011 + +Added `moment.version` to get the current version. + +Removed `window !== undefined` when checking if module exists to support browserify. [issue 25](https://github.com/timrwood/moment/pull/25) + +### 1.0.0 + +- Release + +Added convenience methods for getting and setting date parts. + +Added better support for `moment.add()`. + +Added better lang support in NodeJS. + +Renamed library from underscore.date to Moment.js + +### 0.6.1 + +- Release Oct 12, 2011 + +Added Portuguese, Italian, and French language support + +### 0.6.0 + +- Release Sep 21, 2011 + +Added _date.lang() support. +Added support for passing multiple formats to try to parse a date. _date("07-10-1986", ["MM-DD-YYYY", "YYYY-MM-DD"]); +Made parse from string and single format 25% faster. + +### 0.5.2 + +- Release Jul 11, 2011 + +Bugfix for [issue 8](https://github.com/timrwood/underscore.date/pull/8) and [issue 9](https://github.com/timrwood/underscore.date/pull/9). + +### 0.5.1 + +- Release Jun 17, 2011 + +Bugfix for [issue 5](https://github.com/timrwood/underscore.date/pull/5). + +### 0.5.0 + +- Release Jun 13, 2011 + +Dropped the redundant `_date.date()` in favor of `_date()`. +Removed `_date.now()`, as it is a duplicate of `_date()` with no parameters. +Removed `_date.isLeapYear(yearNumber)`. Use `_date([yearNumber]).isLeapYear()` instead. +Exposed customization options through the `_date.relativeTime`, `_date.weekdays`, `_date.weekdaysShort`, `_date.months`, `_date.monthsShort`, and `_date.ordinal` variables instead of the `_date.customize()` function. + +### 0.4.1 + +- Release May 9, 2011 + +Added date input formats for input strings. + +### 0.4.0 + +- Release May 9, 2011 + +Added underscore.date to npm. Removed dependencies on underscore. + +### 0.3.2 + +- Release Apr 9, 2011 + +Added `'z'` and `'zz'` to `_.date().format()`. Cleaned up some redundant code to trim off some bytes. + +### 0.3.1 + +- Release Mar 25, 2011 + +Cleaned up the namespace. Moved all date manipulation and display functions to the _.date() object. + +### 0.3.0 + +- Release Mar 25, 2011 + +Switched to the Underscore methodology of not mucking with the native objects' prototypes. +Made chaining possible. + +### 0.2.1 + +- Release + +Changed date names to be a more pseudo standardized 'dddd, MMMM Do YYYY, h:mm:ss a'. +Added `Date.prototype` functions `add`, `subtract`, `isdst`, and `isleapyear`. + +### 0.2.0 + +- Release + +Changed function names to be more concise. +Changed date format from php date format to custom format. + +### 0.1.0 + +- Release + +Initial release + diff --git a/node_modules/moment/LICENSE b/node_modules/moment/LICENSE new file mode 100644 index 0000000..8618b73 --- /dev/null +++ b/node_modules/moment/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/moment/README.md b/node_modules/moment/README.md new file mode 100644 index 0000000..c45e9d6 --- /dev/null +++ b/node_modules/moment/README.md @@ -0,0 +1,58 @@ +[![Join the chat at https://gitter.im/moment/moment](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/moment/moment?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +[![NPM version][npm-version-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![MIT License][license-image]][license-url] [![Build Status][travis-image]][travis-url] +[![Coverage Status](https://coveralls.io/repos/moment/moment/badge.svg?branch=develop)](https://coveralls.io/r/moment/moment?branch=develop) + +A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates. + +**[Documentation](http://momentjs.com/docs/)** + +## Port to ECMAScript 6 (version 2.10.0) + +Moment 2.10.0 does not bring any new features, but the code is now written in +ECMAScript 6 modules and placed inside `src/`. Previously `moment.js`, `locale/*.js` and +`test/moment/*.js`, `test/locale/*.js` contained the source of the project. Now +the source is in `src/`, temporary build (ECMAScript 5) files are placed under +`build/umd/` (for running tests during development), and the `moment.js` and +`locale/*.js` files are updated only on release. + +If you want to use a particular revision of the code, make sure to run +`grunt transpile update-index`, so `moment.js` and `locales/*.js` are synced +with `src/*`. We might place that in a commit hook in the future. + +## Upgrading to 2.0.0 + +There are a number of small backwards incompatible changes with version 2.0.0. [See the full descriptions here](https://gist.github.com/timrwood/e72f2eef320ed9e37c51#backwards-incompatible-changes) + + * Changed language ordinal method to return the number + ordinal instead of just the ordinal. + + * Changed two digit year parsing cutoff to match strptime. + + * Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`. + + * Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`. + + * Removed the lang data objects from the top level namespace. + + * Duplicate `Date` passed to `moment()` instead of referencing it. + +## [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) + +## [Contributing](https://github.com/moment/moment/blob/develop/CONTRIBUTING.md) + +We're looking for co-maintainers! If you want to become a master of time please +write to [ichernev](https://github.com/ichernev). + +## License + +Moment.js is freely distributable under the terms of the [MIT license](https://github.com/moment/moment/blob/develop/LICENSE). + +[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat +[license-url]: LICENSE + +[npm-url]: https://npmjs.org/package/moment +[npm-version-image]: http://img.shields.io/npm/v/moment.svg?style=flat +[npm-downloads-image]: http://img.shields.io/npm/dm/moment.svg?style=flat + +[travis-url]: http://travis-ci.org/moment/moment +[travis-image]: http://img.shields.io/travis/moment/moment/develop.svg?style=flat diff --git a/node_modules/moment/ender.js b/node_modules/moment/ender.js new file mode 100644 index 0000000..71462a7 --- /dev/null +++ b/node_modules/moment/ender.js @@ -0,0 +1 @@ +$.ender({ moment: require('moment') }) diff --git a/node_modules/moment/locale/af.js b/node_modules/moment/locale/af.js new file mode 100644 index 0000000..a89257f --- /dev/null +++ b/node_modules/moment/locale/af.js @@ -0,0 +1,73 @@ +//! moment.js locale configuration +//! locale : Afrikaans [af] +//! author : Werner Mollentze : https://github.com/wernerm + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var af = moment.defineLocale('af', { + months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), + weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM : function (input) { + return /^nm$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Vandag om] LT', + nextDay : '[Môre om] LT', + nextWeek : 'dddd [om] LT', + lastDay : '[Gister om] LT', + lastWeek : '[Laas] dddd [om] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'oor %s', + past : '%s gelede', + s : '\'n paar sekondes', + m : '\'n minuut', + mm : '%d minute', + h : '\'n uur', + hh : '%d ure', + d : '\'n dag', + dd : '%d dae', + M : '\'n maand', + MM : '%d maande', + y : '\'n jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week : { + dow : 1, // Maandag is die eerste dag van die week. + doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + } +}); + +return af; + +}))); diff --git a/node_modules/moment/locale/ar-dz.js b/node_modules/moment/locale/ar-dz.js new file mode 100644 index 0000000..f394594 --- /dev/null +++ b/node_modules/moment/locale/ar-dz.js @@ -0,0 +1,59 @@ +//! moment.js locale configuration +//! locale : Arabic (Algeria) [ar-dz] +//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var arDz = moment.defineLocale('ar-dz', { + months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 4 // The week that contains Jan 1st is the first week of the year. + } +}); + +return arDz; + +}))); diff --git a/node_modules/moment/locale/ar-kw.js b/node_modules/moment/locale/ar-kw.js new file mode 100644 index 0000000..93c7dd5 --- /dev/null +++ b/node_modules/moment/locale/ar-kw.js @@ -0,0 +1,59 @@ +//! moment.js locale configuration +//! locale : Arabic (Kuwait) [ar-kw] +//! author : Nusret Parlak: https://github.com/nusretparlak + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var arKw = moment.defineLocale('ar-kw', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return arKw; + +}))); diff --git a/node_modules/moment/locale/ar-ly.js b/node_modules/moment/locale/ar-ly.js new file mode 100644 index 0000000..7180ed4 --- /dev/null +++ b/node_modules/moment/locale/ar-ly.js @@ -0,0 +1,126 @@ +//! moment.js locale configuration +//! locale : Arabic (Lybia) [ar-ly] +//! author : Ali Hmer: https://github.com/kikoanis + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0' +}; +var pluralForm = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}; +var plurals = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}; +var pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}; +var months = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر' +]; + +var arLy = moment.defineLocale('ar-ly', { + months : months, + monthsShort : months, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize('s'), + m : pluralize('m'), + mm : pluralize('m'), + h : pluralize('h'), + hh : pluralize('h'), + d : pluralize('d'), + dd : pluralize('d'), + M : pluralize('M'), + MM : pluralize('M'), + y : pluralize('y'), + yy : pluralize('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return arLy; + +}))); diff --git a/node_modules/moment/locale/ar-ma.js b/node_modules/moment/locale/ar-ma.js new file mode 100644 index 0000000..cbd810b --- /dev/null +++ b/node_modules/moment/locale/ar-ma.js @@ -0,0 +1,60 @@ +//! moment.js locale configuration +//! locale : Arabic (Morocco) [ar-ma] +//! author : ElFadili Yassine : https://github.com/ElFadiliY +//! author : Abdel Said : https://github.com/abdelsaid + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var arMa = moment.defineLocale('ar-ma', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return arMa; + +}))); diff --git a/node_modules/moment/locale/ar-sa.js b/node_modules/moment/locale/ar-sa.js new file mode 100644 index 0000000..dccd0d8 --- /dev/null +++ b/node_modules/moment/locale/ar-sa.js @@ -0,0 +1,105 @@ +//! moment.js locale configuration +//! locale : Arabic (Saudi Arabia) [ar-sa] +//! author : Suhail Alkowaileet : https://github.com/xsoh + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' +}; +var numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; + +var arSa = moment.defineLocale('ar-sa', { + months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + preparse: function (string) { + return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return arSa; + +}))); diff --git a/node_modules/moment/locale/ar-tn.js b/node_modules/moment/locale/ar-tn.js new file mode 100644 index 0000000..5f0d38b --- /dev/null +++ b/node_modules/moment/locale/ar-tn.js @@ -0,0 +1,59 @@ +//! moment.js locale configuration +//! locale : Arabic (Tunisia) [ar-tn] +//! author : Nader Toukabri : https://github.com/naderio + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var arTn = moment.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return arTn; + +}))); diff --git a/node_modules/moment/locale/ar.js b/node_modules/moment/locale/ar.js new file mode 100644 index 0000000..d263e4c --- /dev/null +++ b/node_modules/moment/locale/ar.js @@ -0,0 +1,142 @@ +//! moment.js locale configuration +//! locale : Arabic [ar] +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' +}; +var numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; +var pluralForm = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}; +var plurals = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}; +var pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}; +var months = [ + 'كانون الثاني يناير', + 'شباط فبراير', + 'آذار مارس', + 'نيسان أبريل', + 'أيار مايو', + 'حزيران يونيو', + 'تموز يوليو', + 'آب أغسطس', + 'أيلول سبتمبر', + 'تشرين الأول أكتوبر', + 'تشرين الثاني نوفمبر', + 'كانون الأول ديسمبر' +]; + +var ar = moment.defineLocale('ar', { + months : months, + monthsShort : months, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize('s'), + m : pluralize('m'), + mm : pluralize('m'), + h : pluralize('h'), + hh : pluralize('h'), + d : pluralize('d'), + dd : pluralize('d'), + M : pluralize('M'), + MM : pluralize('M'), + y : pluralize('y'), + yy : pluralize('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return ar; + +}))); diff --git a/node_modules/moment/locale/az.js b/node_modules/moment/locale/az.js new file mode 100644 index 0000000..56021b4 --- /dev/null +++ b/node_modules/moment/locale/az.js @@ -0,0 +1,105 @@ +//! moment.js locale configuration +//! locale : Azerbaijani [az] +//! author : topchiyev : https://github.com/topchiyev + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı' +}; + +var az = moment.defineLocale('az', { + months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), + monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), + weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[sabah saat] LT', + nextWeek : '[gələn həftə] dddd [saat] LT', + lastDay : '[dünən] LT', + lastWeek : '[keçən həftə] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s əvvəl', + s : 'birneçə saniyyə', + m : 'bir dəqiqə', + mm : '%d dəqiqə', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir il', + yy : '%d il' + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM : function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return az; + +}))); diff --git a/node_modules/moment/locale/be.js b/node_modules/moment/locale/be.js new file mode 100644 index 0000000..83025fd --- /dev/null +++ b/node_modules/moment/locale/be.js @@ -0,0 +1,134 @@ +//! moment.js locale configuration +//! locale : Belarusian [be] +//! author : Dmitry Demidov : https://github.com/demidov91 +//! author: Praleska: http://praleska.pro/ +//! Author : Menelion Elensúle : https://github.com/Oire + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + 'dd': 'дзень_дні_дзён', + 'MM': 'месяц_месяцы_месяцаў', + 'yy': 'год_гады_гадоў' + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } + else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} + +var be = moment.defineLocale('be', { + months : { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_') + }, + monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), + weekdays : { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'), + isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/ + }, + weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'праз %s', + past : '%s таму', + s : 'некалькі секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : relativeTimeWithPlural, + hh : relativeTimeWithPlural, + d : 'дзень', + dd : relativeTimeWithPlural, + M : 'месяц', + MM : relativeTimeWithPlural, + y : 'год', + yy : relativeTimeWithPlural + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM : function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return be; + +}))); diff --git a/node_modules/moment/locale/bg.js b/node_modules/moment/locale/bg.js new file mode 100644 index 0000000..ee06d19 --- /dev/null +++ b/node_modules/moment/locale/bg.js @@ -0,0 +1,90 @@ +//! moment.js locale configuration +//! locale : Bulgarian [bg] +//! author : Krasen Borisov : https://github.com/kraz + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var bg = moment.defineLocale('bg', { + months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'), + weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Днес в] LT', + nextDay : '[Утре в] LT', + nextWeek : 'dddd [в] LT', + lastDay : '[Вчера в] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'след %s', + past : 'преди %s', + s : 'няколко секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дни', + M : 'месец', + MM : '%d месеца', + y : 'година', + yy : '%d години' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return bg; + +}))); diff --git a/node_modules/moment/locale/bn.js b/node_modules/moment/locale/bn.js new file mode 100644 index 0000000..b6f942a --- /dev/null +++ b/node_modules/moment/locale/bn.js @@ -0,0 +1,119 @@ +//! moment.js locale configuration +//! locale : Bengali [bn] +//! author : Kaushik Gandhi : https://github.com/kaushikgandhi + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০' +}; +var numberMap = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' +}; + +var bn = moment.defineLocale('bn', { + months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), + monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'), + weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'), + weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'), + longDateFormat : { + LT : 'A h:mm সময়', + LTS : 'A h:mm:ss সময়', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm সময়', + LLLL : 'dddd, D MMMM YYYY, A h:mm সময়' + }, + calendar : { + sameDay : '[আজ] LT', + nextDay : '[আগামীকাল] LT', + nextWeek : 'dddd, LT', + lastDay : '[গতকাল] LT', + lastWeek : '[গত] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s পরে', + past : '%s আগে', + s : 'কয়েক সেকেন্ড', + m : 'এক মিনিট', + mm : '%d মিনিট', + h : 'এক ঘন্টা', + hh : '%d ঘন্টা', + d : 'এক দিন', + dd : '%d দিন', + M : 'এক মাস', + MM : '%d মাস', + y : 'এক বছর', + yy : '%d বছর' + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return bn; + +}))); diff --git a/node_modules/moment/locale/bo.js b/node_modules/moment/locale/bo.js new file mode 100644 index 0000000..eb6db47 --- /dev/null +++ b/node_modules/moment/locale/bo.js @@ -0,0 +1,119 @@ +//! moment.js locale configuration +//! locale : Tibetan [bo] +//! author : Thupten N. Chakrishar : https://github.com/vajradog + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠' +}; +var numberMap = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0' +}; + +var bo = moment.defineLocale('bo', { + months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'), + weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[དི་རིང] LT', + nextDay : '[སང་ཉིན] LT', + nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay : '[ཁ་སང] LT', + lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ལ་', + past : '%s སྔན་ལ', + s : 'ལམ་སང', + m : 'སྐར་མ་གཅིག', + mm : '%d སྐར་མ', + h : 'ཆུ་ཚོད་གཅིག', + hh : '%d ཆུ་ཚོད', + d : 'ཉིན་གཅིག', + dd : '%d ཉིན་', + M : 'ཟླ་བ་གཅིག', + MM : '%d ཟླ་བ', + y : 'ལོ་གཅིག', + yy : '%d ལོ' + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return bo; + +}))); diff --git a/node_modules/moment/locale/br.js b/node_modules/moment/locale/br.js new file mode 100644 index 0000000..7233063 --- /dev/null +++ b/node_modules/moment/locale/br.js @@ -0,0 +1,108 @@ +//! moment.js locale configuration +//! locale : Breton [br] +//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + 'mm': 'munutenn', + 'MM': 'miz', + 'dd': 'devezh' + }; + return number + ' ' + mutation(format[key], number); +} +function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } +} +function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; +} +function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; +} +function softMutation(text) { + var mutationTable = { + 'm': 'v', + 'b': 'v', + 'd': 'z' + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); +} + +var br = moment.defineLocale('br', { + months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), + monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h[e]mm A', + LTS : 'h[e]mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [a viz] MMMM YYYY', + LLL : 'D [a viz] MMMM YYYY h[e]mm A', + LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A' + }, + calendar : { + sameDay : '[Hiziv da] LT', + nextDay : '[Warc\'hoazh da] LT', + nextWeek : 'dddd [da] LT', + lastDay : '[Dec\'h da] LT', + lastWeek : 'dddd [paset da] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'a-benn %s', + past : '%s \'zo', + s : 'un nebeud segondennoù', + m : 'ur vunutenn', + mm : relativeTimeWithMutation, + h : 'un eur', + hh : '%d eur', + d : 'un devezh', + dd : relativeTimeWithMutation, + M : 'ur miz', + MM : relativeTimeWithMutation, + y : 'ur bloaz', + yy : specialMutationForYears + }, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, + ordinal : function (number) { + var output = (number === 1) ? 'añ' : 'vet'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return br; + +}))); diff --git a/node_modules/moment/locale/bs.js b/node_modules/moment/locale/bs.js new file mode 100644 index 0000000..760a786 --- /dev/null +++ b/node_modules/moment/locale/bs.js @@ -0,0 +1,143 @@ +//! moment.js locale configuration +//! locale : Bosnian [bs] +//! author : Nedim Cholich : https://github.com/frontyard +//! based on (hr) translation by Bojan Marković + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +var bs = moment.defineLocale('bs', { + months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : 'dan', + dd : translate, + M : 'mjesec', + MM : translate, + y : 'godinu', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return bs; + +}))); diff --git a/node_modules/moment/locale/ca.js b/node_modules/moment/locale/ca.js new file mode 100644 index 0000000..bc490a2 --- /dev/null +++ b/node_modules/moment/locale/ca.js @@ -0,0 +1,88 @@ +//! moment.js locale configuration +//! locale : Catalan [ca] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var ca = moment.defineLocale('ca', { + months : { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), + format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'), + isFormat: /D[oD]?(\s)+MMMM/ + }, + monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), + weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : '[el] D MMMM [de] YYYY', + ll : 'D MMM YYYY', + LLL : '[el] D MMMM [de] YYYY [a les] H:mm', + lll : 'D MMM YYYY, H:mm', + LLLL : '[el] dddd D MMMM [de] YYYY [a les] H:mm', + llll : 'ddd D MMM YYYY, H:mm' + }, + calendar : { + sameDay : function () { + return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextDay : function () { + return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastDay : function () { + return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'd\'aquí %s', + past : 'fa %s', + s : 'uns segons', + m : 'un minut', + mm : '%d minuts', + h : 'una hora', + hh : '%d hores', + d : 'un dia', + dd : '%d dies', + M : 'un mes', + MM : '%d mesos', + y : 'un any', + yy : '%d anys' + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal : function (number, period) { + var output = (number === 1) ? 'r' : + (number === 2) ? 'n' : + (number === 3) ? 'r' : + (number === 4) ? 't' : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return ca; + +}))); diff --git a/node_modules/moment/locale/cs.js b/node_modules/moment/locale/cs.js new file mode 100644 index 0000000..952dc49 --- /dev/null +++ b/node_modules/moment/locale/cs.js @@ -0,0 +1,172 @@ +//! moment.js locale configuration +//! locale : Czech [cs] +//! author : petrbela : https://github.com/petrbela + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'); +var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'); +function plural(n) { + return (n > 1) && (n < 5) && (~~(n / 10) !== 1); +} +function translate(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + break; + } +} + +var cs = moment.defineLocale('cs', { + months : months, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months, monthsShort)), + shortMonthsParse : (function (monthsShort) { + var i, _shortMonthsParse = []; + for (i = 0; i < 12; i++) { + _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i'); + } + return _shortMonthsParse; + }(monthsShort)), + longMonthsParse : (function (months) { + var i, _longMonthsParse = []; + for (i = 0; i < 12; i++) { + _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i'); + } + return _longMonthsParse; + }(months)), + weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm', + l : 'D. M. YYYY' + }, + calendar : { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'před %s', + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse : /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return cs; + +}))); diff --git a/node_modules/moment/locale/cv.js b/node_modules/moment/locale/cv.js new file mode 100644 index 0000000..6d20779 --- /dev/null +++ b/node_modules/moment/locale/cv.js @@ -0,0 +1,63 @@ +//! moment.js locale configuration +//! locale : Chuvash [cv] +//! author : Anatoly Mironov : https://github.com/mirontoli + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var cv = moment.defineLocale('cv', { + months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'), + monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'), + weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm' + }, + calendar : { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L' + }, + relativeTime : { + future : function (output) { + var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран'; + return output + affix; + }, + past : '%s каялла', + s : 'пӗр-ик ҫеккунт', + m : 'пӗр минут', + mm : '%d минут', + h : 'пӗр сехет', + hh : '%d сехет', + d : 'пӗр кун', + dd : '%d кун', + M : 'пӗр уйӑх', + MM : '%d уйӑх', + y : 'пӗр ҫул', + yy : '%d ҫул' + }, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, + ordinal : '%d-мӗш', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return cv; + +}))); diff --git a/node_modules/moment/locale/cy.js b/node_modules/moment/locale/cy.js new file mode 100644 index 0000000..c570c22 --- /dev/null +++ b/node_modules/moment/locale/cy.js @@ -0,0 +1,81 @@ +//! moment.js locale configuration +//! locale : Welsh [cy] +//! author : Robert Allen : https://github.com/robgallen +//! author : https://github.com/ryangreaves + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var cy = moment.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact : true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd' + }, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed + 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return cy; + +}))); diff --git a/node_modules/moment/locale/da.js b/node_modules/moment/locale/da.js new file mode 100644 index 0000000..357d870 --- /dev/null +++ b/node_modules/moment/locale/da.js @@ -0,0 +1,60 @@ +//! moment.js locale configuration +//! locale : Danish [da] +//! author : Ulrik Nielsen : https://github.com/mrbase + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var da = moment.defineLocale('da', { + months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay : '[i dag kl.] LT', + nextDay : '[i morgen kl.] LT', + nextWeek : 'på dddd [kl.] LT', + lastDay : '[i går kl.] LT', + lastWeek : '[i] dddd[s kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'få sekunder', + m : 'et minut', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dage', + M : 'en måned', + MM : '%d måneder', + y : 'et år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return da; + +}))); diff --git a/node_modules/moment/locale/de-at.js b/node_modules/moment/locale/de-at.js new file mode 100644 index 0000000..aee7b8c --- /dev/null +++ b/node_modules/moment/locale/de-at.js @@ -0,0 +1,79 @@ +//! moment.js locale configuration +//! locale : German (Austria) [de-at] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Martin Groller : https://github.com/MadMG +//! author : Mikolaj Dadela : https://github.com/mik01aj + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +var deAt = moment.defineLocale('de-at', { + months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return deAt; + +}))); diff --git a/node_modules/moment/locale/de-ch.js b/node_modules/moment/locale/de-ch.js new file mode 100644 index 0000000..e70f5e9 --- /dev/null +++ b/node_modules/moment/locale/de-ch.js @@ -0,0 +1,78 @@ +//! moment.js locale configuration +//! locale : German (Switzerland) [de-ch] +//! author : sschueller : https://github.com/sschueller + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de# + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +var deCh = moment.defineLocale('de-ch', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH.mm', + LLLL : 'dddd, D. MMMM YYYY HH.mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return deCh; + +}))); diff --git a/node_modules/moment/locale/de.js b/node_modules/moment/locale/de.js new file mode 100644 index 0000000..a3263e8 --- /dev/null +++ b/node_modules/moment/locale/de.js @@ -0,0 +1,78 @@ +//! moment.js locale configuration +//! locale : German [de] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Mikolaj Dadela : https://github.com/mik01aj + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +var de = moment.defineLocale('de', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return de; + +}))); diff --git a/node_modules/moment/locale/dv.js b/node_modules/moment/locale/dv.js new file mode 100644 index 0000000..065df78 --- /dev/null +++ b/node_modules/moment/locale/dv.js @@ -0,0 +1,100 @@ +//! moment.js locale configuration +//! locale : Maldivian [dv] +//! author : Jawish Hameed : https://github.com/jawish + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var months = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު' +]; +var weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު' +]; + +var dv = moment.defineLocale('dv', { + months : months, + monthsShort : months, + weekdays : weekdays, + weekdaysShort : weekdays, + weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat : { + + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/M/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /މކ|މފ/, + isPM : function (input) { + return 'މފ' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar : { + sameDay : '[މިއަދު] LT', + nextDay : '[މާދަމާ] LT', + nextWeek : 'dddd LT', + lastDay : '[އިއްޔެ] LT', + lastWeek : '[ފާއިތުވި] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ތެރޭގައި %s', + past : 'ކުރިން %s', + s : 'ސިކުންތުކޮޅެއް', + m : 'މިނިޓެއް', + mm : 'މިނިޓު %d', + h : 'ގަޑިއިރެއް', + hh : 'ގަޑިއިރު %d', + d : 'ދުވަހެއް', + dd : 'ދުވަސް %d', + M : 'މަހެއް', + MM : 'މަސް %d', + y : 'އަހަރެއް', + yy : 'އަހަރު %d' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 7, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return dv; + +}))); diff --git a/node_modules/moment/locale/el.js b/node_modules/moment/locale/el.js new file mode 100644 index 0000000..bf3f4c9 --- /dev/null +++ b/node_modules/moment/locale/el.js @@ -0,0 +1,100 @@ +//! moment.js locale configuration +//! locale : Greek [el] +//! author : Aggelos Karalias : https://github.com/mehiel + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + +function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; +} + + +var el = moment.defineLocale('el', { + monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), + monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'), + months : function (momentToFormat, format) { + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), + weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM : function (input) { + return ((input + '').toLowerCase()[0] === 'μ'); + }, + meridiemParse : /[ΠΜ]\.?Μ?\.?/i, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendarEl : { + sameDay : '[Σήμερα {}] LT', + nextDay : '[Αύριο {}] LT', + nextWeek : 'dddd [{}] LT', + lastDay : '[Χθες {}] LT', + lastWeek : function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction(output)) { + output = output.apply(mom); + } + return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις')); + }, + relativeTime : { + future : 'σε %s', + past : '%s πριν', + s : 'λίγα δευτερόλεπτα', + m : 'ένα λεπτό', + mm : '%d λεπτά', + h : 'μία ώρα', + hh : '%d ώρες', + d : 'μία μέρα', + dd : '%d μέρες', + M : 'ένας μήνας', + MM : '%d μήνες', + y : 'ένας χρόνος', + yy : '%d χρόνια' + }, + dayOfMonthOrdinalParse: /\d{1,2}η/, + ordinal: '%dη', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4st is the first week of the year. + } +}); + +return el; + +}))); diff --git a/node_modules/moment/locale/en-au.js b/node_modules/moment/locale/en-au.js new file mode 100644 index 0000000..e8a8fdc --- /dev/null +++ b/node_modules/moment/locale/en-au.js @@ -0,0 +1,67 @@ +//! moment.js locale configuration +//! locale : English (Australia) [en-au] +//! author : Jared Morse : https://github.com/jarcoal + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var enAu = moment.defineLocale('en-au', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return enAu; + +}))); diff --git a/node_modules/moment/locale/en-ca.js b/node_modules/moment/locale/en-ca.js new file mode 100644 index 0000000..3629bf1 --- /dev/null +++ b/node_modules/moment/locale/en-ca.js @@ -0,0 +1,63 @@ +//! moment.js locale configuration +//! locale : English (Canada) [en-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var enCa = moment.defineLocale('en-ca', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'YYYY-MM-DD', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); + +return enCa; + +}))); diff --git a/node_modules/moment/locale/en-gb.js b/node_modules/moment/locale/en-gb.js new file mode 100644 index 0000000..fe48a78 --- /dev/null +++ b/node_modules/moment/locale/en-gb.js @@ -0,0 +1,67 @@ +//! moment.js locale configuration +//! locale : English (United Kingdom) [en-gb] +//! author : Chris Gedrim : https://github.com/chrisgedrim + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var enGb = moment.defineLocale('en-gb', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return enGb; + +}))); diff --git a/node_modules/moment/locale/en-ie.js b/node_modules/moment/locale/en-ie.js new file mode 100644 index 0000000..bb0ccce --- /dev/null +++ b/node_modules/moment/locale/en-ie.js @@ -0,0 +1,67 @@ +//! moment.js locale configuration +//! locale : English (Ireland) [en-ie] +//! author : Chris Cartlidge : https://github.com/chriscartlidge + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var enIe = moment.defineLocale('en-ie', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return enIe; + +}))); diff --git a/node_modules/moment/locale/en-nz.js b/node_modules/moment/locale/en-nz.js new file mode 100644 index 0000000..7005231 --- /dev/null +++ b/node_modules/moment/locale/en-nz.js @@ -0,0 +1,67 @@ +//! moment.js locale configuration +//! locale : English (New Zealand) [en-nz] +//! author : Luke McGregor : https://github.com/lukemcgregor + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var enNz = moment.defineLocale('en-nz', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return enNz; + +}))); diff --git a/node_modules/moment/locale/eo.js b/node_modules/moment/locale/eo.js new file mode 100644 index 0000000..8001c83 --- /dev/null +++ b/node_modules/moment/locale/eo.js @@ -0,0 +1,73 @@ +//! moment.js locale configuration +//! locale : Esperanto [eo] +//! author : Colin Dean : https://github.com/colindean +//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia +//! comment : miestasmia corrected the translation by colindean + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var eo = moment.defineLocale('eo', { + months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'), + weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D[-a de] MMMM, YYYY', + LLL : 'D[-a de] MMMM, YYYY HH:mm', + LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm' + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar : { + sameDay : '[Hodiaŭ je] LT', + nextDay : '[Morgaŭ je] LT', + nextWeek : 'dddd [je] LT', + lastDay : '[Hieraŭ je] LT', + lastWeek : '[pasinta] dddd [je] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'post %s', + past : 'antaŭ %s', + s : 'sekundoj', + m : 'minuto', + mm : '%d minutoj', + h : 'horo', + hh : '%d horoj', + d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo + dd : '%d tagoj', + M : 'monato', + MM : '%d monatoj', + y : 'jaro', + yy : '%d jaroj' + }, + dayOfMonthOrdinalParse: /\d{1,2}a/, + ordinal : '%da', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return eo; + +}))); diff --git a/node_modules/moment/locale/es-do.js b/node_modules/moment/locale/es-do.js new file mode 100644 index 0000000..1af11ad --- /dev/null +++ b/node_modules/moment/locale/es-do.js @@ -0,0 +1,82 @@ +//! moment.js locale configuration +//! locale : Spanish (Dominican Republic) [es-do] + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +var esDo = moment.defineLocale('es-do', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY h:mm A', + LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return esDo; + +}))); diff --git a/node_modules/moment/locale/es.js b/node_modules/moment/locale/es.js new file mode 100644 index 0000000..c0dea59 --- /dev/null +++ b/node_modules/moment/locale/es.js @@ -0,0 +1,83 @@ +//! moment.js locale configuration +//! locale : Spanish [es] +//! author : Julio Napurí : https://github.com/julionc + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +var es = moment.defineLocale('es', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return es; + +}))); diff --git a/node_modules/moment/locale/et.js b/node_modules/moment/locale/et.js new file mode 100644 index 0000000..3a759e9 --- /dev/null +++ b/node_modules/moment/locale/et.js @@ -0,0 +1,80 @@ +//! moment.js locale configuration +//! locale : Estonian [et] +//! author : Henry Kehlmann : https://github.com/madhenry +//! improvements : Illimar Tambek : https://github.com/ragulka + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + 'm' : ['ühe minuti', 'üks minut'], + 'mm': [number + ' minuti', number + ' minutit'], + 'h' : ['ühe tunni', 'tund aega', 'üks tund'], + 'hh': [number + ' tunni', number + ' tundi'], + 'd' : ['ühe päeva', 'üks päev'], + 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], + 'MM': [number + ' kuu', number + ' kuud'], + 'y' : ['ühe aasta', 'aasta', 'üks aasta'], + 'yy': [number + ' aasta', number + ' aastat'] + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; +} + +var et = moment.defineLocale('et', { + months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), + monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), + weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), + weekdaysShort : 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin : 'P_E_T_K_N_R_L'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Täna,] LT', + nextDay : '[Homme,] LT', + nextWeek : '[Järgmine] dddd LT', + lastDay : '[Eile,] LT', + lastWeek : '[Eelmine] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s pärast', + past : '%s tagasi', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : '%d päeva', + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return et; + +}))); diff --git a/node_modules/moment/locale/eu.js b/node_modules/moment/locale/eu.js new file mode 100644 index 0000000..e2021cf --- /dev/null +++ b/node_modules/moment/locale/eu.js @@ -0,0 +1,66 @@ +//! moment.js locale configuration +//! locale : Basque [eu] +//! author : Eneko Illarramendi : https://github.com/eillarra + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var eu = moment.defineLocale('eu', { + months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), + monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), + monthsParseExact : true, + weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), + weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY[ko] MMMM[ren] D[a]', + LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l : 'YYYY-M-D', + ll : 'YYYY[ko] MMM D[a]', + lll : 'YYYY[ko] MMM D[a] HH:mm', + llll : 'ddd, YYYY[ko] MMM D[a] HH:mm' + }, + calendar : { + sameDay : '[gaur] LT[etan]', + nextDay : '[bihar] LT[etan]', + nextWeek : 'dddd LT[etan]', + lastDay : '[atzo] LT[etan]', + lastWeek : '[aurreko] dddd LT[etan]', + sameElse : 'L' + }, + relativeTime : { + future : '%s barru', + past : 'duela %s', + s : 'segundo batzuk', + m : 'minutu bat', + mm : '%d minutu', + h : 'ordu bat', + hh : '%d ordu', + d : 'egun bat', + dd : '%d egun', + M : 'hilabete bat', + MM : '%d hilabete', + y : 'urte bat', + yy : '%d urte' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return eu; + +}))); diff --git a/node_modules/moment/locale/fa.js b/node_modules/moment/locale/fa.js new file mode 100644 index 0000000..e6e5619 --- /dev/null +++ b/node_modules/moment/locale/fa.js @@ -0,0 +1,107 @@ +//! moment.js locale configuration +//! locale : Persian [fa] +//! author : Ebrahim Byagowi : https://github.com/ebraminio + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰' +}; +var numberMap = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0' +}; + +var fa = moment.defineLocale('fa', { + months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar : { + sameDay : '[امروز ساعت] LT', + nextDay : '[فردا ساعت] LT', + nextWeek : 'dddd [ساعت] LT', + lastDay : '[دیروز ساعت] LT', + lastWeek : 'dddd [پیش] [ساعت] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'در %s', + past : '%s پیش', + s : 'چند ثانیه', + m : 'یک دقیقه', + mm : '%d دقیقه', + h : 'یک ساعت', + hh : '%d ساعت', + d : 'یک روز', + dd : '%d روز', + M : 'یک ماه', + MM : '%d ماه', + y : 'یک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + dayOfMonthOrdinalParse: /\d{1,2}م/, + ordinal : '%dم', + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return fa; + +}))); diff --git a/node_modules/moment/locale/fi.js b/node_modules/moment/locale/fi.js new file mode 100644 index 0000000..3eeef5c --- /dev/null +++ b/node_modules/moment/locale/fi.js @@ -0,0 +1,107 @@ +//! moment.js locale configuration +//! locale : Finnish [fi] +//! author : Tarmo Aidantausta : https://github.com/bleadof + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '); +var numbersFuture = [ + 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', + numbersPast[7], numbersPast[8], numbersPast[9] + ]; +function translate(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; +} +function verbalNumber(number, isFuture) { + return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; +} + +var fi = moment.defineLocale('fi', { + months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), + monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), + weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), + weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'Do MMMM[ta] YYYY', + LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l : 'D.M.YYYY', + ll : 'Do MMM YYYY', + lll : 'Do MMM YYYY, [klo] HH.mm', + llll : 'ddd, Do MMM YYYY, [klo] HH.mm' + }, + calendar : { + sameDay : '[tänään] [klo] LT', + nextDay : '[huomenna] [klo] LT', + nextWeek : 'dddd [klo] LT', + lastDay : '[eilen] [klo] LT', + lastWeek : '[viime] dddd[na] [klo] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s päästä', + past : '%s sitten', + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return fi; + +}))); diff --git a/node_modules/moment/locale/fo.js b/node_modules/moment/locale/fo.js new file mode 100644 index 0000000..eec43bc --- /dev/null +++ b/node_modules/moment/locale/fo.js @@ -0,0 +1,60 @@ +//! moment.js locale configuration +//! locale : Faroese [fo] +//! author : Ragnar Johannesen : https://github.com/ragnar123 + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var fo = moment.defineLocale('fo', { + months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'), + weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D. MMMM, YYYY HH:mm' + }, + calendar : { + sameDay : '[Í dag kl.] LT', + nextDay : '[Í morgin kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[Í gjár kl.] LT', + lastWeek : '[síðstu] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'um %s', + past : '%s síðani', + s : 'fá sekund', + m : 'ein minutt', + mm : '%d minuttir', + h : 'ein tími', + hh : '%d tímar', + d : 'ein dagur', + dd : '%d dagar', + M : 'ein mánaði', + MM : '%d mánaðir', + y : 'eitt ár', + yy : '%d ár' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return fo; + +}))); diff --git a/node_modules/moment/locale/fr-ca.js b/node_modules/moment/locale/fr-ca.js new file mode 100644 index 0000000..49e61d2 --- /dev/null +++ b/node_modules/moment/locale/fr-ca.js @@ -0,0 +1,74 @@ +//! moment.js locale configuration +//! locale : French (Canada) [fr-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var frCa = moment.defineLocale('fr-ca', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + } +}); + +return frCa; + +}))); diff --git a/node_modules/moment/locale/fr-ch.js b/node_modules/moment/locale/fr-ch.js new file mode 100644 index 0000000..38bf858 --- /dev/null +++ b/node_modules/moment/locale/fr-ch.js @@ -0,0 +1,78 @@ +//! moment.js locale configuration +//! locale : French (Switzerland) [fr-ch] +//! author : Gaspard Bucher : https://github.com/gaspard + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var frCh = moment.defineLocale('fr-ch', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return frCh; + +}))); diff --git a/node_modules/moment/locale/fr.js b/node_modules/moment/locale/fr.js new file mode 100644 index 0000000..7e4cfbc --- /dev/null +++ b/node_modules/moment/locale/fr.js @@ -0,0 +1,83 @@ +//! moment.js locale configuration +//! locale : French [fr] +//! author : John Fischer : https://github.com/jfroffice + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var fr = moment.defineLocale('fr', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal : function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return fr; + +}))); diff --git a/node_modules/moment/locale/fy.js b/node_modules/moment/locale/fy.js new file mode 100644 index 0000000..2ed7d5b --- /dev/null +++ b/node_modules/moment/locale/fy.js @@ -0,0 +1,75 @@ +//! moment.js locale configuration +//! locale : Frisian [fy] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'); +var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); + +var fy = moment.defineLocale('fy', { + months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), + weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'oer %s', + past : '%s lyn', + s : 'in pear sekonden', + m : 'ien minút', + mm : '%d minuten', + h : 'ien oere', + hh : '%d oeren', + d : 'ien dei', + dd : '%d dagen', + M : 'ien moanne', + MM : '%d moannen', + y : 'ien jier', + yy : '%d jierren' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return fy; + +}))); diff --git a/node_modules/moment/locale/gd.js b/node_modules/moment/locale/gd.js new file mode 100644 index 0000000..af9eec8 --- /dev/null +++ b/node_modules/moment/locale/gd.js @@ -0,0 +1,76 @@ +//! moment.js locale configuration +//! locale : Scottish Gaelic [gd] +//! author : Jon Ashdown : https://github.com/jonashdown + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var months = [ + 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd' +]; + +var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh']; + +var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; + +var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; + +var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + +var gd = moment.defineLocale('gd', { + months : months, + monthsShort : monthsShort, + monthsParseExact : true, + weekdays : weekdays, + weekdaysShort : weekdaysShort, + weekdaysMin : weekdaysMin, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[An-diugh aig] LT', + nextDay : '[A-màireach aig] LT', + nextWeek : 'dddd [aig] LT', + lastDay : '[An-dè aig] LT', + lastWeek : 'dddd [seo chaidh] [aig] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ann an %s', + past : 'bho chionn %s', + s : 'beagan diogan', + m : 'mionaid', + mm : '%d mionaidean', + h : 'uair', + hh : '%d uairean', + d : 'latha', + dd : '%d latha', + M : 'mìos', + MM : '%d mìosan', + y : 'bliadhna', + yy : '%d bliadhna' + }, + dayOfMonthOrdinalParse : /\d{1,2}(d|na|mh)/, + ordinal : function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return gd; + +}))); diff --git a/node_modules/moment/locale/gl.js b/node_modules/moment/locale/gl.js new file mode 100644 index 0000000..e894db7 --- /dev/null +++ b/node_modules/moment/locale/gl.js @@ -0,0 +1,77 @@ +//! moment.js locale configuration +//! locale : Galician [gl] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var gl = moment.defineLocale('gl', { + months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'), + monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextDay : function () { + return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextWeek : function () { + return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + lastDay : function () { + return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; + }, + lastWeek : function () { + return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past : 'hai %s', + s : 'uns segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'unha hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return gl; + +}))); diff --git a/node_modules/moment/locale/gom-latn.js b/node_modules/moment/locale/gom-latn.js new file mode 100644 index 0000000..084b4b2 --- /dev/null +++ b/node_modules/moment/locale/gom-latn.js @@ -0,0 +1,122 @@ +//! moment.js locale configuration +//! locale : Konkani Latin script [gom-latn] +//! author : The Discoverer : https://github.com/WikiDiscoverer + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['thodde secondanim', 'thodde second'], + 'm': ['eka mintan', 'ek minute'], + 'mm': [number + ' mintanim', number + ' mintam'], + 'h': ['eka horan', 'ek hor'], + 'hh': [number + ' horanim', number + ' hor'], + 'd': ['eka disan', 'ek dis'], + 'dd': [number + ' disanim', number + ' dis'], + 'M': ['eka mhoinean', 'ek mhoino'], + 'MM': [number + ' mhoineanim', number + ' mhoine'], + 'y': ['eka vorsan', 'ek voros'], + 'yy': [number + ' vorsanim', number + ' vorsam'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +var gomLatn = moment.defineLocale('gom-latn', { + months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), + monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'), + weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'A h:mm [vazta]', + LTS : 'A h:mm:ss [vazta]', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY A h:mm [vazta]', + LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]' + }, + calendar : { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Ieta to] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fatlo] dddd[,] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s', + past : '%s adim', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse : /\d{1,2}(er)/, + ordinal : function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /rati|sokalli|donparam|sanje/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokalli') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokalli'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + } +}); + +return gomLatn; + +}))); diff --git a/node_modules/moment/locale/he.js b/node_modules/moment/locale/he.js new file mode 100644 index 0000000..e884381 --- /dev/null +++ b/node_modules/moment/locale/he.js @@ -0,0 +1,99 @@ +//! moment.js locale configuration +//! locale : Hebrew [he] +//! author : Tomer Cohen : https://github.com/tomer +//! author : Moshe Simantov : https://github.com/DevelopmentIL +//! author : Tal Ater : https://github.com/TalAter + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var he = moment.defineLocale('he', { + months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), + monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'), + weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [ב]MMMM YYYY', + LLL : 'D [ב]MMMM YYYY HH:mm', + LLLL : 'dddd, D [ב]MMMM YYYY HH:mm', + l : 'D/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay : '[היום ב־]LT', + nextDay : '[מחר ב־]LT', + nextWeek : 'dddd [בשעה] LT', + lastDay : '[אתמול ב־]LT', + lastWeek : '[ביום] dddd [האחרון בשעה] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'בעוד %s', + past : 'לפני %s', + s : 'מספר שניות', + m : 'דקה', + mm : '%d דקות', + h : 'שעה', + hh : function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d : 'יום', + dd : function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M : 'חודש', + MM : function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y : 'שנה', + yy : function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + } + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM : function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + } +}); + +return he; + +}))); diff --git a/node_modules/moment/locale/hi.js b/node_modules/moment/locale/hi.js new file mode 100644 index 0000000..58afc6b --- /dev/null +++ b/node_modules/moment/locale/hi.js @@ -0,0 +1,124 @@ +//! moment.js locale configuration +//! locale : Hindi [hi] +//! author : Mayank Singhal : https://github.com/mayanksinghal + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +var hi = moment.defineLocale('hi', { + months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'), + monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), + monthsParseExact: true, + weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm बजे', + LTS : 'A h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, A h:mm बजे' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[कल] LT', + nextWeek : 'dddd, LT', + lastDay : '[कल] LT', + lastWeek : '[पिछले] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s में', + past : '%s पहले', + s : 'कुछ ही क्षण', + m : 'एक मिनट', + mm : '%d मिनट', + h : 'एक घंटा', + hh : '%d घंटे', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महीने', + MM : '%d महीने', + y : 'एक वर्ष', + yy : '%d वर्ष' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return hi; + +}))); diff --git a/node_modules/moment/locale/hr.js b/node_modules/moment/locale/hr.js new file mode 100644 index 0000000..5caeec8 --- /dev/null +++ b/node_modules/moment/locale/hr.js @@ -0,0 +1,145 @@ +//! moment.js locale configuration +//! locale : Croatian [hr] +//! author : Bojan Marković : https://github.com/bmarkovic + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +var hr = moment.defineLocale('hr', { + months : { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_') + }, + monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : 'dan', + dd : translate, + M : 'mjesec', + MM : translate, + y : 'godinu', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return hr; + +}))); diff --git a/node_modules/moment/locale/hu.js b/node_modules/moment/locale/hu.js new file mode 100644 index 0000000..e215874 --- /dev/null +++ b/node_modules/moment/locale/hu.js @@ -0,0 +1,109 @@ +//! moment.js locale configuration +//! locale : Hungarian [hu] +//! author : Adam Brunner : https://github.com/adambrunner + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); +function translate(number, withoutSuffix, key, isFuture) { + var num = number, + suffix; + switch (key) { + case 's': + return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; +} +function week(isFuture) { + return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; +} + +var hu = moment.defineLocale('hu', { + months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), + monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), + weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'YYYY.MM.DD.', + LL : 'YYYY. MMMM D.', + LLL : 'YYYY. MMMM D. H:mm', + LLLL : 'YYYY. MMMM D., dddd H:mm' + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar : { + sameDay : '[ma] LT[-kor]', + nextDay : '[holnap] LT[-kor]', + nextWeek : function () { + return week.call(this, true); + }, + lastDay : '[tegnap] LT[-kor]', + lastWeek : function () { + return week.call(this, false); + }, + sameElse : 'L' + }, + relativeTime : { + future : '%s múlva', + past : '%s', + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return hu; + +}))); diff --git a/node_modules/moment/locale/hy-am.js b/node_modules/moment/locale/hy-am.js new file mode 100644 index 0000000..0b76845 --- /dev/null +++ b/node_modules/moment/locale/hy-am.js @@ -0,0 +1,95 @@ +//! moment.js locale configuration +//! locale : Armenian [hy-am] +//! author : Armendarabyan : https://github.com/armendarabyan + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var hyAm = moment.defineLocale('hy-am', { + months : { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_') + }, + monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'), + weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY թ.', + LLL : 'D MMMM YYYY թ., HH:mm', + LLLL : 'dddd, D MMMM YYYY թ., HH:mm' + }, + calendar : { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L' + }, + relativeTime : { + future : '%s հետո', + past : '%s առաջ', + s : 'մի քանի վայրկյան', + m : 'րոպե', + mm : '%d րոպե', + h : 'ժամ', + hh : '%d ժամ', + d : 'օր', + dd : '%d օր', + M : 'ամիս', + MM : '%d ամիս', + y : 'տարի', + yy : '%d տարի' + }, + meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem : function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'առավոտվա'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return hyAm; + +}))); diff --git a/node_modules/moment/locale/id.js b/node_modules/moment/locale/id.js new file mode 100644 index 0000000..a1cfb18 --- /dev/null +++ b/node_modules/moment/locale/id.js @@ -0,0 +1,83 @@ +//! moment.js locale configuration +//! locale : Indonesian [id] +//! author : Mohammad Satrio Utomo : https://github.com/tyok +//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var id = moment.defineLocale('id', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Besok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kemarin pukul] LT', + lastWeek : 'dddd [lalu pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lalu', + s : 'beberapa detik', + m : 'semenit', + mm : '%d menit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return id; + +}))); diff --git a/node_modules/moment/locale/is.js b/node_modules/moment/locale/is.js new file mode 100644 index 0000000..541b270 --- /dev/null +++ b/node_modules/moment/locale/is.js @@ -0,0 +1,127 @@ +//! moment.js locale configuration +//! locale : Icelandic [is] +//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function plural(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; +} +function translate(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } +} + +var is = moment.defineLocale('is', { + months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'), + weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm' + }, + calendar : { + sameDay : '[í dag kl.] LT', + nextDay : '[á morgun kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[í gær kl.] LT', + lastWeek : '[síðasta] dddd [kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'eftir %s', + past : 'fyrir %s síðan', + s : translate, + m : translate, + mm : translate, + h : 'klukkustund', + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return is; + +}))); diff --git a/node_modules/moment/locale/it.js b/node_modules/moment/locale/it.js new file mode 100644 index 0000000..f3079cb --- /dev/null +++ b/node_modules/moment/locale/it.js @@ -0,0 +1,70 @@ +//! moment.js locale configuration +//! locale : Italian [it] +//! author : Lorenzo : https://github.com/aliem +//! author: Mattia Larentis: https://github.com/nostalgiaz + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var it = moment.defineLocale('it', { + months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), + monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), + weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : function (s) { + return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s; + }, + past : '%s fa', + s : 'alcuni secondi', + m : 'un minuto', + mm : '%d minuti', + h : 'un\'ora', + hh : '%d ore', + d : 'un giorno', + dd : '%d giorni', + M : 'un mese', + MM : '%d mesi', + y : 'un anno', + yy : '%d anni' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return it; + +}))); diff --git a/node_modules/moment/locale/ja.js b/node_modules/moment/locale/ja.js new file mode 100644 index 0000000..b2e6553 --- /dev/null +++ b/node_modules/moment/locale/ja.js @@ -0,0 +1,80 @@ +//! moment.js locale configuration +//! locale : Japanese [ja] +//! author : LI Long : https://github.com/baryon + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var ja = moment.defineLocale('ja', { + months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort : '日_月_火_水_木_金_土'.split('_'), + weekdaysMin : '日_月_火_水_木_金_土'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY年M月D日', + LLL : 'YYYY年M月D日 HH:mm', + LLLL : 'YYYY年M月D日 HH:mm dddd', + l : 'YYYY/MM/DD', + ll : 'YYYY年M月D日', + lll : 'YYYY年M月D日 HH:mm', + llll : 'YYYY年M月D日 HH:mm dddd' + }, + meridiemParse: /午前|午後/i, + isPM : function (input) { + return input === '午後'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar : { + sameDay : '[今日] LT', + nextDay : '[明日] LT', + nextWeek : '[来週]dddd LT', + lastDay : '[昨日] LT', + lastWeek : '[前週]dddd LT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse : /\d{1,2}日/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime : { + future : '%s後', + past : '%s前', + s : '数秒', + m : '1分', + mm : '%d分', + h : '1時間', + hh : '%d時間', + d : '1日', + dd : '%d日', + M : '1ヶ月', + MM : '%dヶ月', + y : '1年', + yy : '%d年' + } +}); + +return ja; + +}))); diff --git a/node_modules/moment/locale/jv.js b/node_modules/moment/locale/jv.js new file mode 100644 index 0000000..5b939e0 --- /dev/null +++ b/node_modules/moment/locale/jv.js @@ -0,0 +1,83 @@ +//! moment.js locale configuration +//! locale : Javanese [jv] +//! author : Rony Lantip : https://github.com/lantip +//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var jv = moment.defineLocale('jv', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar : { + sameDay : '[Dinten puniko pukul] LT', + nextDay : '[Mbenjang pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kala wingi pukul] LT', + lastWeek : 'dddd [kepengker pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'wonten ing %s', + past : '%s ingkang kepengker', + s : 'sawetawis detik', + m : 'setunggal menit', + mm : '%d menit', + h : 'setunggal jam', + hh : '%d jam', + d : 'sedinten', + dd : '%d dinten', + M : 'sewulan', + MM : '%d wulan', + y : 'setaun', + yy : '%d taun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return jv; + +}))); diff --git a/node_modules/moment/locale/ka.js b/node_modules/moment/locale/ka.js new file mode 100644 index 0000000..2a95638 --- /dev/null +++ b/node_modules/moment/locale/ka.js @@ -0,0 +1,89 @@ +//! moment.js locale configuration +//! locale : Georgian [ka] +//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var ka = moment.defineLocale('ka', { + months : { + standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), + format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') + }, + monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays : { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'), + isFormat: /(წინა|შემდეგ)/ + }, + weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[დღეს] LT[-ზე]', + nextDay : '[ხვალ] LT[-ზე]', + lastDay : '[გუშინ] LT[-ზე]', + nextWeek : '[შემდეგ] dddd LT[-ზე]', + lastWeek : '[წინა] dddd LT-ზე', + sameElse : 'L' + }, + relativeTime : { + future : function (s) { + return (/(წამი|წუთი|საათი|წელი)/).test(s) ? + s.replace(/ი$/, 'ში') : + s + 'ში'; + }, + past : function (s) { + if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { + return s.replace(/(ი|ე)$/, 'ის უკან'); + } + if ((/წელი/).test(s)) { + return s.replace(/წელი$/, 'წლის უკან'); + } + }, + s : 'რამდენიმე წამი', + m : 'წუთი', + mm : '%d წუთი', + h : 'საათი', + hh : '%d საათი', + d : 'დღე', + dd : '%d დღე', + M : 'თვე', + MM : '%d თვე', + y : 'წელი', + yy : '%d წელი' + }, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal : function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week : { + dow : 1, + doy : 7 + } +}); + +return ka; + +}))); diff --git a/node_modules/moment/locale/kk.js b/node_modules/moment/locale/kk.js new file mode 100644 index 0000000..777a529 --- /dev/null +++ b/node_modules/moment/locale/kk.js @@ -0,0 +1,87 @@ +//! moment.js locale configuration +//! locale : Kazakh [kk] +//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var suffixes = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші' +}; + +var kk = moment.defineLocale('kk', { + months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'), + monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'), + weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгін сағат] LT', + nextDay : '[Ертең сағат] LT', + nextWeek : 'dddd [сағат] LT', + lastDay : '[Кеше сағат] LT', + lastWeek : '[Өткен аптаның] dddd [сағат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ішінде', + past : '%s бұрын', + s : 'бірнеше секунд', + m : 'бір минут', + mm : '%d минут', + h : 'бір сағат', + hh : '%d сағат', + d : 'бір күн', + dd : '%d күн', + M : 'бір ай', + MM : '%d ай', + y : 'бір жыл', + yy : '%d жыл' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes[number] || suffixes[a] || suffixes[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return kk; + +}))); diff --git a/node_modules/moment/locale/km.js b/node_modules/moment/locale/km.js new file mode 100644 index 0000000..71482a7 --- /dev/null +++ b/node_modules/moment/locale/km.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : Cambodian [km] +//! author : Kruy Vanna : https://github.com/kruyvanna + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var km = moment.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L' + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return km; + +}))); diff --git a/node_modules/moment/locale/kn.js b/node_modules/moment/locale/kn.js new file mode 100644 index 0000000..aeacafa --- /dev/null +++ b/node_modules/moment/locale/kn.js @@ -0,0 +1,126 @@ +//! moment.js locale configuration +//! locale : Kannada [kn] +//! author : Rajeev Naik : https://github.com/rajeevnaikte + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦' +}; +var numberMap = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0' +}; + +var kn = moment.defineLocale('kn', { + months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'), + monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'), + monthsParseExact: true, + weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'), + weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[ಇಂದು] LT', + nextDay : '[ನಾಳೆ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ನಿನ್ನೆ] LT', + lastWeek : '[ಕೊನೆಯ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ನಂತರ', + past : '%s ಹಿಂದೆ', + s : 'ಕೆಲವು ಕ್ಷಣಗಳು', + m : 'ಒಂದು ನಿಮಿಷ', + mm : '%d ನಿಮಿಷ', + h : 'ಒಂದು ಗಂಟೆ', + hh : '%d ಗಂಟೆ', + d : 'ಒಂದು ದಿನ', + dd : '%d ದಿನ', + M : 'ಒಂದು ತಿಂಗಳು', + MM : '%d ತಿಂಗಳು', + y : 'ಒಂದು ವರ್ಷ', + yy : '%d ವರ್ಷ' + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal : function (number) { + return number + 'ನೇ'; + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return kn; + +}))); diff --git a/node_modules/moment/locale/ko.js b/node_modules/moment/locale/ko.js new file mode 100644 index 0000000..13d1c4d --- /dev/null +++ b/node_modules/moment/locale/ko.js @@ -0,0 +1,69 @@ +//! moment.js locale configuration +//! locale : Korean [ko] +//! author : Kyungwook, Park : https://github.com/kyungw00k +//! author : Jeeeyul Lee + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var ko = moment.defineLocale('ko', { + months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort : '일_월_화_수_목_금_토'.split('_'), + weekdaysMin : '일_월_화_수_목_금_토'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'YYYY.MM.DD', + LL : 'YYYY년 MMMM D일', + LLL : 'YYYY년 MMMM D일 A h:mm', + LLLL : 'YYYY년 MMMM D일 dddd A h:mm', + l : 'YYYY.MM.DD', + ll : 'YYYY년 MMMM D일', + lll : 'YYYY년 MMMM D일 A h:mm', + llll : 'YYYY년 MMMM D일 dddd A h:mm' + }, + calendar : { + sameDay : '오늘 LT', + nextDay : '내일 LT', + nextWeek : 'dddd LT', + lastDay : '어제 LT', + lastWeek : '지난주 dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s 후', + past : '%s 전', + s : '몇 초', + ss : '%d초', + m : '1분', + mm : '%d분', + h : '한 시간', + hh : '%d시간', + d : '하루', + dd : '%d일', + M : '한 달', + MM : '%d달', + y : '일 년', + yy : '%d년' + }, + dayOfMonthOrdinalParse : /\d{1,2}일/, + ordinal : '%d일', + meridiemParse : /오전|오후/, + isPM : function (token) { + return token === '오후'; + }, + meridiem : function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + } +}); + +return ko; + +}))); diff --git a/node_modules/moment/locale/ky.js b/node_modules/moment/locale/ky.js new file mode 100644 index 0000000..ae4053a --- /dev/null +++ b/node_modules/moment/locale/ky.js @@ -0,0 +1,88 @@ +//! moment.js locale configuration +//! locale : Kyrgyz [ky] +//! author : Chyngyz Arystan uulu : https://github.com/chyngyz + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + + +var suffixes = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү' +}; + +var ky = moment.defineLocale('ky', { + months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'), + weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгүн саат] LT', + nextDay : '[Эртең саат] LT', + nextWeek : 'dddd [саат] LT', + lastDay : '[Кече саат] LT', + lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ичинде', + past : '%s мурун', + s : 'бирнече секунд', + m : 'бир мүнөт', + mm : '%d мүнөт', + h : 'бир саат', + hh : '%d саат', + d : 'бир күн', + dd : '%d күн', + M : 'бир ай', + MM : '%d ай', + y : 'бир жыл', + yy : '%d жыл' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes[number] || suffixes[a] || suffixes[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return ky; + +}))); diff --git a/node_modules/moment/locale/lb.js b/node_modules/moment/locale/lb.js new file mode 100644 index 0000000..56c1803 --- /dev/null +++ b/node_modules/moment/locale/lb.js @@ -0,0 +1,137 @@ +//! moment.js locale configuration +//! locale : Luxembourgish [lb] +//! author : mweimerskirch : https://github.com/mweimerskirch +//! author : David Raison : https://github.com/kwisatz + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eng Minutt', 'enger Minutt'], + 'h': ['eng Stonn', 'enger Stonn'], + 'd': ['een Dag', 'engem Dag'], + 'M': ['ee Mount', 'engem Mount'], + 'y': ['ee Joer', 'engem Joer'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} +function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; +} +function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; +} +/** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ +function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } +} + +var lb = moment.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]' + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + } + }, + relativeTime : { + future : processFutureTime, + past : processPastTime, + s : 'e puer Sekonnen', + m : processRelativeTime, + mm : '%d Minutten', + h : processRelativeTime, + hh : '%d Stonnen', + d : processRelativeTime, + dd : '%d Deeg', + M : processRelativeTime, + MM : '%d Méint', + y : processRelativeTime, + yy : '%d Joer' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return lb; + +}))); diff --git a/node_modules/moment/locale/lo.js b/node_modules/moment/locale/lo.js new file mode 100644 index 0000000..8e5cdbd --- /dev/null +++ b/node_modules/moment/locale/lo.js @@ -0,0 +1,70 @@ +//! moment.js locale configuration +//! locale : Lao [lo] +//! author : Ryan Hart : https://github.com/ryanhart2 + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var lo = moment.defineLocale('lo', { + months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'ວັນdddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar : { + sameDay : '[ມື້ນີ້ເວລາ] LT', + nextDay : '[ມື້ອື່ນເວລາ] LT', + nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay : '[ມື້ວານນີ້ເວລາ] LT', + lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ອີກ %s', + past : '%sຜ່ານມາ', + s : 'ບໍ່ເທົ່າໃດວິນາທີ', + m : '1 ນາທີ', + mm : '%d ນາທີ', + h : '1 ຊົ່ວໂມງ', + hh : '%d ຊົ່ວໂມງ', + d : '1 ມື້', + dd : '%d ມື້', + M : '1 ເດືອນ', + MM : '%d ເດືອນ', + y : '1 ປີ', + yy : '%d ປີ' + }, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, + ordinal : function (number) { + return 'ທີ່' + number; + } +}); + +return lo; + +}))); diff --git a/node_modules/moment/locale/lt.js b/node_modules/moment/locale/lt.js new file mode 100644 index 0000000..d2fb760 --- /dev/null +++ b/node_modules/moment/locale/lt.js @@ -0,0 +1,117 @@ +//! moment.js locale configuration +//! locale : Lithuanian [lt] +//! author : Mindaugas Mozūras : https://github.com/mmozuras + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var units = { + 'm' : 'minutė_minutės_minutę', + 'mm': 'minutės_minučių_minutes', + 'h' : 'valanda_valandos_valandą', + 'hh': 'valandos_valandų_valandas', + 'd' : 'diena_dienos_dieną', + 'dd': 'dienos_dienų_dienas', + 'M' : 'mėnuo_mėnesio_mėnesį', + 'MM': 'mėnesiai_mėnesių_mėnesius', + 'y' : 'metai_metų_metus', + 'yy': 'metai_metų_metus' +}; +function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } +} +function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); +} +function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); +} +function forms(key) { + return units[key].split('_'); +} +function translate(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return result + translateSingular(number, withoutSuffix, key[0], isFuture); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } +} +var lt = moment.defineLocale('lt', { + months : { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/ + }, + monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays : { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'), + isFormat: /dddd HH:mm/ + }, + weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), + weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY [m.] MMMM D [d.]', + LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l : 'YYYY-MM-DD', + ll : 'YYYY [m.] MMMM D [d.]', + lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' + }, + calendar : { + sameDay : '[Šiandien] LT', + nextDay : '[Rytoj] LT', + nextWeek : 'dddd LT', + lastDay : '[Vakar] LT', + lastWeek : '[Praėjusį] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'po %s', + past : 'prieš %s', + s : translateSeconds, + m : translateSingular, + mm : translate, + h : translateSingular, + hh : translate, + d : translateSingular, + dd : translate, + M : translateSingular, + MM : translate, + y : translateSingular, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, + ordinal : function (number) { + return number + '-oji'; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return lt; + +}))); diff --git a/node_modules/moment/locale/lv.js b/node_modules/moment/locale/lv.js new file mode 100644 index 0000000..e2d9887 --- /dev/null +++ b/node_modules/moment/locale/lv.js @@ -0,0 +1,97 @@ +//! moment.js locale configuration +//! locale : Latvian [lv] +//! author : Kristaps Karlsons : https://github.com/skakri +//! author : Jānis Elmeris : https://github.com/JanisE + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var units = { + 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), + 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), + 'h': 'stundas_stundām_stunda_stundas'.split('_'), + 'hh': 'stundas_stundām_stunda_stundas'.split('_'), + 'd': 'dienas_dienām_diena_dienas'.split('_'), + 'dd': 'dienas_dienām_diena_dienas'.split('_'), + 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + 'y': 'gada_gadiem_gads_gadi'.split('_'), + 'yy': 'gada_gadiem_gads_gadi'.split('_') +}; +/** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ +function format(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minūte", "3 minūtes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minūtes" as in "pēc 21 minūtes". + // E.g. "3 minūtēm" as in "pēc 3 minūtēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + return number + ' ' + format(units[key], number, withoutSuffix); +} +function relativeTimeWithSingular(number, withoutSuffix, key) { + return format(units[key], number, withoutSuffix); +} +function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; +} + +var lv = moment.defineLocale('lv', { + months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'), + weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY.', + LL : 'YYYY. [gada] D. MMMM', + LLL : 'YYYY. [gada] D. MMMM, HH:mm', + LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm' + }, + calendar : { + sameDay : '[Šodien pulksten] LT', + nextDay : '[Rīt pulksten] LT', + nextWeek : 'dddd [pulksten] LT', + lastDay : '[Vakar pulksten] LT', + lastWeek : '[Pagājušā] dddd [pulksten] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'pēc %s', + past : 'pirms %s', + s : relativeSeconds, + m : relativeTimeWithSingular, + mm : relativeTimeWithPlural, + h : relativeTimeWithSingular, + hh : relativeTimeWithPlural, + d : relativeTimeWithSingular, + dd : relativeTimeWithPlural, + M : relativeTimeWithSingular, + MM : relativeTimeWithPlural, + y : relativeTimeWithSingular, + yy : relativeTimeWithPlural + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return lv; + +}))); diff --git a/node_modules/moment/locale/me.js b/node_modules/moment/locale/me.js new file mode 100644 index 0000000..07ed6ca --- /dev/null +++ b/node_modules/moment/locale/me.js @@ -0,0 +1,111 @@ +//! moment.js locale configuration +//! locale : Montenegrin [me] +//! author : Miodrag Nikač : https://github.com/miodragnikac + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +var me = moment.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact : true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedjelje] [u] LT', + '[prošlog] [ponedjeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srijede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'nekoliko sekundi', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'dan', + dd : translator.translate, + M : 'mjesec', + MM : translator.translate, + y : 'godinu', + yy : translator.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return me; + +}))); diff --git a/node_modules/moment/locale/mi.js b/node_modules/moment/locale/mi.js new file mode 100644 index 0000000..c5cce37 --- /dev/null +++ b/node_modules/moment/locale/mi.js @@ -0,0 +1,64 @@ +//! moment.js locale configuration +//! locale : Maori [mi] +//! author : John Corrigan : https://github.com/johnideal + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var mi = moment.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm' + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return mi; + +}))); diff --git a/node_modules/moment/locale/mk.js b/node_modules/moment/locale/mk.js new file mode 100644 index 0000000..cdfb1e1 --- /dev/null +++ b/node_modules/moment/locale/mk.js @@ -0,0 +1,90 @@ +//! moment.js locale configuration +//! locale : Macedonian [mk] +//! author : Borislav Mickov : https://github.com/B0k0 + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var mk = moment.defineLocale('mk', { + months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'), + weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Денес во] LT', + nextDay : '[Утре во] LT', + nextWeek : '[Во] dddd [во] LT', + lastDay : '[Вчера во] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'после %s', + past : 'пред %s', + s : 'неколку секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дена', + M : 'месец', + MM : '%d месеци', + y : 'година', + yy : '%d години' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return mk; + +}))); diff --git a/node_modules/moment/locale/ml.js b/node_modules/moment/locale/ml.js new file mode 100644 index 0000000..e5f52e9 --- /dev/null +++ b/node_modules/moment/locale/ml.js @@ -0,0 +1,81 @@ +//! moment.js locale configuration +//! locale : Malayalam [ml] +//! author : Floyd Pink : https://github.com/floydpink + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var ml = moment.defineLocale('ml', { + months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'), + monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'), + monthsParseExact : true, + weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'), + weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + longDateFormat : { + LT : 'A h:mm -നു', + LTS : 'A h:mm:ss -നു', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm -നു', + LLLL : 'dddd, D MMMM YYYY, A h:mm -നു' + }, + calendar : { + sameDay : '[ഇന്ന്] LT', + nextDay : '[നാളെ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ഇന്നലെ] LT', + lastWeek : '[കഴിഞ്ഞ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s കഴിഞ്ഞ്', + past : '%s മുൻപ്', + s : 'അൽപ നിമിഷങ്ങൾ', + m : 'ഒരു മിനിറ്റ്', + mm : '%d മിനിറ്റ്', + h : 'ഒരു മണിക്കൂർ', + hh : '%d മണിക്കൂർ', + d : 'ഒരു ദിവസം', + dd : '%d ദിവസം', + M : 'ഒരു മാസം', + MM : '%d മാസം', + y : 'ഒരു വർഷം', + yy : '%d വർഷം' + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + } +}); + +return ml; + +}))); diff --git a/node_modules/moment/locale/mr.js b/node_modules/moment/locale/mr.js new file mode 100644 index 0000000..abe1024 --- /dev/null +++ b/node_modules/moment/locale/mr.js @@ -0,0 +1,159 @@ +//! moment.js locale configuration +//! locale : Marathi [mr] +//! author : Harshad Kale : https://github.com/kalehv +//! author : Vivek Athalye : https://github.com/vnathalye + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +function relativeTimeMr(number, withoutSuffix, string, isFuture) +{ + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': output = 'काही सेकंद'; break; + case 'm': output = 'एक मिनिट'; break; + case 'mm': output = '%d मिनिटे'; break; + case 'h': output = 'एक तास'; break; + case 'hh': output = '%d तास'; break; + case 'd': output = 'एक दिवस'; break; + case 'dd': output = '%d दिवस'; break; + case 'M': output = 'एक महिना'; break; + case 'MM': output = '%d महिने'; break; + case 'y': output = 'एक वर्ष'; break; + case 'yy': output = '%d वर्षे'; break; + } + } + else { + switch (string) { + case 's': output = 'काही सेकंदां'; break; + case 'm': output = 'एका मिनिटा'; break; + case 'mm': output = '%d मिनिटां'; break; + case 'h': output = 'एका तासा'; break; + case 'hh': output = '%d तासां'; break; + case 'd': output = 'एका दिवसा'; break; + case 'dd': output = '%d दिवसां'; break; + case 'M': output = 'एका महिन्या'; break; + case 'MM': output = '%d महिन्यां'; break; + case 'y': output = 'एका वर्षा'; break; + case 'yy': output = '%d वर्षां'; break; + } + } + return output.replace(/%d/i, number); +} + +var mr = moment.defineLocale('mr', { + months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'), + monthsParseExact : true, + weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm वाजता', + LTS : 'A h:mm:ss वाजता', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm वाजता', + LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[उद्या] LT', + nextWeek : 'dddd, LT', + lastDay : '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात्री') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळी') { + return hour; + } else if (meridiem === 'दुपारी') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'सायंकाळी') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात्री'; + } else if (hour < 10) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return mr; + +}))); diff --git a/node_modules/moment/locale/ms-my.js b/node_modules/moment/locale/ms-my.js new file mode 100644 index 0000000..0cb403d --- /dev/null +++ b/node_modules/moment/locale/ms-my.js @@ -0,0 +1,83 @@ +//! moment.js locale configuration +//! locale : Malay [ms-my] +//! note : DEPRECATED, the correct one is [ms] +//! author : Weldan Jamili : https://github.com/weldan + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var msMy = moment.defineLocale('ms-my', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return msMy; + +}))); diff --git a/node_modules/moment/locale/ms.js b/node_modules/moment/locale/ms.js new file mode 100644 index 0000000..4d4afff --- /dev/null +++ b/node_modules/moment/locale/ms.js @@ -0,0 +1,82 @@ +//! moment.js locale configuration +//! locale : Malay [ms] +//! author : Weldan Jamili : https://github.com/weldan + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var ms = moment.defineLocale('ms', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return ms; + +}))); diff --git a/node_modules/moment/locale/my.js b/node_modules/moment/locale/my.js new file mode 100644 index 0000000..32d67e2 --- /dev/null +++ b/node_modules/moment/locale/my.js @@ -0,0 +1,96 @@ +//! moment.js locale configuration +//! locale : Burmese [my] +//! author : Squar team, mysquar.com +//! author : David Rossellat : https://github.com/gholadr +//! author : Tin Aung Lin : https://github.com/thanyawzinmin + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀' +}; +var numberMap = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0' +}; + +var my = moment.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L' + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်' + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 1st is the first week of the year. + } +}); + +return my; + +}))); diff --git a/node_modules/moment/locale/nb.js b/node_modules/moment/locale/nb.js new file mode 100644 index 0000000..2cfe374 --- /dev/null +++ b/node_modules/moment/locale/nb.js @@ -0,0 +1,63 @@ +//! moment.js locale configuration +//! locale : Norwegian Bokmål [nb] +//! authors : Espen Hovlandsdal : https://github.com/rexxars +//! Sigurd Gartmann : https://github.com/sigurdga + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var nb = moment.defineLocale('nb', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'noen sekunder', + m : 'ett minutt', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dager', + M : 'en måned', + MM : '%d måneder', + y : 'ett år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return nb; + +}))); diff --git a/node_modules/moment/locale/ne.js b/node_modules/moment/locale/ne.js new file mode 100644 index 0000000..a35947a --- /dev/null +++ b/node_modules/moment/locale/ne.js @@ -0,0 +1,123 @@ +//! moment.js locale configuration +//! locale : Nepalese [ne] +//! author : suvash : https://github.com/suvash + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +var ne = moment.defineLocale('ne', { + months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'), + monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'), + monthsParseExact : true, + weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'), + weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'Aको h:mm बजे', + LTS : 'Aको h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, Aको h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[भोलि] LT', + nextWeek : '[आउँदो] dddd[,] LT', + lastDay : '[हिजो] LT', + lastWeek : '[गएको] dddd[,] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%sमा', + past : '%s अगाडि', + s : 'केही क्षण', + m : 'एक मिनेट', + mm : '%d मिनेट', + h : 'एक घण्टा', + hh : '%d घण्टा', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महिना', + MM : '%d महिना', + y : 'एक बर्ष', + yy : '%d बर्ष' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return ne; + +}))); diff --git a/node_modules/moment/locale/nl-be.js b/node_modules/moment/locale/nl-be.js new file mode 100644 index 0000000..8588eab --- /dev/null +++ b/node_modules/moment/locale/nl-be.js @@ -0,0 +1,88 @@ +//! moment.js locale configuration +//! locale : Dutch (Belgium) [nl-be] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'); +var monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +var nlBe = moment.defineLocale('nl-be', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return nlBe; + +}))); diff --git a/node_modules/moment/locale/nl.js b/node_modules/moment/locale/nl.js new file mode 100644 index 0000000..2863b08 --- /dev/null +++ b/node_modules/moment/locale/nl.js @@ -0,0 +1,88 @@ +//! moment.js locale configuration +//! locale : Dutch [nl] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'); +var monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +var nl = moment.defineLocale('nl', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return nl; + +}))); diff --git a/node_modules/moment/locale/nn.js b/node_modules/moment/locale/nn.js new file mode 100644 index 0000000..90dda8c --- /dev/null +++ b/node_modules/moment/locale/nn.js @@ -0,0 +1,60 @@ +//! moment.js locale configuration +//! locale : Nynorsk [nn] +//! author : https://github.com/mechuwind + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var nn = moment.defineLocale('nn', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'), + weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s sidan', + s : 'nokre sekund', + m : 'eit minutt', + mm : '%d minutt', + h : 'ein time', + hh : '%d timar', + d : 'ein dag', + dd : '%d dagar', + M : 'ein månad', + MM : '%d månader', + y : 'eit år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return nn; + +}))); diff --git a/node_modules/moment/locale/pa-in.js b/node_modules/moment/locale/pa-in.js new file mode 100644 index 0000000..6dec8d1 --- /dev/null +++ b/node_modules/moment/locale/pa-in.js @@ -0,0 +1,124 @@ +//! moment.js locale configuration +//! locale : Punjabi (India) [pa-in] +//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '੧', + '2': '੨', + '3': '੩', + '4': '੪', + '5': '੫', + '6': '੬', + '7': '੭', + '8': '੮', + '9': '੯', + '0': '੦' +}; +var numberMap = { + '੧': '1', + '੨': '2', + '੩': '3', + '੪': '4', + '੫': '5', + '੬': '6', + '੭': '7', + '੮': '8', + '੯': '9', + '੦': '0' +}; + +var paIn = moment.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi. + months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'), + weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat : { + LT : 'A h:mm ਵਜੇ', + LTS : 'A h:mm:ss ਵਜੇ', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ' + }, + calendar : { + sameDay : '[ਅਜ] LT', + nextDay : '[ਕਲ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ਕਲ] LT', + lastWeek : '[ਪਿਛਲੇ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ਵਿੱਚ', + past : '%s ਪਿਛਲੇ', + s : 'ਕੁਝ ਸਕਿੰਟ', + m : 'ਇਕ ਮਿੰਟ', + mm : '%d ਮਿੰਟ', + h : 'ਇੱਕ ਘੰਟਾ', + hh : '%d ਘੰਟੇ', + d : 'ਇੱਕ ਦਿਨ', + dd : '%d ਦਿਨ', + M : 'ਇੱਕ ਮਹੀਨਾ', + MM : '%d ਮਹੀਨੇ', + y : 'ਇੱਕ ਸਾਲ', + yy : '%d ਸਾਲ' + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return paIn; + +}))); diff --git a/node_modules/moment/locale/pl.js b/node_modules/moment/locale/pl.js new file mode 100644 index 0000000..af2c331 --- /dev/null +++ b/node_modules/moment/locale/pl.js @@ -0,0 +1,107 @@ +//! moment.js locale configuration +//! locale : Polish [pl] +//! author : Rafal Hirsz : https://github.com/evoL + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'); +var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'); +function plural(n) { + return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1); +} +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural(number) ? 'lata' : 'lat'); + } +} + +var pl = moment.defineLocale('pl', { + months : function (momentToFormat, format) { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')'; + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'), + weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: '[W] dddd [o] LT', + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : '%s temu', + s : 'kilka sekund', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : '1 dzień', + dd : '%d dni', + M : 'miesiąc', + MM : translate, + y : 'rok', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return pl; + +}))); diff --git a/node_modules/moment/locale/pt-br.js b/node_modules/moment/locale/pt-br.js new file mode 100644 index 0000000..dbcd0fd --- /dev/null +++ b/node_modules/moment/locale/pt-br.js @@ -0,0 +1,61 @@ +//! moment.js locale configuration +//! locale : Portuguese (Brazil) [pt-br] +//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var ptBr = moment.defineLocale('pt-br', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : '%s atrás', + s : 'poucos segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal : '%dº' +}); + +return ptBr; + +}))); diff --git a/node_modules/moment/locale/pt.js b/node_modules/moment/locale/pt.js new file mode 100644 index 0000000..2d7175c --- /dev/null +++ b/node_modules/moment/locale/pt.js @@ -0,0 +1,65 @@ +//! moment.js locale configuration +//! locale : Portuguese [pt] +//! author : Jefferson : https://github.com/jalex79 + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var pt = moment.defineLocale('pt', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : 'há %s', + s : 'segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return pt; + +}))); diff --git a/node_modules/moment/locale/ro.js b/node_modules/moment/locale/ro.js new file mode 100644 index 0000000..8a0cd75 --- /dev/null +++ b/node_modules/moment/locale/ro.js @@ -0,0 +1,75 @@ +//! moment.js locale configuration +//! locale : Romanian [ro] +//! author : Vlad Gurdiga : https://github.com/gurdiga +//! author : Valentin Agachi : https://github.com/avaly + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': 'minute', + 'hh': 'ore', + 'dd': 'zile', + 'MM': 'luni', + 'yy': 'ani' + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; +} + +var ro = moment.defineLocale('ro', { + months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'), + monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'peste %s', + past : '%s în urmă', + s : 'câteva secunde', + m : 'un minut', + mm : relativeTimeWithPlural, + h : 'o oră', + hh : relativeTimeWithPlural, + d : 'o zi', + dd : relativeTimeWithPlural, + M : 'o lună', + MM : relativeTimeWithPlural, + y : 'un an', + yy : relativeTimeWithPlural + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return ro; + +}))); diff --git a/node_modules/moment/locale/ru.js b/node_modules/moment/locale/ru.js new file mode 100644 index 0000000..b45731e --- /dev/null +++ b/node_modules/moment/locale/ru.js @@ -0,0 +1,183 @@ +//! moment.js locale configuration +//! locale : Russian [ru] +//! author : Viktorminator : https://github.com/Viktorminator +//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Коренберг Марк : https://github.com/socketpair + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + 'hh': 'час_часа_часов', + 'dd': 'день_дня_дней', + 'MM': 'месяц_месяца_месяцев', + 'yy': 'год_года_лет' + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} +var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; + +// http://new.gramota.ru/spravka/rules/139-prop : § 103 +// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 +// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 +var ru = moment.defineLocale('ru', { + months : { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_') + }, + monthsShort : { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_') + }, + weekdays : { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/ + }, + weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соотвествует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сегодня в] LT', + nextDay: '[Завтра в] LT', + lastDay: '[Вчера в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'через %s', + past : '%s назад', + s : 'несколько секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : 'час', + hh : relativeTimeWithPlural, + d : 'день', + dd : relativeTimeWithPlural, + M : 'месяц', + MM : relativeTimeWithPlural, + y : 'год', + yy : relativeTimeWithPlural + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM : function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return ru; + +}))); diff --git a/node_modules/moment/locale/sd.js b/node_modules/moment/locale/sd.js new file mode 100644 index 0000000..0fcf7e1 --- /dev/null +++ b/node_modules/moment/locale/sd.js @@ -0,0 +1,98 @@ +//! moment.js locale configuration +//! locale : Sindhi [sd] +//! author : Narain Sagar : https://github.com/narainsagar + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var months = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر' +]; +var days = [ + 'آچر', + 'سومر', + 'اڱارو', + 'اربع', + 'خميس', + 'جمع', + 'ڇنڇر' +]; + +var sd = moment.defineLocale('sd', { + months : months, + monthsShort : months, + weekdays : days, + weekdaysShort : days, + weekdaysMin : days, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[اڄ] LT', + nextDay : '[سڀاڻي] LT', + nextWeek : 'dddd [اڳين هفتي تي] LT', + lastDay : '[ڪالهه] LT', + lastWeek : '[گزريل هفتي] dddd [تي] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s پوء', + past : '%s اڳ', + s : 'چند سيڪنڊ', + m : 'هڪ منٽ', + mm : '%d منٽ', + h : 'هڪ ڪلاڪ', + hh : '%d ڪلاڪ', + d : 'هڪ ڏينهن', + dd : '%d ڏينهن', + M : 'هڪ مهينو', + MM : '%d مهينا', + y : 'هڪ سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return sd; + +}))); diff --git a/node_modules/moment/locale/se.js b/node_modules/moment/locale/se.js new file mode 100644 index 0000000..d44d0df --- /dev/null +++ b/node_modules/moment/locale/se.js @@ -0,0 +1,61 @@ +//! moment.js locale configuration +//! locale : Northern Sami [se] +//! authors : Bård Rolstad Henriksen : https://github.com/karamell + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + + +var se = moment.defineLocale('se', { + months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), + monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), + weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), + weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin : 's_v_m_g_d_b_L'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'MMMM D. [b.] YYYY', + LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' + }, + calendar : { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s geažes', + past : 'maŋit %s', + s : 'moadde sekunddat', + m : 'okta minuhta', + mm : '%d minuhtat', + h : 'okta diimmu', + hh : '%d diimmut', + d : 'okta beaivi', + dd : '%d beaivvit', + M : 'okta mánnu', + MM : '%d mánut', + y : 'okta jahki', + yy : '%d jagit' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return se; + +}))); diff --git a/node_modules/moment/locale/si.js b/node_modules/moment/locale/si.js new file mode 100644 index 0000000..f5c124e --- /dev/null +++ b/node_modules/moment/locale/si.js @@ -0,0 +1,71 @@ +//! moment.js locale configuration +//! locale : Sinhalese [si] +//! author : Sampath Sitinamaluwa : https://github.com/sampathsris + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +/*jshint -W100*/ +var si = moment.defineLocale('si', { + months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'), + monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'), + weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'), + weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'a h:mm', + LTS : 'a h:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY MMMM D', + LLL : 'YYYY MMMM D, a h:mm', + LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss' + }, + calendar : { + sameDay : '[අද] LT[ට]', + nextDay : '[හෙට] LT[ට]', + nextWeek : 'dddd LT[ට]', + lastDay : '[ඊයේ] LT[ට]', + lastWeek : '[පසුගිය] dddd LT[ට]', + sameElse : 'L' + }, + relativeTime : { + future : '%sකින්', + past : '%sකට පෙර', + s : 'තත්පර කිහිපය', + m : 'මිනිත්තුව', + mm : 'මිනිත්තු %d', + h : 'පැය', + hh : 'පැය %d', + d : 'දිනය', + dd : 'දින %d', + M : 'මාසය', + MM : 'මාස %d', + y : 'වසර', + yy : 'වසර %d' + }, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, + ordinal : function (number) { + return number + ' වැනි'; + }, + meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM : function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + } +}); + +return si; + +}))); diff --git a/node_modules/moment/locale/sk.js b/node_modules/moment/locale/sk.js new file mode 100644 index 0000000..aa61da6 --- /dev/null +++ b/node_modules/moment/locale/sk.js @@ -0,0 +1,150 @@ +//! moment.js locale configuration +//! locale : Slovak [sk] +//! author : Martin Minka : https://github.com/k2s +//! based on work of petrbela : https://github.com/petrbela + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'); +var monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); +function plural(n) { + return (n > 1) && (n < 5); +} +function translate(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + break; + } +} + +var sk = moment.defineLocale('sk', { + months : months, + monthsShort : monthsShort, + weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pred %s', + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return sk; + +}))); diff --git a/node_modules/moment/locale/sl.js b/node_modules/moment/locale/sl.js new file mode 100644 index 0000000..e74b3a1 --- /dev/null +++ b/node_modules/moment/locale/sl.js @@ -0,0 +1,162 @@ +//! moment.js locale configuration +//! locale : Slovenian [sl] +//! author : Robert Sedovšek : https://github.com/sedovsek + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami'; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } +} + +var sl = moment.defineLocale('sl', { + months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danes ob] LT', + nextDay : '[jutri ob] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay : '[včeraj ob] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + return '[prejšnjo] [nedeljo] [ob] LT'; + case 3: + return '[prejšnjo] [sredo] [ob] LT'; + case 6: + return '[prejšnjo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'čez %s', + past : 'pred %s', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return sl; + +}))); diff --git a/node_modules/moment/locale/sq.js b/node_modules/moment/locale/sq.js new file mode 100644 index 0000000..b92dc17 --- /dev/null +++ b/node_modules/moment/locale/sq.js @@ -0,0 +1,70 @@ +//! moment.js locale configuration +//! locale : Albanian [sq] +//! author : Flakërim Ismani : https://github.com/flakerimi +//! author : Menelion Elensúle : https://github.com/Oire +//! author : Oerd Cukalla : https://github.com/oerd + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var sq = moment.defineLocale('sq', { + months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), + monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), + weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact : true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem : function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Sot në] LT', + nextDay : '[Nesër në] LT', + nextWeek : 'dddd [në] LT', + lastDay : '[Dje në] LT', + lastWeek : 'dddd [e kaluar në] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'në %s', + past : '%s më parë', + s : 'disa sekonda', + m : 'një minutë', + mm : '%d minuta', + h : 'një orë', + hh : '%d orë', + d : 'një ditë', + dd : '%d ditë', + M : 'një muaj', + MM : '%d muaj', + y : 'një vit', + yy : '%d vite' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return sq; + +}))); diff --git a/node_modules/moment/locale/sr-cyrl.js b/node_modules/moment/locale/sr-cyrl.js new file mode 100644 index 0000000..3007819 --- /dev/null +++ b/node_modules/moment/locale/sr-cyrl.js @@ -0,0 +1,110 @@ +//! moment.js locale configuration +//! locale : Serbian Cyrillic [sr-cyrl] +//! author : Milan Janačković : https://github.com/milan-j + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var translator = { + words: { //Different grammatical cases + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +var srCyrl = moment.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay : '[јуче у] LT', + lastWeek : function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'за %s', + past : 'пре %s', + s : 'неколико секунди', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'дан', + dd : translator.translate, + M : 'месец', + MM : translator.translate, + y : 'годину', + yy : translator.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return srCyrl; + +}))); diff --git a/node_modules/moment/locale/sr.js b/node_modules/moment/locale/sr.js new file mode 100644 index 0000000..90778a9 --- /dev/null +++ b/node_modules/moment/locale/sr.js @@ -0,0 +1,110 @@ +//! moment.js locale configuration +//! locale : Serbian [sr] +//! author : Milan Janačković : https://github.com/milan-j + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +var sr = moment.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pre %s', + s : 'nekoliko sekundi', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'dan', + dd : translator.translate, + M : 'mesec', + MM : translator.translate, + y : 'godinu', + yy : translator.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return sr; + +}))); diff --git a/node_modules/moment/locale/ss.js b/node_modules/moment/locale/ss.js new file mode 100644 index 0000000..e89e2db --- /dev/null +++ b/node_modules/moment/locale/ss.js @@ -0,0 +1,89 @@ +//! moment.js locale configuration +//! locale : siSwati [ss] +//! author : Nicolai Davies : https://github.com/nicolaidavies + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + + +var ss = moment.defineLocale('ss', { + months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), + monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), + weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Namuhla nga] LT', + nextDay : '[Kusasa nga] LT', + nextWeek : 'dddd [nga] LT', + lastDay : '[Itolo nga] LT', + lastWeek : 'dddd [leliphelile] [nga] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'nga %s', + past : 'wenteka nga %s', + s : 'emizuzwana lomcane', + m : 'umzuzu', + mm : '%d emizuzu', + h : 'lihora', + hh : '%d emahora', + d : 'lilanga', + dd : '%d emalanga', + M : 'inyanga', + MM : '%d tinyanga', + y : 'umnyaka', + yy : '%d iminyaka' + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : '%d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return ss; + +}))); diff --git a/node_modules/moment/locale/sv.js b/node_modules/moment/locale/sv.js new file mode 100644 index 0000000..1aa7660 --- /dev/null +++ b/node_modules/moment/locale/sv.js @@ -0,0 +1,69 @@ +//! moment.js locale configuration +//! locale : Swedish [sv] +//! author : Jens Alm : https://github.com/ulmus + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var sv = moment.defineLocale('sv', { + months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D MMMM YYYY [kl.] HH:mm', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: '[På] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : 'för %s sedan', + s : 'några sekunder', + m : 'en minut', + mm : '%d minuter', + h : 'en timme', + hh : '%d timmar', + d : 'en dag', + dd : '%d dagar', + M : 'en månad', + MM : '%d månader', + y : 'ett år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}(e|a)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'e' : + (b === 1) ? 'a' : + (b === 2) ? 'a' : + (b === 3) ? 'e' : 'e'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return sv; + +}))); diff --git a/node_modules/moment/locale/sw.js b/node_modules/moment/locale/sw.js new file mode 100644 index 0000000..9ed314f --- /dev/null +++ b/node_modules/moment/locale/sw.js @@ -0,0 +1,59 @@ +//! moment.js locale configuration +//! locale : Swahili [sw] +//! author : Fahad Kassim : https://github.com/fadsel + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var sw = moment.defineLocale('sw', { + months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), + weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[leo saa] LT', + nextDay : '[kesho saa] LT', + nextWeek : '[wiki ijayo] dddd [saat] LT', + lastDay : '[jana] LT', + lastWeek : '[wiki iliyopita] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s baadaye', + past : 'tokea %s', + s : 'hivi punde', + m : 'dakika moja', + mm : 'dakika %d', + h : 'saa limoja', + hh : 'masaa %d', + d : 'siku moja', + dd : 'masiku %d', + M : 'mwezi mmoja', + MM : 'miezi %d', + y : 'mwaka mmoja', + yy : 'miaka %d' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return sw; + +}))); diff --git a/node_modules/moment/locale/ta.js b/node_modules/moment/locale/ta.js new file mode 100644 index 0000000..d9d2555 --- /dev/null +++ b/node_modules/moment/locale/ta.js @@ -0,0 +1,130 @@ +//! moment.js locale configuration +//! locale : Tamil [ta] +//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var symbolMap = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦' +}; +var numberMap = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0' +}; + +var ta = moment.defineLocale('ta', { + months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'), + weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), + weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, HH:mm', + LLLL : 'dddd, D MMMM YYYY, HH:mm' + }, + calendar : { + sameDay : '[இன்று] LT', + nextDay : '[நாளை] LT', + nextWeek : 'dddd, LT', + lastDay : '[நேற்று] LT', + lastWeek : '[கடந்த வாரம்] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s இல்', + past : '%s முன்', + s : 'ஒரு சில விநாடிகள்', + m : 'ஒரு நிமிடம்', + mm : '%d நிமிடங்கள்', + h : 'ஒரு மணி நேரம்', + hh : '%d மணி நேரம்', + d : 'ஒரு நாள்', + dd : '%d நாட்கள்', + M : 'ஒரு மாதம்', + MM : '%d மாதங்கள்', + y : 'ஒரு வருடம்', + yy : '%d ஆண்டுகள்' + }, + dayOfMonthOrdinalParse: /\d{1,2}வது/, + ordinal : function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem : function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return ta; + +}))); diff --git a/node_modules/moment/locale/te.js b/node_modules/moment/locale/te.js new file mode 100644 index 0000000..fe33904 --- /dev/null +++ b/node_modules/moment/locale/te.js @@ -0,0 +1,89 @@ +//! moment.js locale configuration +//! locale : Telugu [te] +//! author : Krishna Chaitanya Thota : https://github.com/kcthota + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var te = moment.defineLocale('te', { + months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'), + monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'), + monthsParseExact : true, + weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'), + weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[నేడు] LT', + nextDay : '[రేపు] LT', + nextWeek : 'dddd, LT', + lastDay : '[నిన్న] LT', + lastWeek : '[గత] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s లో', + past : '%s క్రితం', + s : 'కొన్ని క్షణాలు', + m : 'ఒక నిమిషం', + mm : '%d నిమిషాలు', + h : 'ఒక గంట', + hh : '%d గంటలు', + d : 'ఒక రోజు', + dd : '%d రోజులు', + M : 'ఒక నెల', + MM : '%d నెలలు', + y : 'ఒక సంవత్సరం', + yy : '%d సంవత్సరాలు' + }, + dayOfMonthOrdinalParse : /\d{1,2}వ/, + ordinal : '%dవ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +return te; + +}))); diff --git a/node_modules/moment/locale/tet.js b/node_modules/moment/locale/tet.js new file mode 100644 index 0000000..c9c2928 --- /dev/null +++ b/node_modules/moment/locale/tet.js @@ -0,0 +1,68 @@ +//! moment.js locale configuration +//! locale : Tetun Dili (East Timor) [tet] +//! author : Joshua Brooks : https://github.com/joshbrooks +//! author : Onorio De J. Afonso : https://github.com/marobo + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var tet = moment.defineLocale('tet', { + months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'), + weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'), + weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'iha %s', + past : '%s liuba', + s : 'minutu balun', + m : 'minutu ida', + mm : 'minutus %d', + h : 'horas ida', + hh : 'horas %d', + d : 'loron ida', + dd : 'loron %d', + M : 'fulan ida', + MM : 'fulan %d', + y : 'tinan ida', + yy : 'tinan %d' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return tet; + +}))); diff --git a/node_modules/moment/locale/th.js b/node_modules/moment/locale/th.js new file mode 100644 index 0000000..17ec0f1 --- /dev/null +++ b/node_modules/moment/locale/th.js @@ -0,0 +1,67 @@ +//! moment.js locale configuration +//! locale : Thai [th] +//! author : Kridsada Thanabulpong : https://github.com/sirn + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var th = moment.defineLocale('th', { + months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), + monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'), + monthsParseExact: true, + weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY เวลา H:mm', + LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm' + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar : { + sameDay : '[วันนี้ เวลา] LT', + nextDay : '[พรุ่งนี้ เวลา] LT', + nextWeek : 'dddd[หน้า เวลา] LT', + lastDay : '[เมื่อวานนี้ เวลา] LT', + lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'อีก %s', + past : '%sที่แล้ว', + s : 'ไม่กี่วินาที', + m : '1 นาที', + mm : '%d นาที', + h : '1 ชั่วโมง', + hh : '%d ชั่วโมง', + d : '1 วัน', + dd : '%d วัน', + M : '1 เดือน', + MM : '%d เดือน', + y : '1 ปี', + yy : '%d ปี' + } +}); + +return th; + +}))); diff --git a/node_modules/moment/locale/tl-ph.js b/node_modules/moment/locale/tl-ph.js new file mode 100644 index 0000000..f66b022 --- /dev/null +++ b/node_modules/moment/locale/tl-ph.js @@ -0,0 +1,62 @@ +//! moment.js locale configuration +//! locale : Tagalog (Philippines) [tl-ph] +//! author : Dan Hagman : https://github.com/hagmandan + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var tlPh = moment.defineLocale('tl-ph', { + months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), + monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), + weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'MM/D/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY HH:mm', + LLLL : 'dddd, MMMM DD, YYYY HH:mm' + }, + calendar : { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L' + }, + relativeTime : { + future : 'sa loob ng %s', + past : '%s ang nakalipas', + s : 'ilang segundo', + m : 'isang minuto', + mm : '%d minuto', + h : 'isang oras', + hh : '%d oras', + d : 'isang araw', + dd : '%d araw', + M : 'isang buwan', + MM : '%d buwan', + y : 'isang taon', + yy : '%d taon' + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return tlPh; + +}))); diff --git a/node_modules/moment/locale/tlh.js b/node_modules/moment/locale/tlh.js new file mode 100644 index 0000000..7c3123c --- /dev/null +++ b/node_modules/moment/locale/tlh.js @@ -0,0 +1,120 @@ +//! moment.js locale configuration +//! locale : Klingon [tlh] +//! author : Dominika Kruk : https://github.com/amaranthrose + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + +function translateFuture(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'leS' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'waQ' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'nem' : + time + ' pIq'; + return time; +} + +function translatePast(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'Hu’' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'wen' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'ben' : + time + ' ret'; + return time; +} + +function translate(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } +} + +function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[one]; + } + return (word === '') ? 'pagh' : word; +} + +var tlh = moment.defineLocale('tlh', { + months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'), + monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'), + monthsParseExact : true, + weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L' + }, + relativeTime : { + future : translateFuture, + past : translatePast, + s : 'puS lup', + m : 'wa’ tup', + mm : translate, + h : 'wa’ rep', + hh : translate, + d : 'wa’ jaj', + dd : translate, + M : 'wa’ jar', + MM : translate, + y : 'wa’ DIS', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return tlh; + +}))); diff --git a/node_modules/moment/locale/tr.js b/node_modules/moment/locale/tr.js new file mode 100644 index 0000000..c4c58ca --- /dev/null +++ b/node_modules/moment/locale/tr.js @@ -0,0 +1,90 @@ +//! moment.js locale configuration +//! locale : Turkish [tr] +//! authors : Erhan Gundogan : https://github.com/erhangundogan, +//! Burak Yiğit Kaya: https://github.com/BYK + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var suffixes = { + 1: '\'inci', + 5: '\'inci', + 8: '\'inci', + 70: '\'inci', + 80: '\'inci', + 2: '\'nci', + 7: '\'nci', + 20: '\'nci', + 50: '\'nci', + 3: '\'üncü', + 4: '\'üncü', + 100: '\'üncü', + 6: '\'ncı', + 9: '\'uncu', + 10: '\'uncu', + 30: '\'uncu', + 60: '\'ıncı', + 90: '\'ıncı' +}; + +var tr = moment.defineLocale('tr', { + months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), + monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), + weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[yarın saat] LT', + nextWeek : '[haftaya] dddd [saat] LT', + lastDay : '[dün] LT', + lastWeek : '[geçen hafta] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s önce', + s : 'birkaç saniye', + m : 'bir dakika', + mm : '%d dakika', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir yıl', + yy : '%d yıl' + }, + dayOfMonthOrdinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '\'ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return tr; + +}))); diff --git a/node_modules/moment/locale/tzl.js b/node_modules/moment/locale/tzl.js new file mode 100644 index 0000000..978fcb4 --- /dev/null +++ b/node_modules/moment/locale/tzl.js @@ -0,0 +1,91 @@ +//! moment.js locale configuration +//! locale : Talossan [tzl] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +//! author : Iustì Canun + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. +// This is currently too difficult (maybe even impossible) to add. +var tzl = moment.defineLocale('tzl', { + months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), + monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM [dallas] YYYY', + LLL : 'D. MMMM [dallas] YYYY HH.mm', + LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' + }, + meridiemParse: /d\'o|d\'a/i, + isPM : function (input) { + return 'd\'o' === input.toLowerCase(); + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'd\'o' : 'D\'O'; + } else { + return isLower ? 'd\'a' : 'D\'A'; + } + }, + calendar : { + sameDay : '[oxhi à] LT', + nextDay : '[demà à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[ieiri à] LT', + lastWeek : '[sür el] dddd [lasteu à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'osprei %s', + past : 'ja%s', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['viensas secunds', '\'iensas secunds'], + 'm': ['\'n míut', '\'iens míut'], + 'mm': [number + ' míuts', '' + number + ' míuts'], + 'h': ['\'n þora', '\'iensa þora'], + 'hh': [number + ' þoras', '' + number + ' þoras'], + 'd': ['\'n ziua', '\'iensa ziua'], + 'dd': [number + ' ziuas', '' + number + ' ziuas'], + 'M': ['\'n mes', '\'iens mes'], + 'MM': [number + ' mesen', '' + number + ' mesen'], + 'y': ['\'n ar', '\'iens ar'], + 'yy': [number + ' ars', '' + number + ' ars'] + }; + return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]); +} + +return tzl; + +}))); diff --git a/node_modules/moment/locale/tzm-latn.js b/node_modules/moment/locale/tzm-latn.js new file mode 100644 index 0000000..4d742c5 --- /dev/null +++ b/node_modules/moment/locale/tzm-latn.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : Central Atlas Tamazight Latin [tzm-latn] +//! author : Abdel Said : https://github.com/abdelsaid + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var tzmLatn = moment.defineLocale('tzm-latn', { + months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'dadkh s yan %s', + past : 'yan %s', + s : 'imik', + m : 'minuḍ', + mm : '%d minuḍ', + h : 'saɛa', + hh : '%d tassaɛin', + d : 'ass', + dd : '%d ossan', + M : 'ayowr', + MM : '%d iyyirn', + y : 'asgas', + yy : '%d isgasn' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return tzmLatn; + +}))); diff --git a/node_modules/moment/locale/tzm.js b/node_modules/moment/locale/tzm.js new file mode 100644 index 0000000..1d1c260 --- /dev/null +++ b/node_modules/moment/locale/tzm.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : Central Atlas Tamazight [tzm] +//! author : Abdel Said : https://github.com/abdelsaid + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var tzm = moment.defineLocale('tzm', { + months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past : 'ⵢⴰⵏ %s', + s : 'ⵉⵎⵉⴽ', + m : 'ⵎⵉⵏⵓⴺ', + mm : '%d ⵎⵉⵏⵓⴺ', + h : 'ⵙⴰⵄⴰ', + hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d : 'ⴰⵙⵙ', + dd : '%d oⵙⵙⴰⵏ', + M : 'ⴰⵢoⵓⵔ', + MM : '%d ⵉⵢⵢⵉⵔⵏ', + y : 'ⴰⵙⴳⴰⵙ', + yy : '%d ⵉⵙⴳⴰⵙⵏ' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +return tzm; + +}))); diff --git a/node_modules/moment/locale/uk.js b/node_modules/moment/locale/uk.js new file mode 100644 index 0000000..1aff8c1 --- /dev/null +++ b/node_modules/moment/locale/uk.js @@ -0,0 +1,151 @@ +//! moment.js locale configuration +//! locale : Ukrainian [uk] +//! author : zemlanin : https://github.com/zemlanin +//! Author : Menelion Elensúle : https://github.com/Oire + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + 'dd': 'день_дні_днів', + 'MM': 'місяць_місяці_місяців', + 'yy': 'рік_роки_років' + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } + else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} +function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), + 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), + 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') + }; + + if (!m) { + return weekdays['nominative']; + } + + var nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? + 'accusative' : + ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? + 'genitive' : + 'nominative'); + return weekdays[nounCase][m.day()]; +} +function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; +} + +var uk = moment.defineLocale('uk', { + months : { + 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'), + 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_') + }, + monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'), + weekdays : weekdaysCaseReplace, + weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY р.', + LLL : 'D MMMM YYYY р., HH:mm', + LLLL : 'dddd, D MMMM YYYY р., HH:mm' + }, + calendar : { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'за %s', + past : '%s тому', + s : 'декілька секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : 'годину', + hh : relativeTimeWithPlural, + d : 'день', + dd : relativeTimeWithPlural, + M : 'місяць', + MM : relativeTimeWithPlural, + y : 'рік', + yy : relativeTimeWithPlural + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return uk; + +}))); diff --git a/node_modules/moment/locale/ur.js b/node_modules/moment/locale/ur.js new file mode 100644 index 0000000..4cf1c07 --- /dev/null +++ b/node_modules/moment/locale/ur.js @@ -0,0 +1,99 @@ +//! moment.js locale configuration +//! locale : Urdu [ur] +//! author : Sawood Alam : https://github.com/ibnesayeed +//! author : Zack : https://github.com/ZackVision + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var months = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر' +]; +var days = [ + 'اتوار', + 'پیر', + 'منگل', + 'بدھ', + 'جمعرات', + 'جمعہ', + 'ہفتہ' +]; + +var ur = moment.defineLocale('ur', { + months : months, + monthsShort : months, + weekdays : days, + weekdaysShort : days, + weekdaysMin : days, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[آج بوقت] LT', + nextDay : '[کل بوقت] LT', + nextWeek : 'dddd [بوقت] LT', + lastDay : '[گذشتہ روز بوقت] LT', + lastWeek : '[گذشتہ] dddd [بوقت] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s بعد', + past : '%s قبل', + s : 'چند سیکنڈ', + m : 'ایک منٹ', + mm : '%d منٹ', + h : 'ایک گھنٹہ', + hh : '%d گھنٹے', + d : 'ایک دن', + dd : '%d دن', + M : 'ایک ماہ', + MM : '%d ماہ', + y : 'ایک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return ur; + +}))); diff --git a/node_modules/moment/locale/uz-latn.js b/node_modules/moment/locale/uz-latn.js new file mode 100644 index 0000000..21463b7 --- /dev/null +++ b/node_modules/moment/locale/uz-latn.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : Uzbek Latin [uz-latn] +//! author : Rasulbek Mirzayev : github.com/Rasulbeeek + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var uzLatn = moment.defineLocale('uz-latn', { + months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'), + monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'), + weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Bugun soat] LT [da]', + nextDay : '[Ertaga] LT [da]', + nextWeek : 'dddd [kuni soat] LT [da]', + lastDay : '[Kecha soat] LT [da]', + lastWeek : '[O\'tgan] dddd [kuni soat] LT [da]', + sameElse : 'L' + }, + relativeTime : { + future : 'Yaqin %s ichida', + past : 'Bir necha %s oldin', + s : 'soniya', + m : 'bir daqiqa', + mm : '%d daqiqa', + h : 'bir soat', + hh : '%d soat', + d : 'bir kun', + dd : '%d kun', + M : 'bir oy', + MM : '%d oy', + y : 'bir yil', + yy : '%d yil' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +return uzLatn; + +}))); diff --git a/node_modules/moment/locale/uz.js b/node_modules/moment/locale/uz.js new file mode 100644 index 0000000..378461e --- /dev/null +++ b/node_modules/moment/locale/uz.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : Uzbek [uz] +//! author : Sardor Muminov : https://github.com/muminoff + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var uz = moment.defineLocale('uz', { + months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), + monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Бугун соат] LT [да]', + nextDay : '[Эртага] LT [да]', + nextWeek : 'dddd [куни соат] LT [да]', + lastDay : '[Кеча соат] LT [да]', + lastWeek : '[Утган] dddd [куни соат] LT [да]', + sameElse : 'L' + }, + relativeTime : { + future : 'Якин %s ичида', + past : 'Бир неча %s олдин', + s : 'фурсат', + m : 'бир дакика', + mm : '%d дакика', + h : 'бир соат', + hh : '%d соат', + d : 'бир кун', + dd : '%d кун', + M : 'бир ой', + MM : '%d ой', + y : 'бир йил', + yy : '%d йил' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 4th is the first week of the year. + } +}); + +return uz; + +}))); diff --git a/node_modules/moment/locale/vi.js b/node_modules/moment/locale/vi.js new file mode 100644 index 0000000..1adacc3 --- /dev/null +++ b/node_modules/moment/locale/vi.js @@ -0,0 +1,79 @@ +//! moment.js locale configuration +//! locale : Vietnamese [vi] +//! author : Bang Nguyen : https://github.com/bangnk + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var vi = moment.defineLocale('vi', { + months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), + monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), + monthsParseExact : true, + weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'), + weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact : true, + meridiemParse: /sa|ch/i, + isPM : function (input) { + return /^ch$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM [năm] YYYY', + LLL : 'D MMMM [năm] YYYY HH:mm', + LLLL : 'dddd, D MMMM [năm] YYYY HH:mm', + l : 'DD/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần rồi lúc] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s tới', + past : '%s trước', + s : 'vài giây', + m : 'một phút', + mm : '%d phút', + h : 'một giờ', + hh : '%d giờ', + d : 'một ngày', + dd : '%d ngày', + M : 'một tháng', + MM : '%d tháng', + y : 'một năm', + yy : '%d năm' + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return vi; + +}))); diff --git a/node_modules/moment/locale/x-pseudo.js b/node_modules/moment/locale/x-pseudo.js new file mode 100644 index 0000000..b906e16 --- /dev/null +++ b/node_modules/moment/locale/x-pseudo.js @@ -0,0 +1,68 @@ +//! moment.js locale configuration +//! locale : Pseudo [x-pseudo] +//! author : Andrew Hood : https://github.com/andrewhood125 + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var xPseudo = moment.defineLocale('x-pseudo', { + months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'), + monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'), + monthsParseExact : true, + weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'), + weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[T~ódá~ý át] LT', + nextDay : '[T~ómó~rró~w át] LT', + nextWeek : 'dddd [át] LT', + lastDay : '[Ý~ést~érdá~ý át] LT', + lastWeek : '[L~ást] dddd [át] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'í~ñ %s', + past : '%s á~gó', + s : 'á ~féw ~sécó~ñds', + m : 'á ~míñ~úté', + mm : '%d m~íñú~tés', + h : 'á~ñ hó~úr', + hh : '%d h~óúrs', + d : 'á ~dáý', + dd : '%d d~áýs', + M : 'á ~móñ~th', + MM : '%d m~óñt~hs', + y : 'á ~ýéár', + yy : '%d ý~éárs' + }, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return xPseudo; + +}))); diff --git a/node_modules/moment/locale/yo.js b/node_modules/moment/locale/yo.js new file mode 100644 index 0000000..ec28a91 --- /dev/null +++ b/node_modules/moment/locale/yo.js @@ -0,0 +1,60 @@ +//! moment.js locale configuration +//! locale : Yoruba Nigeria [yo] +//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var yo = moment.defineLocale('yo', { + months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'), + monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Ònì ni] LT', + nextDay : '[Ọ̀la ni] LT', + nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT', + lastDay : '[Àna ni] LT', + lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ní %s', + past : '%s kọjá', + s : 'ìsẹjú aayá die', + m : 'ìsẹjú kan', + mm : 'ìsẹjú %d', + h : 'wákati kan', + hh : 'wákati %d', + d : 'ọjọ́ kan', + dd : 'ọjọ́ %d', + M : 'osù kan', + MM : 'osù %d', + y : 'ọdún kan', + yy : 'ọdún %d' + }, + dayOfMonthOrdinalParse : /ọjọ́\s\d{1,2}/, + ordinal : 'ọjọ́ %d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return yo; + +}))); diff --git a/node_modules/moment/locale/zh-cn.js b/node_modules/moment/locale/zh-cn.js new file mode 100644 index 0000000..005e941 --- /dev/null +++ b/node_modules/moment/locale/zh-cn.js @@ -0,0 +1,111 @@ +//! moment.js locale configuration +//! locale : Chinese (China) [zh-cn] +//! author : suupic : https://github.com/suupic +//! author : Zeno Zeng : https://github.com/zenozeng + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var zhCn = moment.defineLocale('zh-cn', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日Ah点mm分', + LLLL : 'YYYY年MMMD日ddddAh点mm分', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || + meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime : { + future : '%s内', + past : '%s前', + s : '几秒', + m : '1 分钟', + mm : '%d 分钟', + h : '1 小时', + hh : '%d 小时', + d : '1 天', + dd : '%d 天', + M : '1 个月', + MM : '%d 个月', + y : '1 年', + yy : '%d 年' + }, + week : { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +return zhCn; + +}))); diff --git a/node_modules/moment/locale/zh-hk.js b/node_modules/moment/locale/zh-hk.js new file mode 100644 index 0000000..5ded143 --- /dev/null +++ b/node_modules/moment/locale/zh-hk.js @@ -0,0 +1,105 @@ +//! moment.js locale configuration +//! locale : Chinese (Hong Kong) [zh-hk] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +//! author : Konstantin : https://github.com/skfd + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var zhHk = moment.defineLocale('zh-hk', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 年', + yy : '%d 年' + } +}); + +return zhHk; + +}))); diff --git a/node_modules/moment/locale/zh-tw.js b/node_modules/moment/locale/zh-tw.js new file mode 100644 index 0000000..50a6b6a --- /dev/null +++ b/node_modules/moment/locale/zh-tw.js @@ -0,0 +1,104 @@ +//! moment.js locale configuration +//! locale : Chinese (Taiwan) [zh-tw] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + +var zhTw = moment.defineLocale('zh-tw', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 年', + yy : '%d 年' + } +}); + +return zhTw; + +}))); diff --git a/node_modules/moment/min/locales.js b/node_modules/moment/min/locales.js new file mode 100644 index 0000000..583ab58 --- /dev/null +++ b/node_modules/moment/min/locales.js @@ -0,0 +1,9252 @@ +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + +//! moment.js locale configuration +//! locale : Afrikaans [af] +//! author : Werner Mollentze : https://github.com/wernerm + +moment.defineLocale('af', { + months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), + weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM : function (input) { + return /^nm$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Vandag om] LT', + nextDay : '[Môre om] LT', + nextWeek : 'dddd [om] LT', + lastDay : '[Gister om] LT', + lastWeek : '[Laas] dddd [om] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'oor %s', + past : '%s gelede', + s : '\'n paar sekondes', + m : '\'n minuut', + mm : '%d minute', + h : '\'n uur', + hh : '%d ure', + d : '\'n dag', + dd : '%d dae', + M : '\'n maand', + MM : '%d maande', + y : '\'n jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week : { + dow : 1, // Maandag is die eerste dag van die week. + doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Algeria) [ar-dz] +//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme + +moment.defineLocale('ar-dz', { + months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 4 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Kuwait) [ar-kw] +//! author : Nusret Parlak: https://github.com/nusretparlak + +moment.defineLocale('ar-kw', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Lybia) [ar-ly] +//! author : Ali Hmer: https://github.com/kikoanis + +var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0' +}; +var pluralForm = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}; +var plurals = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}; +var pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}; +var months = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر' +]; + +moment.defineLocale('ar-ly', { + months : months, + monthsShort : months, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize('s'), + m : pluralize('m'), + mm : pluralize('m'), + h : pluralize('h'), + hh : pluralize('h'), + d : pluralize('d'), + dd : pluralize('d'), + M : pluralize('M'), + MM : pluralize('M'), + y : pluralize('y'), + yy : pluralize('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Morocco) [ar-ma] +//! author : ElFadili Yassine : https://github.com/ElFadiliY +//! author : Abdel Said : https://github.com/abdelsaid + +moment.defineLocale('ar-ma', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Saudi Arabia) [ar-sa] +//! author : Suhail Alkowaileet : https://github.com/xsoh + +var symbolMap$1 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' +}; +var numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; + +moment.defineLocale('ar-sa', { + months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + preparse: function (string) { + return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$1[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Tunisia) [ar-tn] +//! author : Nader Toukabri : https://github.com/naderio + +moment.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic [ar] +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi + +var symbolMap$2 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' +}; +var numberMap$1 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; +var pluralForm$1 = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}; +var plurals$1 = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}; +var pluralize$1 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$1(number), + str = plurals$1[u][pluralForm$1(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}; +var months$1 = [ + 'كانون الثاني يناير', + 'شباط فبراير', + 'آذار مارس', + 'نيسان أبريل', + 'أيار مايو', + 'حزيران يونيو', + 'تموز يوليو', + 'آب أغسطس', + 'أيلول سبتمبر', + 'تشرين الأول أكتوبر', + 'تشرين الثاني نوفمبر', + 'كانون الأول ديسمبر' +]; + +moment.defineLocale('ar', { + months : months$1, + monthsShort : months$1, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize$1('s'), + m : pluralize$1('m'), + mm : pluralize$1('m'), + h : pluralize$1('h'), + hh : pluralize$1('h'), + d : pluralize$1('d'), + dd : pluralize$1('d'), + M : pluralize$1('M'), + MM : pluralize$1('M'), + y : pluralize$1('y'), + yy : pluralize$1('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$1[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$2[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Azerbaijani [az] +//! author : topchiyev : https://github.com/topchiyev + +var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı' +}; + +moment.defineLocale('az', { + months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), + monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), + weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[sabah saat] LT', + nextWeek : '[gələn həftə] dddd [saat] LT', + lastDay : '[dünən] LT', + lastWeek : '[keçən həftə] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s əvvəl', + s : 'birneçə saniyyə', + m : 'bir dəqiqə', + mm : '%d dəqiqə', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir il', + yy : '%d il' + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM : function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Belarusian [be] +//! author : Dmitry Demidov : https://github.com/demidov91 +//! author: Praleska: http://praleska.pro/ +//! Author : Menelion Elensúle : https://github.com/Oire + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + 'dd': 'дзень_дні_дзён', + 'MM': 'месяц_месяцы_месяцаў', + 'yy': 'год_гады_гадоў' + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } + else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} + +moment.defineLocale('be', { + months : { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_') + }, + monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), + weekdays : { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'), + isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/ + }, + weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'праз %s', + past : '%s таму', + s : 'некалькі секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : relativeTimeWithPlural, + hh : relativeTimeWithPlural, + d : 'дзень', + dd : relativeTimeWithPlural, + M : 'месяц', + MM : relativeTimeWithPlural, + y : 'год', + yy : relativeTimeWithPlural + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM : function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bulgarian [bg] +//! author : Krasen Borisov : https://github.com/kraz + +moment.defineLocale('bg', { + months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'), + weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Днес в] LT', + nextDay : '[Утре в] LT', + nextWeek : 'dddd [в] LT', + lastDay : '[Вчера в] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'след %s', + past : 'преди %s', + s : 'няколко секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дни', + M : 'месец', + MM : '%d месеца', + y : 'година', + yy : '%d години' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bengali [bn] +//! author : Kaushik Gandhi : https://github.com/kaushikgandhi + +var symbolMap$3 = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০' +}; +var numberMap$2 = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' +}; + +moment.defineLocale('bn', { + months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), + monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'), + weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'), + weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'), + longDateFormat : { + LT : 'A h:mm সময়', + LTS : 'A h:mm:ss সময়', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm সময়', + LLLL : 'dddd, D MMMM YYYY, A h:mm সময়' + }, + calendar : { + sameDay : '[আজ] LT', + nextDay : '[আগামীকাল] LT', + nextWeek : 'dddd, LT', + lastDay : '[গতকাল] LT', + lastWeek : '[গত] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s পরে', + past : '%s আগে', + s : 'কয়েক সেকেন্ড', + m : 'এক মিনিট', + mm : '%d মিনিট', + h : 'এক ঘন্টা', + hh : '%d ঘন্টা', + d : 'এক দিন', + dd : '%d দিন', + M : 'এক মাস', + MM : '%d মাস', + y : 'এক বছর', + yy : '%d বছর' + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap$2[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$3[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tibetan [bo] +//! author : Thupten N. Chakrishar : https://github.com/vajradog + +var symbolMap$4 = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠' +}; +var numberMap$3 = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0' +}; + +moment.defineLocale('bo', { + months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'), + weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[དི་རིང] LT', + nextDay : '[སང་ཉིན] LT', + nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay : '[ཁ་སང] LT', + lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ལ་', + past : '%s སྔན་ལ', + s : 'ལམ་སང', + m : 'སྐར་མ་གཅིག', + mm : '%d སྐར་མ', + h : 'ཆུ་ཚོད་གཅིག', + hh : '%d ཆུ་ཚོད', + d : 'ཉིན་གཅིག', + dd : '%d ཉིན་', + M : 'ཟླ་བ་གཅིག', + MM : '%d ཟླ་བ', + y : 'ལོ་གཅིག', + yy : '%d ལོ' + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap$3[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$4[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Breton [br] +//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou + +function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + 'mm': 'munutenn', + 'MM': 'miz', + 'dd': 'devezh' + }; + return number + ' ' + mutation(format[key], number); +} +function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } +} +function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; +} +function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; +} +function softMutation(text) { + var mutationTable = { + 'm': 'v', + 'b': 'v', + 'd': 'z' + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); +} + +moment.defineLocale('br', { + months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), + monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h[e]mm A', + LTS : 'h[e]mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [a viz] MMMM YYYY', + LLL : 'D [a viz] MMMM YYYY h[e]mm A', + LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A' + }, + calendar : { + sameDay : '[Hiziv da] LT', + nextDay : '[Warc\'hoazh da] LT', + nextWeek : 'dddd [da] LT', + lastDay : '[Dec\'h da] LT', + lastWeek : 'dddd [paset da] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'a-benn %s', + past : '%s \'zo', + s : 'un nebeud segondennoù', + m : 'ur vunutenn', + mm : relativeTimeWithMutation, + h : 'un eur', + hh : '%d eur', + d : 'un devezh', + dd : relativeTimeWithMutation, + M : 'ur miz', + MM : relativeTimeWithMutation, + y : 'ur bloaz', + yy : specialMutationForYears + }, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, + ordinal : function (number) { + var output = (number === 1) ? 'añ' : 'vet'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bosnian [bs] +//! author : Nedim Cholich : https://github.com/frontyard +//! based on (hr) translation by Bojan Marković + +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +moment.defineLocale('bs', { + months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : 'dan', + dd : translate, + M : 'mjesec', + MM : translate, + y : 'godinu', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Catalan [ca] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +moment.defineLocale('ca', { + months : { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), + format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'), + isFormat: /D[oD]?(\s)+MMMM/ + }, + monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), + weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : '[el] D MMMM [de] YYYY', + ll : 'D MMM YYYY', + LLL : '[el] D MMMM [de] YYYY [a les] H:mm', + lll : 'D MMM YYYY, H:mm', + LLLL : '[el] dddd D MMMM [de] YYYY [a les] H:mm', + llll : 'ddd D MMM YYYY, H:mm' + }, + calendar : { + sameDay : function () { + return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextDay : function () { + return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastDay : function () { + return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'd\'aquí %s', + past : 'fa %s', + s : 'uns segons', + m : 'un minut', + mm : '%d minuts', + h : 'una hora', + hh : '%d hores', + d : 'un dia', + dd : '%d dies', + M : 'un mes', + MM : '%d mesos', + y : 'un any', + yy : '%d anys' + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal : function (number, period) { + var output = (number === 1) ? 'r' : + (number === 2) ? 'n' : + (number === 3) ? 'r' : + (number === 4) ? 't' : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Czech [cs] +//! author : petrbela : https://github.com/petrbela + +var months$2 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'); +var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'); +function plural$1(n) { + return (n > 1) && (n < 5) && (~~(n / 10) !== 1); +} +function translate$1(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + break; + } +} + +moment.defineLocale('cs', { + months : months$2, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months$2, monthsShort)), + shortMonthsParse : (function (monthsShort) { + var i, _shortMonthsParse = []; + for (i = 0; i < 12; i++) { + _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i'); + } + return _shortMonthsParse; + }(monthsShort)), + longMonthsParse : (function (months) { + var i, _longMonthsParse = []; + for (i = 0; i < 12; i++) { + _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i'); + } + return _longMonthsParse; + }(months$2)), + weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm', + l : 'D. M. YYYY' + }, + calendar : { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'před %s', + s : translate$1, + m : translate$1, + mm : translate$1, + h : translate$1, + hh : translate$1, + d : translate$1, + dd : translate$1, + M : translate$1, + MM : translate$1, + y : translate$1, + yy : translate$1 + }, + dayOfMonthOrdinalParse : /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chuvash [cv] +//! author : Anatoly Mironov : https://github.com/mirontoli + +moment.defineLocale('cv', { + months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'), + monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'), + weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm' + }, + calendar : { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L' + }, + relativeTime : { + future : function (output) { + var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран'; + return output + affix; + }, + past : '%s каялла', + s : 'пӗр-ик ҫеккунт', + m : 'пӗр минут', + mm : '%d минут', + h : 'пӗр сехет', + hh : '%d сехет', + d : 'пӗр кун', + dd : '%d кун', + M : 'пӗр уйӑх', + MM : '%d уйӑх', + y : 'пӗр ҫул', + yy : '%d ҫул' + }, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, + ordinal : '%d-мӗш', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Welsh [cy] +//! author : Robert Allen : https://github.com/robgallen +//! author : https://github.com/ryangreaves + +moment.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact : true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd' + }, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed + 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Danish [da] +//! author : Ulrik Nielsen : https://github.com/mrbase + +moment.defineLocale('da', { + months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay : '[i dag kl.] LT', + nextDay : '[i morgen kl.] LT', + nextWeek : 'på dddd [kl.] LT', + lastDay : '[i går kl.] LT', + lastWeek : '[i] dddd[s kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'få sekunder', + m : 'et minut', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dage', + M : 'en måned', + MM : '%d måneder', + y : 'et år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : German (Austria) [de-at] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Martin Groller : https://github.com/MadMG +//! author : Mikolaj Dadela : https://github.com/mik01aj + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +moment.defineLocale('de-at', { + months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : German (Switzerland) [de-ch] +//! author : sschueller : https://github.com/sschueller + +// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de# + +function processRelativeTime$1(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +moment.defineLocale('de-ch', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH.mm', + LLLL : 'dddd, D. MMMM YYYY HH.mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime$1, + mm : '%d Minuten', + h : processRelativeTime$1, + hh : '%d Stunden', + d : processRelativeTime$1, + dd : processRelativeTime$1, + M : processRelativeTime$1, + MM : processRelativeTime$1, + y : processRelativeTime$1, + yy : processRelativeTime$1 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : German [de] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Mikolaj Dadela : https://github.com/mik01aj + +function processRelativeTime$2(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +moment.defineLocale('de', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime$2, + mm : '%d Minuten', + h : processRelativeTime$2, + hh : '%d Stunden', + d : processRelativeTime$2, + dd : processRelativeTime$2, + M : processRelativeTime$2, + MM : processRelativeTime$2, + y : processRelativeTime$2, + yy : processRelativeTime$2 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Maldivian [dv] +//! author : Jawish Hameed : https://github.com/jawish + +var months$3 = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު' +]; +var weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު' +]; + +moment.defineLocale('dv', { + months : months$3, + monthsShort : months$3, + weekdays : weekdays, + weekdaysShort : weekdays, + weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat : { + + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/M/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /މކ|މފ/, + isPM : function (input) { + return 'މފ' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar : { + sameDay : '[މިއަދު] LT', + nextDay : '[މާދަމާ] LT', + nextWeek : 'dddd LT', + lastDay : '[އިއްޔެ] LT', + lastWeek : '[ފާއިތުވި] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ތެރޭގައި %s', + past : 'ކުރިން %s', + s : 'ސިކުންތުކޮޅެއް', + m : 'މިނިޓެއް', + mm : 'މިނިޓު %d', + h : 'ގަޑިއިރެއް', + hh : 'ގަޑިއިރު %d', + d : 'ދުވަހެއް', + dd : 'ދުވަސް %d', + M : 'މަހެއް', + MM : 'މަސް %d', + y : 'އަހަރެއް', + yy : 'އަހަރު %d' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 7, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; +} + +//! moment.js locale configuration +//! locale : Greek [el] +//! author : Aggelos Karalias : https://github.com/mehiel + +moment.defineLocale('el', { + monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), + monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'), + months : function (momentToFormat, format) { + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), + weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM : function (input) { + return ((input + '').toLowerCase()[0] === 'μ'); + }, + meridiemParse : /[ΠΜ]\.?Μ?\.?/i, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendarEl : { + sameDay : '[Σήμερα {}] LT', + nextDay : '[Αύριο {}] LT', + nextWeek : 'dddd [{}] LT', + lastDay : '[Χθες {}] LT', + lastWeek : function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction(output)) { + output = output.apply(mom); + } + return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις')); + }, + relativeTime : { + future : 'σε %s', + past : '%s πριν', + s : 'λίγα δευτερόλεπτα', + m : 'ένα λεπτό', + mm : '%d λεπτά', + h : 'μία ώρα', + hh : '%d ώρες', + d : 'μία μέρα', + dd : '%d μέρες', + M : 'ένας μήνας', + MM : '%d μήνες', + y : 'ένας χρόνος', + yy : '%d χρόνια' + }, + dayOfMonthOrdinalParse: /\d{1,2}η/, + ordinal: '%dη', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Australia) [en-au] +//! author : Jared Morse : https://github.com/jarcoal + +moment.defineLocale('en-au', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Canada) [en-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +moment.defineLocale('en-ca', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'YYYY-MM-DD', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); + +//! moment.js locale configuration +//! locale : English (United Kingdom) [en-gb] +//! author : Chris Gedrim : https://github.com/chrisgedrim + +moment.defineLocale('en-gb', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Ireland) [en-ie] +//! author : Chris Cartlidge : https://github.com/chriscartlidge + +moment.defineLocale('en-ie', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (New Zealand) [en-nz] +//! author : Luke McGregor : https://github.com/lukemcgregor + +moment.defineLocale('en-nz', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Esperanto [eo] +//! author : Colin Dean : https://github.com/colindean +//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia +//! comment : miestasmia corrected the translation by colindean + +moment.defineLocale('eo', { + months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'), + weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D[-a de] MMMM, YYYY', + LLL : 'D[-a de] MMMM, YYYY HH:mm', + LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm' + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar : { + sameDay : '[Hodiaŭ je] LT', + nextDay : '[Morgaŭ je] LT', + nextWeek : 'dddd [je] LT', + lastDay : '[Hieraŭ je] LT', + lastWeek : '[pasinta] dddd [je] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'post %s', + past : 'antaŭ %s', + s : 'sekundoj', + m : 'minuto', + mm : '%d minutoj', + h : 'horo', + hh : '%d horoj', + d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo + dd : '%d tagoj', + M : 'monato', + MM : '%d monatoj', + y : 'jaro', + yy : '%d jaroj' + }, + dayOfMonthOrdinalParse: /\d{1,2}a/, + ordinal : '%da', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Spanish (Dominican Republic) [es-do] + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +moment.defineLocale('es-do', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort$1[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY h:mm A', + LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Spanish [es] +//! author : Julio Napurí : https://github.com/julionc + +var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +moment.defineLocale('es', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot$1; + } else if (/-MMM-/.test(format)) { + return monthsShort$2[m.month()]; + } else { + return monthsShortDot$1[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Estonian [et] +//! author : Henry Kehlmann : https://github.com/madhenry +//! improvements : Illimar Tambek : https://github.com/ragulka + +function processRelativeTime$3(number, withoutSuffix, key, isFuture) { + var format = { + 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + 'm' : ['ühe minuti', 'üks minut'], + 'mm': [number + ' minuti', number + ' minutit'], + 'h' : ['ühe tunni', 'tund aega', 'üks tund'], + 'hh': [number + ' tunni', number + ' tundi'], + 'd' : ['ühe päeva', 'üks päev'], + 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], + 'MM': [number + ' kuu', number + ' kuud'], + 'y' : ['ühe aasta', 'aasta', 'üks aasta'], + 'yy': [number + ' aasta', number + ' aastat'] + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; +} + +moment.defineLocale('et', { + months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), + monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), + weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), + weekdaysShort : 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin : 'P_E_T_K_N_R_L'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Täna,] LT', + nextDay : '[Homme,] LT', + nextWeek : '[Järgmine] dddd LT', + lastDay : '[Eile,] LT', + lastWeek : '[Eelmine] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s pärast', + past : '%s tagasi', + s : processRelativeTime$3, + m : processRelativeTime$3, + mm : processRelativeTime$3, + h : processRelativeTime$3, + hh : processRelativeTime$3, + d : processRelativeTime$3, + dd : '%d päeva', + M : processRelativeTime$3, + MM : processRelativeTime$3, + y : processRelativeTime$3, + yy : processRelativeTime$3 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Basque [eu] +//! author : Eneko Illarramendi : https://github.com/eillarra + +moment.defineLocale('eu', { + months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), + monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), + monthsParseExact : true, + weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), + weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY[ko] MMMM[ren] D[a]', + LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l : 'YYYY-M-D', + ll : 'YYYY[ko] MMM D[a]', + lll : 'YYYY[ko] MMM D[a] HH:mm', + llll : 'ddd, YYYY[ko] MMM D[a] HH:mm' + }, + calendar : { + sameDay : '[gaur] LT[etan]', + nextDay : '[bihar] LT[etan]', + nextWeek : 'dddd LT[etan]', + lastDay : '[atzo] LT[etan]', + lastWeek : '[aurreko] dddd LT[etan]', + sameElse : 'L' + }, + relativeTime : { + future : '%s barru', + past : 'duela %s', + s : 'segundo batzuk', + m : 'minutu bat', + mm : '%d minutu', + h : 'ordu bat', + hh : '%d ordu', + d : 'egun bat', + dd : '%d egun', + M : 'hilabete bat', + MM : '%d hilabete', + y : 'urte bat', + yy : '%d urte' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Persian [fa] +//! author : Ebrahim Byagowi : https://github.com/ebraminio + +var symbolMap$5 = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰' +}; +var numberMap$4 = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0' +}; + +moment.defineLocale('fa', { + months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar : { + sameDay : '[امروز ساعت] LT', + nextDay : '[فردا ساعت] LT', + nextWeek : 'dddd [ساعت] LT', + lastDay : '[دیروز ساعت] LT', + lastWeek : 'dddd [پیش] [ساعت] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'در %s', + past : '%s پیش', + s : 'چند ثانیه', + m : 'یک دقیقه', + mm : '%d دقیقه', + h : 'یک ساعت', + hh : '%d ساعت', + d : 'یک روز', + dd : '%d روز', + M : 'یک ماه', + MM : '%d ماه', + y : 'یک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap$4[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$5[match]; + }).replace(/,/g, '،'); + }, + dayOfMonthOrdinalParse: /\d{1,2}م/, + ordinal : '%dم', + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Finnish [fi] +//! author : Tarmo Aidantausta : https://github.com/bleadof + +var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '); +var numbersFuture = [ + 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', + numbersPast[7], numbersPast[8], numbersPast[9] + ]; +function translate$2(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; +} +function verbalNumber(number, isFuture) { + return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; +} + +moment.defineLocale('fi', { + months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), + monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), + weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), + weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'Do MMMM[ta] YYYY', + LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l : 'D.M.YYYY', + ll : 'Do MMM YYYY', + lll : 'Do MMM YYYY, [klo] HH.mm', + llll : 'ddd, Do MMM YYYY, [klo] HH.mm' + }, + calendar : { + sameDay : '[tänään] [klo] LT', + nextDay : '[huomenna] [klo] LT', + nextWeek : 'dddd [klo] LT', + lastDay : '[eilen] [klo] LT', + lastWeek : '[viime] dddd[na] [klo] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s päästä', + past : '%s sitten', + s : translate$2, + m : translate$2, + mm : translate$2, + h : translate$2, + hh : translate$2, + d : translate$2, + dd : translate$2, + M : translate$2, + MM : translate$2, + y : translate$2, + yy : translate$2 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Faroese [fo] +//! author : Ragnar Johannesen : https://github.com/ragnar123 + +moment.defineLocale('fo', { + months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'), + weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D. MMMM, YYYY HH:mm' + }, + calendar : { + sameDay : '[Í dag kl.] LT', + nextDay : '[Í morgin kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[Í gjár kl.] LT', + lastWeek : '[síðstu] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'um %s', + past : '%s síðani', + s : 'fá sekund', + m : 'ein minutt', + mm : '%d minuttir', + h : 'ein tími', + hh : '%d tímar', + d : 'ein dagur', + dd : '%d dagar', + M : 'ein mánaði', + MM : '%d mánaðir', + y : 'eitt ár', + yy : '%d ár' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : French (Canada) [fr-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +moment.defineLocale('fr-ca', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + } +}); + +//! moment.js locale configuration +//! locale : French (Switzerland) [fr-ch] +//! author : Gaspard Bucher : https://github.com/gaspard + +moment.defineLocale('fr-ch', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : French [fr] +//! author : John Fischer : https://github.com/jfroffice + +moment.defineLocale('fr', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal : function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Frisian [fy] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v + +var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'); +var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); + +moment.defineLocale('fy', { + months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), + weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'oer %s', + past : '%s lyn', + s : 'in pear sekonden', + m : 'ien minút', + mm : '%d minuten', + h : 'ien oere', + hh : '%d oeren', + d : 'ien dei', + dd : '%d dagen', + M : 'ien moanne', + MM : '%d moannen', + y : 'ien jier', + yy : '%d jierren' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Scottish Gaelic [gd] +//! author : Jon Ashdown : https://github.com/jonashdown + +var months$4 = [ + 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd' +]; + +var monthsShort$3 = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh']; + +var weekdays$1 = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; + +var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; + +var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + +moment.defineLocale('gd', { + months : months$4, + monthsShort : monthsShort$3, + monthsParseExact : true, + weekdays : weekdays$1, + weekdaysShort : weekdaysShort, + weekdaysMin : weekdaysMin, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[An-diugh aig] LT', + nextDay : '[A-màireach aig] LT', + nextWeek : 'dddd [aig] LT', + lastDay : '[An-dè aig] LT', + lastWeek : 'dddd [seo chaidh] [aig] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ann an %s', + past : 'bho chionn %s', + s : 'beagan diogan', + m : 'mionaid', + mm : '%d mionaidean', + h : 'uair', + hh : '%d uairean', + d : 'latha', + dd : '%d latha', + M : 'mìos', + MM : '%d mìosan', + y : 'bliadhna', + yy : '%d bliadhna' + }, + dayOfMonthOrdinalParse : /\d{1,2}(d|na|mh)/, + ordinal : function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Galician [gl] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +moment.defineLocale('gl', { + months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'), + monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextDay : function () { + return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextWeek : function () { + return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + lastDay : function () { + return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; + }, + lastWeek : function () { + return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past : 'hai %s', + s : 'uns segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'unha hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Konkani Latin script [gom-latn] +//! author : The Discoverer : https://github.com/WikiDiscoverer + +function processRelativeTime$4(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['thodde secondanim', 'thodde second'], + 'm': ['eka mintan', 'ek minute'], + 'mm': [number + ' mintanim', number + ' mintam'], + 'h': ['eka horan', 'ek hor'], + 'hh': [number + ' horanim', number + ' hor'], + 'd': ['eka disan', 'ek dis'], + 'dd': [number + ' disanim', number + ' dis'], + 'M': ['eka mhoinean', 'ek mhoino'], + 'MM': [number + ' mhoineanim', number + ' mhoine'], + 'y': ['eka vorsan', 'ek voros'], + 'yy': [number + ' vorsanim', number + ' vorsam'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +moment.defineLocale('gom-latn', { + months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), + monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'), + weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'A h:mm [vazta]', + LTS : 'A h:mm:ss [vazta]', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY A h:mm [vazta]', + LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]' + }, + calendar : { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Ieta to] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fatlo] dddd[,] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s', + past : '%s adim', + s : processRelativeTime$4, + m : processRelativeTime$4, + mm : processRelativeTime$4, + h : processRelativeTime$4, + hh : processRelativeTime$4, + d : processRelativeTime$4, + dd : processRelativeTime$4, + M : processRelativeTime$4, + MM : processRelativeTime$4, + y : processRelativeTime$4, + yy : processRelativeTime$4 + }, + dayOfMonthOrdinalParse : /\d{1,2}(er)/, + ordinal : function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /rati|sokalli|donparam|sanje/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokalli') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokalli'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + } +}); + +//! moment.js locale configuration +//! locale : Hebrew [he] +//! author : Tomer Cohen : https://github.com/tomer +//! author : Moshe Simantov : https://github.com/DevelopmentIL +//! author : Tal Ater : https://github.com/TalAter + +moment.defineLocale('he', { + months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), + monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'), + weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [ב]MMMM YYYY', + LLL : 'D [ב]MMMM YYYY HH:mm', + LLLL : 'dddd, D [ב]MMMM YYYY HH:mm', + l : 'D/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay : '[היום ב־]LT', + nextDay : '[מחר ב־]LT', + nextWeek : 'dddd [בשעה] LT', + lastDay : '[אתמול ב־]LT', + lastWeek : '[ביום] dddd [האחרון בשעה] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'בעוד %s', + past : 'לפני %s', + s : 'מספר שניות', + m : 'דקה', + mm : '%d דקות', + h : 'שעה', + hh : function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d : 'יום', + dd : function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M : 'חודש', + MM : function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y : 'שנה', + yy : function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + } + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM : function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + } +}); + +//! moment.js locale configuration +//! locale : Hindi [hi] +//! author : Mayank Singhal : https://github.com/mayanksinghal + +var symbolMap$6 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$5 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +moment.defineLocale('hi', { + months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'), + monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), + monthsParseExact: true, + weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm बजे', + LTS : 'A h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, A h:mm बजे' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[कल] LT', + nextWeek : 'dddd, LT', + lastDay : '[कल] LT', + lastWeek : '[पिछले] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s में', + past : '%s पहले', + s : 'कुछ ही क्षण', + m : 'एक मिनट', + mm : '%d मिनट', + h : 'एक घंटा', + hh : '%d घंटे', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महीने', + MM : '%d महीने', + y : 'एक वर्ष', + yy : '%d वर्ष' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$5[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$6[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Croatian [hr] +//! author : Bojan Marković : https://github.com/bmarkovic + +function translate$3(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +moment.defineLocale('hr', { + months : { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_') + }, + monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate$3, + mm : translate$3, + h : translate$3, + hh : translate$3, + d : 'dan', + dd : translate$3, + M : 'mjesec', + MM : translate$3, + y : 'godinu', + yy : translate$3 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Hungarian [hu] +//! author : Adam Brunner : https://github.com/adambrunner + +var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); +function translate$4(number, withoutSuffix, key, isFuture) { + var num = number, + suffix; + switch (key) { + case 's': + return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; +} +function week(isFuture) { + return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; +} + +moment.defineLocale('hu', { + months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), + monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), + weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'YYYY.MM.DD.', + LL : 'YYYY. MMMM D.', + LLL : 'YYYY. MMMM D. H:mm', + LLLL : 'YYYY. MMMM D., dddd H:mm' + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar : { + sameDay : '[ma] LT[-kor]', + nextDay : '[holnap] LT[-kor]', + nextWeek : function () { + return week.call(this, true); + }, + lastDay : '[tegnap] LT[-kor]', + lastWeek : function () { + return week.call(this, false); + }, + sameElse : 'L' + }, + relativeTime : { + future : '%s múlva', + past : '%s', + s : translate$4, + m : translate$4, + mm : translate$4, + h : translate$4, + hh : translate$4, + d : translate$4, + dd : translate$4, + M : translate$4, + MM : translate$4, + y : translate$4, + yy : translate$4 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Armenian [hy-am] +//! author : Armendarabyan : https://github.com/armendarabyan + +moment.defineLocale('hy-am', { + months : { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_') + }, + monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'), + weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY թ.', + LLL : 'D MMMM YYYY թ., HH:mm', + LLLL : 'dddd, D MMMM YYYY թ., HH:mm' + }, + calendar : { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L' + }, + relativeTime : { + future : '%s հետո', + past : '%s առաջ', + s : 'մի քանի վայրկյան', + m : 'րոպե', + mm : '%d րոպե', + h : 'ժամ', + hh : '%d ժամ', + d : 'օր', + dd : '%d օր', + M : 'ամիս', + MM : '%d ամիս', + y : 'տարի', + yy : '%d տարի' + }, + meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem : function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'առավոտվա'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Indonesian [id] +//! author : Mohammad Satrio Utomo : https://github.com/tyok +//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan + +moment.defineLocale('id', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Besok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kemarin pukul] LT', + lastWeek : 'dddd [lalu pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lalu', + s : 'beberapa detik', + m : 'semenit', + mm : '%d menit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Icelandic [is] +//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik + +function plural$2(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; +} +function translate$5(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } +} + +moment.defineLocale('is', { + months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'), + weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm' + }, + calendar : { + sameDay : '[í dag kl.] LT', + nextDay : '[á morgun kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[í gær kl.] LT', + lastWeek : '[síðasta] dddd [kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'eftir %s', + past : 'fyrir %s síðan', + s : translate$5, + m : translate$5, + mm : translate$5, + h : 'klukkustund', + hh : translate$5, + d : translate$5, + dd : translate$5, + M : translate$5, + MM : translate$5, + y : translate$5, + yy : translate$5 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Italian [it] +//! author : Lorenzo : https://github.com/aliem +//! author: Mattia Larentis: https://github.com/nostalgiaz + +moment.defineLocale('it', { + months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), + monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), + weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : function (s) { + return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s; + }, + past : '%s fa', + s : 'alcuni secondi', + m : 'un minuto', + mm : '%d minuti', + h : 'un\'ora', + hh : '%d ore', + d : 'un giorno', + dd : '%d giorni', + M : 'un mese', + MM : '%d mesi', + y : 'un anno', + yy : '%d anni' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Japanese [ja] +//! author : LI Long : https://github.com/baryon + +moment.defineLocale('ja', { + months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort : '日_月_火_水_木_金_土'.split('_'), + weekdaysMin : '日_月_火_水_木_金_土'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY年M月D日', + LLL : 'YYYY年M月D日 HH:mm', + LLLL : 'YYYY年M月D日 HH:mm dddd', + l : 'YYYY/MM/DD', + ll : 'YYYY年M月D日', + lll : 'YYYY年M月D日 HH:mm', + llll : 'YYYY年M月D日 HH:mm dddd' + }, + meridiemParse: /午前|午後/i, + isPM : function (input) { + return input === '午後'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar : { + sameDay : '[今日] LT', + nextDay : '[明日] LT', + nextWeek : '[来週]dddd LT', + lastDay : '[昨日] LT', + lastWeek : '[前週]dddd LT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse : /\d{1,2}日/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime : { + future : '%s後', + past : '%s前', + s : '数秒', + m : '1分', + mm : '%d分', + h : '1時間', + hh : '%d時間', + d : '1日', + dd : '%d日', + M : '1ヶ月', + MM : '%dヶ月', + y : '1年', + yy : '%d年' + } +}); + +//! moment.js locale configuration +//! locale : Javanese [jv] +//! author : Rony Lantip : https://github.com/lantip +//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa + +moment.defineLocale('jv', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar : { + sameDay : '[Dinten puniko pukul] LT', + nextDay : '[Mbenjang pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kala wingi pukul] LT', + lastWeek : 'dddd [kepengker pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'wonten ing %s', + past : '%s ingkang kepengker', + s : 'sawetawis detik', + m : 'setunggal menit', + mm : '%d menit', + h : 'setunggal jam', + hh : '%d jam', + d : 'sedinten', + dd : '%d dinten', + M : 'sewulan', + MM : '%d wulan', + y : 'setaun', + yy : '%d taun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Georgian [ka] +//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili + +moment.defineLocale('ka', { + months : { + standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), + format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') + }, + monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays : { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'), + isFormat: /(წინა|შემდეგ)/ + }, + weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[დღეს] LT[-ზე]', + nextDay : '[ხვალ] LT[-ზე]', + lastDay : '[გუშინ] LT[-ზე]', + nextWeek : '[შემდეგ] dddd LT[-ზე]', + lastWeek : '[წინა] dddd LT-ზე', + sameElse : 'L' + }, + relativeTime : { + future : function (s) { + return (/(წამი|წუთი|საათი|წელი)/).test(s) ? + s.replace(/ი$/, 'ში') : + s + 'ში'; + }, + past : function (s) { + if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { + return s.replace(/(ი|ე)$/, 'ის უკან'); + } + if ((/წელი/).test(s)) { + return s.replace(/წელი$/, 'წლის უკან'); + } + }, + s : 'რამდენიმე წამი', + m : 'წუთი', + mm : '%d წუთი', + h : 'საათი', + hh : '%d საათი', + d : 'დღე', + dd : '%d დღე', + M : 'თვე', + MM : '%d თვე', + y : 'წელი', + yy : '%d წელი' + }, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal : function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week : { + dow : 1, + doy : 7 + } +}); + +//! moment.js locale configuration +//! locale : Kazakh [kk] +//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan + +var suffixes$1 = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші' +}; + +moment.defineLocale('kk', { + months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'), + monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'), + weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгін сағат] LT', + nextDay : '[Ертең сағат] LT', + nextWeek : 'dddd [сағат] LT', + lastDay : '[Кеше сағат] LT', + lastWeek : '[Өткен аптаның] dddd [сағат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ішінде', + past : '%s бұрын', + s : 'бірнеше секунд', + m : 'бір минут', + mm : '%d минут', + h : 'бір сағат', + hh : '%d сағат', + d : 'бір күн', + dd : '%d күн', + M : 'бір ай', + MM : '%d ай', + y : 'бір жыл', + yy : '%d жыл' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Cambodian [km] +//! author : Kruy Vanna : https://github.com/kruyvanna + +moment.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L' + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Kannada [kn] +//! author : Rajeev Naik : https://github.com/rajeevnaikte + +var symbolMap$7 = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦' +}; +var numberMap$6 = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0' +}; + +moment.defineLocale('kn', { + months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'), + monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'), + monthsParseExact: true, + weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'), + weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[ಇಂದು] LT', + nextDay : '[ನಾಳೆ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ನಿನ್ನೆ] LT', + lastWeek : '[ಕೊನೆಯ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ನಂತರ', + past : '%s ಹಿಂದೆ', + s : 'ಕೆಲವು ಕ್ಷಣಗಳು', + m : 'ಒಂದು ನಿಮಿಷ', + mm : '%d ನಿಮಿಷ', + h : 'ಒಂದು ಗಂಟೆ', + hh : '%d ಗಂಟೆ', + d : 'ಒಂದು ದಿನ', + dd : '%d ದಿನ', + M : 'ಒಂದು ತಿಂಗಳು', + MM : '%d ತಿಂಗಳು', + y : 'ಒಂದು ವರ್ಷ', + yy : '%d ವರ್ಷ' + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap$6[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$7[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal : function (number) { + return number + 'ನೇ'; + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Korean [ko] +//! author : Kyungwook, Park : https://github.com/kyungw00k +//! author : Jeeeyul Lee + +moment.defineLocale('ko', { + months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort : '일_월_화_수_목_금_토'.split('_'), + weekdaysMin : '일_월_화_수_목_금_토'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'YYYY.MM.DD', + LL : 'YYYY년 MMMM D일', + LLL : 'YYYY년 MMMM D일 A h:mm', + LLLL : 'YYYY년 MMMM D일 dddd A h:mm', + l : 'YYYY.MM.DD', + ll : 'YYYY년 MMMM D일', + lll : 'YYYY년 MMMM D일 A h:mm', + llll : 'YYYY년 MMMM D일 dddd A h:mm' + }, + calendar : { + sameDay : '오늘 LT', + nextDay : '내일 LT', + nextWeek : 'dddd LT', + lastDay : '어제 LT', + lastWeek : '지난주 dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s 후', + past : '%s 전', + s : '몇 초', + ss : '%d초', + m : '1분', + mm : '%d분', + h : '한 시간', + hh : '%d시간', + d : '하루', + dd : '%d일', + M : '한 달', + MM : '%d달', + y : '일 년', + yy : '%d년' + }, + dayOfMonthOrdinalParse : /\d{1,2}일/, + ordinal : '%d일', + meridiemParse : /오전|오후/, + isPM : function (token) { + return token === '오후'; + }, + meridiem : function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + } +}); + +//! moment.js locale configuration +//! locale : Kyrgyz [ky] +//! author : Chyngyz Arystan uulu : https://github.com/chyngyz + + +var suffixes$2 = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү' +}; + +moment.defineLocale('ky', { + months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'), + weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгүн саат] LT', + nextDay : '[Эртең саат] LT', + nextWeek : 'dddd [саат] LT', + lastDay : '[Кече саат] LT', + lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ичинде', + past : '%s мурун', + s : 'бирнече секунд', + m : 'бир мүнөт', + mm : '%d мүнөт', + h : 'бир саат', + hh : '%d саат', + d : 'бир күн', + dd : '%d күн', + M : 'бир ай', + MM : '%d ай', + y : 'бир жыл', + yy : '%d жыл' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Luxembourgish [lb] +//! author : mweimerskirch : https://github.com/mweimerskirch +//! author : David Raison : https://github.com/kwisatz + +function processRelativeTime$5(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eng Minutt', 'enger Minutt'], + 'h': ['eng Stonn', 'enger Stonn'], + 'd': ['een Dag', 'engem Dag'], + 'M': ['ee Mount', 'engem Mount'], + 'y': ['ee Joer', 'engem Joer'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} +function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; +} +function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; +} +/** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ +function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } +} + +moment.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]' + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + } + }, + relativeTime : { + future : processFutureTime, + past : processPastTime, + s : 'e puer Sekonnen', + m : processRelativeTime$5, + mm : '%d Minutten', + h : processRelativeTime$5, + hh : '%d Stonnen', + d : processRelativeTime$5, + dd : '%d Deeg', + M : processRelativeTime$5, + MM : '%d Méint', + y : processRelativeTime$5, + yy : '%d Joer' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Lao [lo] +//! author : Ryan Hart : https://github.com/ryanhart2 + +moment.defineLocale('lo', { + months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'ວັນdddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar : { + sameDay : '[ມື້ນີ້ເວລາ] LT', + nextDay : '[ມື້ອື່ນເວລາ] LT', + nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay : '[ມື້ວານນີ້ເວລາ] LT', + lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ອີກ %s', + past : '%sຜ່ານມາ', + s : 'ບໍ່ເທົ່າໃດວິນາທີ', + m : '1 ນາທີ', + mm : '%d ນາທີ', + h : '1 ຊົ່ວໂມງ', + hh : '%d ຊົ່ວໂມງ', + d : '1 ມື້', + dd : '%d ມື້', + M : '1 ເດືອນ', + MM : '%d ເດືອນ', + y : '1 ປີ', + yy : '%d ປີ' + }, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, + ordinal : function (number) { + return 'ທີ່' + number; + } +}); + +//! moment.js locale configuration +//! locale : Lithuanian [lt] +//! author : Mindaugas Mozūras : https://github.com/mmozuras + +var units = { + 'm' : 'minutė_minutės_minutę', + 'mm': 'minutės_minučių_minutes', + 'h' : 'valanda_valandos_valandą', + 'hh': 'valandos_valandų_valandas', + 'd' : 'diena_dienos_dieną', + 'dd': 'dienos_dienų_dienas', + 'M' : 'mėnuo_mėnesio_mėnesį', + 'MM': 'mėnesiai_mėnesių_mėnesius', + 'y' : 'metai_metų_metus', + 'yy': 'metai_metų_metus' +}; +function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } +} +function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); +} +function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); +} +function forms(key) { + return units[key].split('_'); +} +function translate$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return result + translateSingular(number, withoutSuffix, key[0], isFuture); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } +} +moment.defineLocale('lt', { + months : { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/ + }, + monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays : { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'), + isFormat: /dddd HH:mm/ + }, + weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), + weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY [m.] MMMM D [d.]', + LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l : 'YYYY-MM-DD', + ll : 'YYYY [m.] MMMM D [d.]', + lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' + }, + calendar : { + sameDay : '[Šiandien] LT', + nextDay : '[Rytoj] LT', + nextWeek : 'dddd LT', + lastDay : '[Vakar] LT', + lastWeek : '[Praėjusį] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'po %s', + past : 'prieš %s', + s : translateSeconds, + m : translateSingular, + mm : translate$6, + h : translateSingular, + hh : translate$6, + d : translateSingular, + dd : translate$6, + M : translateSingular, + MM : translate$6, + y : translateSingular, + yy : translate$6 + }, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, + ordinal : function (number) { + return number + '-oji'; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Latvian [lv] +//! author : Kristaps Karlsons : https://github.com/skakri +//! author : Jānis Elmeris : https://github.com/JanisE + +var units$1 = { + 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), + 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), + 'h': 'stundas_stundām_stunda_stundas'.split('_'), + 'hh': 'stundas_stundām_stunda_stundas'.split('_'), + 'd': 'dienas_dienām_diena_dienas'.split('_'), + 'dd': 'dienas_dienām_diena_dienas'.split('_'), + 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + 'y': 'gada_gadiem_gads_gadi'.split('_'), + 'yy': 'gada_gadiem_gads_gadi'.split('_') +}; +/** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ +function format(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minūte", "3 minūtes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minūtes" as in "pēc 21 minūtes". + // E.g. "3 minūtēm" as in "pēc 3 minūtēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } +} +function relativeTimeWithPlural$1(number, withoutSuffix, key) { + return number + ' ' + format(units$1[key], number, withoutSuffix); +} +function relativeTimeWithSingular(number, withoutSuffix, key) { + return format(units$1[key], number, withoutSuffix); +} +function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; +} + +moment.defineLocale('lv', { + months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'), + weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY.', + LL : 'YYYY. [gada] D. MMMM', + LLL : 'YYYY. [gada] D. MMMM, HH:mm', + LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm' + }, + calendar : { + sameDay : '[Šodien pulksten] LT', + nextDay : '[Rīt pulksten] LT', + nextWeek : 'dddd [pulksten] LT', + lastDay : '[Vakar pulksten] LT', + lastWeek : '[Pagājušā] dddd [pulksten] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'pēc %s', + past : 'pirms %s', + s : relativeSeconds, + m : relativeTimeWithSingular, + mm : relativeTimeWithPlural$1, + h : relativeTimeWithSingular, + hh : relativeTimeWithPlural$1, + d : relativeTimeWithSingular, + dd : relativeTimeWithPlural$1, + M : relativeTimeWithSingular, + MM : relativeTimeWithPlural$1, + y : relativeTimeWithSingular, + yy : relativeTimeWithPlural$1 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Montenegrin [me] +//! author : Miodrag Nikač : https://github.com/miodragnikac + +var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +moment.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact : true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedjelje] [u] LT', + '[prošlog] [ponedjeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srijede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'nekoliko sekundi', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'dan', + dd : translator.translate, + M : 'mjesec', + MM : translator.translate, + y : 'godinu', + yy : translator.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Maori [mi] +//! author : John Corrigan : https://github.com/johnideal + +moment.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm' + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Macedonian [mk] +//! author : Borislav Mickov : https://github.com/B0k0 + +moment.defineLocale('mk', { + months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'), + weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Денес во] LT', + nextDay : '[Утре во] LT', + nextWeek : '[Во] dddd [во] LT', + lastDay : '[Вчера во] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'после %s', + past : 'пред %s', + s : 'неколку секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дена', + M : 'месец', + MM : '%d месеци', + y : 'година', + yy : '%d години' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malayalam [ml] +//! author : Floyd Pink : https://github.com/floydpink + +moment.defineLocale('ml', { + months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'), + monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'), + monthsParseExact : true, + weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'), + weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + longDateFormat : { + LT : 'A h:mm -നു', + LTS : 'A h:mm:ss -നു', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm -നു', + LLLL : 'dddd, D MMMM YYYY, A h:mm -നു' + }, + calendar : { + sameDay : '[ഇന്ന്] LT', + nextDay : '[നാളെ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ഇന്നലെ] LT', + lastWeek : '[കഴിഞ്ഞ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s കഴിഞ്ഞ്', + past : '%s മുൻപ്', + s : 'അൽപ നിമിഷങ്ങൾ', + m : 'ഒരു മിനിറ്റ്', + mm : '%d മിനിറ്റ്', + h : 'ഒരു മണിക്കൂർ', + hh : '%d മണിക്കൂർ', + d : 'ഒരു ദിവസം', + dd : '%d ദിവസം', + M : 'ഒരു മാസം', + MM : '%d മാസം', + y : 'ഒരു വർഷം', + yy : '%d വർഷം' + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + } +}); + +//! moment.js locale configuration +//! locale : Marathi [mr] +//! author : Harshad Kale : https://github.com/kalehv +//! author : Vivek Athalye : https://github.com/vnathalye + +var symbolMap$8 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$7 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +function relativeTimeMr(number, withoutSuffix, string, isFuture) +{ + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': output = 'काही सेकंद'; break; + case 'm': output = 'एक मिनिट'; break; + case 'mm': output = '%d मिनिटे'; break; + case 'h': output = 'एक तास'; break; + case 'hh': output = '%d तास'; break; + case 'd': output = 'एक दिवस'; break; + case 'dd': output = '%d दिवस'; break; + case 'M': output = 'एक महिना'; break; + case 'MM': output = '%d महिने'; break; + case 'y': output = 'एक वर्ष'; break; + case 'yy': output = '%d वर्षे'; break; + } + } + else { + switch (string) { + case 's': output = 'काही सेकंदां'; break; + case 'm': output = 'एका मिनिटा'; break; + case 'mm': output = '%d मिनिटां'; break; + case 'h': output = 'एका तासा'; break; + case 'hh': output = '%d तासां'; break; + case 'd': output = 'एका दिवसा'; break; + case 'dd': output = '%d दिवसां'; break; + case 'M': output = 'एका महिन्या'; break; + case 'MM': output = '%d महिन्यां'; break; + case 'y': output = 'एका वर्षा'; break; + case 'yy': output = '%d वर्षां'; break; + } + } + return output.replace(/%d/i, number); +} + +moment.defineLocale('mr', { + months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'), + monthsParseExact : true, + weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm वाजता', + LTS : 'A h:mm:ss वाजता', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm वाजता', + LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[उद्या] LT', + nextWeek : 'dddd, LT', + lastDay : '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$7[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$8[match]; + }); + }, + meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात्री') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळी') { + return hour; + } else if (meridiem === 'दुपारी') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'सायंकाळी') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात्री'; + } else if (hour < 10) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malay [ms-my] +//! note : DEPRECATED, the correct one is [ms] +//! author : Weldan Jamili : https://github.com/weldan + +moment.defineLocale('ms-my', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malay [ms] +//! author : Weldan Jamili : https://github.com/weldan + +moment.defineLocale('ms', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Burmese [my] +//! author : Squar team, mysquar.com +//! author : David Rossellat : https://github.com/gholadr +//! author : Tin Aung Lin : https://github.com/thanyawzinmin + +var symbolMap$9 = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀' +}; +var numberMap$8 = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0' +}; + +moment.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L' + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်' + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap$8[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$9[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Norwegian Bokmål [nb] +//! authors : Espen Hovlandsdal : https://github.com/rexxars +//! Sigurd Gartmann : https://github.com/sigurdga + +moment.defineLocale('nb', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'noen sekunder', + m : 'ett minutt', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dager', + M : 'en måned', + MM : '%d måneder', + y : 'ett år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Nepalese [ne] +//! author : suvash : https://github.com/suvash + +var symbolMap$10 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$9 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +moment.defineLocale('ne', { + months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'), + monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'), + monthsParseExact : true, + weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'), + weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'Aको h:mm बजे', + LTS : 'Aको h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, Aको h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$9[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$10[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[भोलि] LT', + nextWeek : '[आउँदो] dddd[,] LT', + lastDay : '[हिजो] LT', + lastWeek : '[गएको] dddd[,] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%sमा', + past : '%s अगाडि', + s : 'केही क्षण', + m : 'एक मिनेट', + mm : '%d मिनेट', + h : 'एक घण्टा', + hh : '%d घण्टा', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महिना', + MM : '%d महिना', + y : 'एक बर्ष', + yy : '%d बर्ष' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Dutch (Belgium) [nl-be] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'); +var monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +moment.defineLocale('nl-be', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots$1; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$1[m.month()]; + } else { + return monthsShortWithDots$1[m.month()]; + } + }, + + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Dutch [nl] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'); +var monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse$1 = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex$1 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +moment.defineLocale('nl', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots$2; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$2[m.month()]; + } else { + return monthsShortWithDots$2[m.month()]; + } + }, + + monthsRegex: monthsRegex$1, + monthsShortRegex: monthsRegex$1, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse$1, + longMonthsParse : monthsParse$1, + shortMonthsParse : monthsParse$1, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Nynorsk [nn] +//! author : https://github.com/mechuwind + +moment.defineLocale('nn', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'), + weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s sidan', + s : 'nokre sekund', + m : 'eit minutt', + mm : '%d minutt', + h : 'ein time', + hh : '%d timar', + d : 'ein dag', + dd : '%d dagar', + M : 'ein månad', + MM : '%d månader', + y : 'eit år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Punjabi (India) [pa-in] +//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit + +var symbolMap$11 = { + '1': '੧', + '2': '੨', + '3': '੩', + '4': '੪', + '5': '੫', + '6': '੬', + '7': '੭', + '8': '੮', + '9': '੯', + '0': '੦' +}; +var numberMap$10 = { + '੧': '1', + '੨': '2', + '੩': '3', + '੪': '4', + '੫': '5', + '੬': '6', + '੭': '7', + '੮': '8', + '੯': '9', + '੦': '0' +}; + +moment.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi. + months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'), + weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat : { + LT : 'A h:mm ਵਜੇ', + LTS : 'A h:mm:ss ਵਜੇ', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ' + }, + calendar : { + sameDay : '[ਅਜ] LT', + nextDay : '[ਕਲ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ਕਲ] LT', + lastWeek : '[ਪਿਛਲੇ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ਵਿੱਚ', + past : '%s ਪਿਛਲੇ', + s : 'ਕੁਝ ਸਕਿੰਟ', + m : 'ਇਕ ਮਿੰਟ', + mm : '%d ਮਿੰਟ', + h : 'ਇੱਕ ਘੰਟਾ', + hh : '%d ਘੰਟੇ', + d : 'ਇੱਕ ਦਿਨ', + dd : '%d ਦਿਨ', + M : 'ਇੱਕ ਮਹੀਨਾ', + MM : '%d ਮਹੀਨੇ', + y : 'ਇੱਕ ਸਾਲ', + yy : '%d ਸਾਲ' + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap$10[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$11[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Polish [pl] +//! author : Rafal Hirsz : https://github.com/evoL + +var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'); +var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'); +function plural$3(n) { + return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1); +} +function translate$7(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural$3(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural$3(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural$3(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural$3(number) ? 'lata' : 'lat'); + } +} + +moment.defineLocale('pl', { + months : function (momentToFormat, format) { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')'; + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'), + weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: '[W] dddd [o] LT', + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : '%s temu', + s : 'kilka sekund', + m : translate$7, + mm : translate$7, + h : translate$7, + hh : translate$7, + d : '1 dzień', + dd : '%d dni', + M : 'miesiąc', + MM : translate$7, + y : 'rok', + yy : translate$7 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Portuguese (Brazil) [pt-br] +//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira + +moment.defineLocale('pt-br', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : '%s atrás', + s : 'poucos segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal : '%dº' +}); + +//! moment.js locale configuration +//! locale : Portuguese [pt] +//! author : Jefferson : https://github.com/jalex79 + +moment.defineLocale('pt', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : 'há %s', + s : 'segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Romanian [ro] +//! author : Vlad Gurdiga : https://github.com/gurdiga +//! author : Valentin Agachi : https://github.com/avaly + +function relativeTimeWithPlural$2(number, withoutSuffix, key) { + var format = { + 'mm': 'minute', + 'hh': 'ore', + 'dd': 'zile', + 'MM': 'luni', + 'yy': 'ani' + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; +} + +moment.defineLocale('ro', { + months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'), + monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'peste %s', + past : '%s în urmă', + s : 'câteva secunde', + m : 'un minut', + mm : relativeTimeWithPlural$2, + h : 'o oră', + hh : relativeTimeWithPlural$2, + d : 'o zi', + dd : relativeTimeWithPlural$2, + M : 'o lună', + MM : relativeTimeWithPlural$2, + y : 'un an', + yy : relativeTimeWithPlural$2 + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Russian [ru] +//! author : Viktorminator : https://github.com/Viktorminator +//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Коренберг Марк : https://github.com/socketpair + +function plural$4(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural$3(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + 'hh': 'час_часа_часов', + 'dd': 'день_дня_дней', + 'MM': 'месяц_месяца_месяцев', + 'yy': 'год_года_лет' + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } + else { + return number + ' ' + plural$4(format[key], +number); + } +} +var monthsParse$2 = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; + +// http://new.gramota.ru/spravka/rules/139-prop : § 103 +// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 +// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 +moment.defineLocale('ru', { + months : { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_') + }, + monthsShort : { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_') + }, + weekdays : { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/ + }, + weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse : monthsParse$2, + longMonthsParse : monthsParse$2, + shortMonthsParse : monthsParse$2, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соотвествует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сегодня в] LT', + nextDay: '[Завтра в] LT', + lastDay: '[Вчера в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'через %s', + past : '%s назад', + s : 'несколько секунд', + m : relativeTimeWithPlural$3, + mm : relativeTimeWithPlural$3, + h : 'час', + hh : relativeTimeWithPlural$3, + d : 'день', + dd : relativeTimeWithPlural$3, + M : 'месяц', + MM : relativeTimeWithPlural$3, + y : 'год', + yy : relativeTimeWithPlural$3 + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM : function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Sindhi [sd] +//! author : Narain Sagar : https://github.com/narainsagar + +var months$5 = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر' +]; +var days = [ + 'آچر', + 'سومر', + 'اڱارو', + 'اربع', + 'خميس', + 'جمع', + 'ڇنڇر' +]; + +moment.defineLocale('sd', { + months : months$5, + monthsShort : months$5, + weekdays : days, + weekdaysShort : days, + weekdaysMin : days, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[اڄ] LT', + nextDay : '[سڀاڻي] LT', + nextWeek : 'dddd [اڳين هفتي تي] LT', + lastDay : '[ڪالهه] LT', + lastWeek : '[گزريل هفتي] dddd [تي] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s پوء', + past : '%s اڳ', + s : 'چند سيڪنڊ', + m : 'هڪ منٽ', + mm : '%d منٽ', + h : 'هڪ ڪلاڪ', + hh : '%d ڪلاڪ', + d : 'هڪ ڏينهن', + dd : '%d ڏينهن', + M : 'هڪ مهينو', + MM : '%d مهينا', + y : 'هڪ سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Northern Sami [se] +//! authors : Bård Rolstad Henriksen : https://github.com/karamell + + +moment.defineLocale('se', { + months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), + monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), + weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), + weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin : 's_v_m_g_d_b_L'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'MMMM D. [b.] YYYY', + LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' + }, + calendar : { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s geažes', + past : 'maŋit %s', + s : 'moadde sekunddat', + m : 'okta minuhta', + mm : '%d minuhtat', + h : 'okta diimmu', + hh : '%d diimmut', + d : 'okta beaivi', + dd : '%d beaivvit', + M : 'okta mánnu', + MM : '%d mánut', + y : 'okta jahki', + yy : '%d jagit' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Sinhalese [si] +//! author : Sampath Sitinamaluwa : https://github.com/sampathsris + +/*jshint -W100*/ +moment.defineLocale('si', { + months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'), + monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'), + weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'), + weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'a h:mm', + LTS : 'a h:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY MMMM D', + LLL : 'YYYY MMMM D, a h:mm', + LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss' + }, + calendar : { + sameDay : '[අද] LT[ට]', + nextDay : '[හෙට] LT[ට]', + nextWeek : 'dddd LT[ට]', + lastDay : '[ඊයේ] LT[ට]', + lastWeek : '[පසුගිය] dddd LT[ට]', + sameElse : 'L' + }, + relativeTime : { + future : '%sකින්', + past : '%sකට පෙර', + s : 'තත්පර කිහිපය', + m : 'මිනිත්තුව', + mm : 'මිනිත්තු %d', + h : 'පැය', + hh : 'පැය %d', + d : 'දිනය', + dd : 'දින %d', + M : 'මාසය', + MM : 'මාස %d', + y : 'වසර', + yy : 'වසර %d' + }, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, + ordinal : function (number) { + return number + ' වැනි'; + }, + meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM : function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + } +}); + +//! moment.js locale configuration +//! locale : Slovak [sk] +//! author : Martin Minka : https://github.com/k2s +//! based on work of petrbela : https://github.com/petrbela + +var months$6 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'); +var monthsShort$4 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); +function plural$5(n) { + return (n > 1) && (n < 5); +} +function translate$8(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + break; + } +} + +moment.defineLocale('sk', { + months : months$6, + monthsShort : monthsShort$4, + weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pred %s', + s : translate$8, + m : translate$8, + mm : translate$8, + h : translate$8, + hh : translate$8, + d : translate$8, + dd : translate$8, + M : translate$8, + MM : translate$8, + y : translate$8, + yy : translate$8 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Slovenian [sl] +//! author : Robert Sedovšek : https://github.com/sedovsek + +function processRelativeTime$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami'; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } +} + +moment.defineLocale('sl', { + months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danes ob] LT', + nextDay : '[jutri ob] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay : '[včeraj ob] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + return '[prejšnjo] [nedeljo] [ob] LT'; + case 3: + return '[prejšnjo] [sredo] [ob] LT'; + case 6: + return '[prejšnjo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'čez %s', + past : 'pred %s', + s : processRelativeTime$6, + m : processRelativeTime$6, + mm : processRelativeTime$6, + h : processRelativeTime$6, + hh : processRelativeTime$6, + d : processRelativeTime$6, + dd : processRelativeTime$6, + M : processRelativeTime$6, + MM : processRelativeTime$6, + y : processRelativeTime$6, + yy : processRelativeTime$6 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Albanian [sq] +//! author : Flakërim Ismani : https://github.com/flakerimi +//! author : Menelion Elensúle : https://github.com/Oire +//! author : Oerd Cukalla : https://github.com/oerd + +moment.defineLocale('sq', { + months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), + monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), + weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact : true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem : function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Sot në] LT', + nextDay : '[Nesër në] LT', + nextWeek : 'dddd [në] LT', + lastDay : '[Dje në] LT', + lastWeek : 'dddd [e kaluar në] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'në %s', + past : '%s më parë', + s : 'disa sekonda', + m : 'një minutë', + mm : '%d minuta', + h : 'një orë', + hh : '%d orë', + d : 'një ditë', + dd : '%d ditë', + M : 'një muaj', + MM : '%d muaj', + y : 'një vit', + yy : '%d vite' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Serbian Cyrillic [sr-cyrl] +//! author : Milan Janačković : https://github.com/milan-j + +var translator$1 = { + words: { //Different grammatical cases + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$1.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator$1.correctGrammaticalCase(number, wordKey); + } + } +}; + +moment.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay : '[јуче у] LT', + lastWeek : function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'за %s', + past : 'пре %s', + s : 'неколико секунди', + m : translator$1.translate, + mm : translator$1.translate, + h : translator$1.translate, + hh : translator$1.translate, + d : 'дан', + dd : translator$1.translate, + M : 'месец', + MM : translator$1.translate, + y : 'годину', + yy : translator$1.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Serbian [sr] +//! author : Milan Janačković : https://github.com/milan-j + +var translator$2 = { + words: { //Different grammatical cases + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$2.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator$2.correctGrammaticalCase(number, wordKey); + } + } +}; + +moment.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pre %s', + s : 'nekoliko sekundi', + m : translator$2.translate, + mm : translator$2.translate, + h : translator$2.translate, + hh : translator$2.translate, + d : 'dan', + dd : translator$2.translate, + M : 'mesec', + MM : translator$2.translate, + y : 'godinu', + yy : translator$2.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : siSwati [ss] +//! author : Nicolai Davies : https://github.com/nicolaidavies + + +moment.defineLocale('ss', { + months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), + monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), + weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Namuhla nga] LT', + nextDay : '[Kusasa nga] LT', + nextWeek : 'dddd [nga] LT', + lastDay : '[Itolo nga] LT', + lastWeek : 'dddd [leliphelile] [nga] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'nga %s', + past : 'wenteka nga %s', + s : 'emizuzwana lomcane', + m : 'umzuzu', + mm : '%d emizuzu', + h : 'lihora', + hh : '%d emahora', + d : 'lilanga', + dd : '%d emalanga', + M : 'inyanga', + MM : '%d tinyanga', + y : 'umnyaka', + yy : '%d iminyaka' + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : '%d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Swedish [sv] +//! author : Jens Alm : https://github.com/ulmus + +moment.defineLocale('sv', { + months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D MMMM YYYY [kl.] HH:mm', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: '[På] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : 'för %s sedan', + s : 'några sekunder', + m : 'en minut', + mm : '%d minuter', + h : 'en timme', + hh : '%d timmar', + d : 'en dag', + dd : '%d dagar', + M : 'en månad', + MM : '%d månader', + y : 'ett år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}(e|a)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'e' : + (b === 1) ? 'a' : + (b === 2) ? 'a' : + (b === 3) ? 'e' : 'e'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Swahili [sw] +//! author : Fahad Kassim : https://github.com/fadsel + +moment.defineLocale('sw', { + months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), + weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[leo saa] LT', + nextDay : '[kesho saa] LT', + nextWeek : '[wiki ijayo] dddd [saat] LT', + lastDay : '[jana] LT', + lastWeek : '[wiki iliyopita] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s baadaye', + past : 'tokea %s', + s : 'hivi punde', + m : 'dakika moja', + mm : 'dakika %d', + h : 'saa limoja', + hh : 'masaa %d', + d : 'siku moja', + dd : 'masiku %d', + M : 'mwezi mmoja', + MM : 'miezi %d', + y : 'mwaka mmoja', + yy : 'miaka %d' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tamil [ta] +//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 + +var symbolMap$12 = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦' +}; +var numberMap$11 = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0' +}; + +moment.defineLocale('ta', { + months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'), + weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), + weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, HH:mm', + LLLL : 'dddd, D MMMM YYYY, HH:mm' + }, + calendar : { + sameDay : '[இன்று] LT', + nextDay : '[நாளை] LT', + nextWeek : 'dddd, LT', + lastDay : '[நேற்று] LT', + lastWeek : '[கடந்த வாரம்] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s இல்', + past : '%s முன்', + s : 'ஒரு சில விநாடிகள்', + m : 'ஒரு நிமிடம்', + mm : '%d நிமிடங்கள்', + h : 'ஒரு மணி நேரம்', + hh : '%d மணி நேரம்', + d : 'ஒரு நாள்', + dd : '%d நாட்கள்', + M : 'ஒரு மாதம்', + MM : '%d மாதங்கள்', + y : 'ஒரு வருடம்', + yy : '%d ஆண்டுகள்' + }, + dayOfMonthOrdinalParse: /\d{1,2}வது/, + ordinal : function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap$11[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$12[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem : function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Telugu [te] +//! author : Krishna Chaitanya Thota : https://github.com/kcthota + +moment.defineLocale('te', { + months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'), + monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'), + monthsParseExact : true, + weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'), + weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[నేడు] LT', + nextDay : '[రేపు] LT', + nextWeek : 'dddd, LT', + lastDay : '[నిన్న] LT', + lastWeek : '[గత] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s లో', + past : '%s క్రితం', + s : 'కొన్ని క్షణాలు', + m : 'ఒక నిమిషం', + mm : '%d నిమిషాలు', + h : 'ఒక గంట', + hh : '%d గంటలు', + d : 'ఒక రోజు', + dd : '%d రోజులు', + M : 'ఒక నెల', + MM : '%d నెలలు', + y : 'ఒక సంవత్సరం', + yy : '%d సంవత్సరాలు' + }, + dayOfMonthOrdinalParse : /\d{1,2}వ/, + ordinal : '%dవ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tetun Dili (East Timor) [tet] +//! author : Joshua Brooks : https://github.com/joshbrooks +//! author : Onorio De J. Afonso : https://github.com/marobo + +moment.defineLocale('tet', { + months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'), + weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'), + weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'iha %s', + past : '%s liuba', + s : 'minutu balun', + m : 'minutu ida', + mm : 'minutus %d', + h : 'horas ida', + hh : 'horas %d', + d : 'loron ida', + dd : 'loron %d', + M : 'fulan ida', + MM : 'fulan %d', + y : 'tinan ida', + yy : 'tinan %d' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Thai [th] +//! author : Kridsada Thanabulpong : https://github.com/sirn + +moment.defineLocale('th', { + months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), + monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'), + monthsParseExact: true, + weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY เวลา H:mm', + LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm' + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar : { + sameDay : '[วันนี้ เวลา] LT', + nextDay : '[พรุ่งนี้ เวลา] LT', + nextWeek : 'dddd[หน้า เวลา] LT', + lastDay : '[เมื่อวานนี้ เวลา] LT', + lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'อีก %s', + past : '%sที่แล้ว', + s : 'ไม่กี่วินาที', + m : '1 นาที', + mm : '%d นาที', + h : '1 ชั่วโมง', + hh : '%d ชั่วโมง', + d : '1 วัน', + dd : '%d วัน', + M : '1 เดือน', + MM : '%d เดือน', + y : '1 ปี', + yy : '%d ปี' + } +}); + +//! moment.js locale configuration +//! locale : Tagalog (Philippines) [tl-ph] +//! author : Dan Hagman : https://github.com/hagmandan + +moment.defineLocale('tl-ph', { + months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), + monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), + weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'MM/D/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY HH:mm', + LLLL : 'dddd, MMMM DD, YYYY HH:mm' + }, + calendar : { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L' + }, + relativeTime : { + future : 'sa loob ng %s', + past : '%s ang nakalipas', + s : 'ilang segundo', + m : 'isang minuto', + mm : '%d minuto', + h : 'isang oras', + hh : '%d oras', + d : 'isang araw', + dd : '%d araw', + M : 'isang buwan', + MM : '%d buwan', + y : 'isang taon', + yy : '%d taon' + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Klingon [tlh] +//! author : Dominika Kruk : https://github.com/amaranthrose + +var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + +function translateFuture(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'leS' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'waQ' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'nem' : + time + ' pIq'; + return time; +} + +function translatePast(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'Hu’' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'wen' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'ben' : + time + ' ret'; + return time; +} + +function translate$9(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } +} + +function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[one]; + } + return (word === '') ? 'pagh' : word; +} + +moment.defineLocale('tlh', { + months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'), + monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'), + monthsParseExact : true, + weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L' + }, + relativeTime : { + future : translateFuture, + past : translatePast, + s : 'puS lup', + m : 'wa’ tup', + mm : translate$9, + h : 'wa’ rep', + hh : translate$9, + d : 'wa’ jaj', + dd : translate$9, + M : 'wa’ jar', + MM : translate$9, + y : 'wa’ DIS', + yy : translate$9 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Turkish [tr] +//! authors : Erhan Gundogan : https://github.com/erhangundogan, +//! Burak Yiğit Kaya: https://github.com/BYK + +var suffixes$3 = { + 1: '\'inci', + 5: '\'inci', + 8: '\'inci', + 70: '\'inci', + 80: '\'inci', + 2: '\'nci', + 7: '\'nci', + 20: '\'nci', + 50: '\'nci', + 3: '\'üncü', + 4: '\'üncü', + 100: '\'üncü', + 6: '\'ncı', + 9: '\'uncu', + 10: '\'uncu', + 30: '\'uncu', + 60: '\'ıncı', + 90: '\'ıncı' +}; + +moment.defineLocale('tr', { + months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), + monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), + weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[yarın saat] LT', + nextWeek : '[haftaya] dddd [saat] LT', + lastDay : '[dün] LT', + lastWeek : '[geçen hafta] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s önce', + s : 'birkaç saniye', + m : 'bir dakika', + mm : '%d dakika', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir yıl', + yy : '%d yıl' + }, + dayOfMonthOrdinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '\'ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$3[a] || suffixes$3[b] || suffixes$3[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Talossan [tzl] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +//! author : Iustì Canun + +// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. +// This is currently too difficult (maybe even impossible) to add. +moment.defineLocale('tzl', { + months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), + monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM [dallas] YYYY', + LLL : 'D. MMMM [dallas] YYYY HH.mm', + LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' + }, + meridiemParse: /d\'o|d\'a/i, + isPM : function (input) { + return 'd\'o' === input.toLowerCase(); + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'd\'o' : 'D\'O'; + } else { + return isLower ? 'd\'a' : 'D\'A'; + } + }, + calendar : { + sameDay : '[oxhi à] LT', + nextDay : '[demà à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[ieiri à] LT', + lastWeek : '[sür el] dddd [lasteu à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'osprei %s', + past : 'ja%s', + s : processRelativeTime$7, + m : processRelativeTime$7, + mm : processRelativeTime$7, + h : processRelativeTime$7, + hh : processRelativeTime$7, + d : processRelativeTime$7, + dd : processRelativeTime$7, + M : processRelativeTime$7, + MM : processRelativeTime$7, + y : processRelativeTime$7, + yy : processRelativeTime$7 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +function processRelativeTime$7(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['viensas secunds', '\'iensas secunds'], + 'm': ['\'n míut', '\'iens míut'], + 'mm': [number + ' míuts', '' + number + ' míuts'], + 'h': ['\'n þora', '\'iensa þora'], + 'hh': [number + ' þoras', '' + number + ' þoras'], + 'd': ['\'n ziua', '\'iensa ziua'], + 'dd': [number + ' ziuas', '' + number + ' ziuas'], + 'M': ['\'n mes', '\'iens mes'], + 'MM': [number + ' mesen', '' + number + ' mesen'], + 'y': ['\'n ar', '\'iens ar'], + 'yy': [number + ' ars', '' + number + ' ars'] + }; + return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]); +} + +//! moment.js locale configuration +//! locale : Central Atlas Tamazight Latin [tzm-latn] +//! author : Abdel Said : https://github.com/abdelsaid + +moment.defineLocale('tzm-latn', { + months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'dadkh s yan %s', + past : 'yan %s', + s : 'imik', + m : 'minuḍ', + mm : '%d minuḍ', + h : 'saɛa', + hh : '%d tassaɛin', + d : 'ass', + dd : '%d ossan', + M : 'ayowr', + MM : '%d iyyirn', + y : 'asgas', + yy : '%d isgasn' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Central Atlas Tamazight [tzm] +//! author : Abdel Said : https://github.com/abdelsaid + +moment.defineLocale('tzm', { + months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past : 'ⵢⴰⵏ %s', + s : 'ⵉⵎⵉⴽ', + m : 'ⵎⵉⵏⵓⴺ', + mm : '%d ⵎⵉⵏⵓⴺ', + h : 'ⵙⴰⵄⴰ', + hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d : 'ⴰⵙⵙ', + dd : '%d oⵙⵙⴰⵏ', + M : 'ⴰⵢoⵓⵔ', + MM : '%d ⵉⵢⵢⵉⵔⵏ', + y : 'ⴰⵙⴳⴰⵙ', + yy : '%d ⵉⵙⴳⴰⵙⵏ' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Ukrainian [uk] +//! author : zemlanin : https://github.com/zemlanin +//! Author : Menelion Elensúle : https://github.com/Oire + +function plural$6(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural$4(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + 'dd': 'день_дні_днів', + 'MM': 'місяць_місяці_місяців', + 'yy': 'рік_роки_років' + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } + else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } + else { + return number + ' ' + plural$6(format[key], +number); + } +} +function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), + 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), + 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') + }; + + if (!m) { + return weekdays['nominative']; + } + + var nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? + 'accusative' : + ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? + 'genitive' : + 'nominative'); + return weekdays[nounCase][m.day()]; +} +function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; +} + +moment.defineLocale('uk', { + months : { + 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'), + 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_') + }, + monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'), + weekdays : weekdaysCaseReplace, + weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY р.', + LLL : 'D MMMM YYYY р., HH:mm', + LLLL : 'dddd, D MMMM YYYY р., HH:mm' + }, + calendar : { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'за %s', + past : '%s тому', + s : 'декілька секунд', + m : relativeTimeWithPlural$4, + mm : relativeTimeWithPlural$4, + h : 'годину', + hh : relativeTimeWithPlural$4, + d : 'день', + dd : relativeTimeWithPlural$4, + M : 'місяць', + MM : relativeTimeWithPlural$4, + y : 'рік', + yy : relativeTimeWithPlural$4 + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Urdu [ur] +//! author : Sawood Alam : https://github.com/ibnesayeed +//! author : Zack : https://github.com/ZackVision + +var months$7 = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر' +]; +var days$1 = [ + 'اتوار', + 'پیر', + 'منگل', + 'بدھ', + 'جمعرات', + 'جمعہ', + 'ہفتہ' +]; + +moment.defineLocale('ur', { + months : months$7, + monthsShort : months$7, + weekdays : days$1, + weekdaysShort : days$1, + weekdaysMin : days$1, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[آج بوقت] LT', + nextDay : '[کل بوقت] LT', + nextWeek : 'dddd [بوقت] LT', + lastDay : '[گذشتہ روز بوقت] LT', + lastWeek : '[گذشتہ] dddd [بوقت] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s بعد', + past : '%s قبل', + s : 'چند سیکنڈ', + m : 'ایک منٹ', + mm : '%d منٹ', + h : 'ایک گھنٹہ', + hh : '%d گھنٹے', + d : 'ایک دن', + dd : '%d دن', + M : 'ایک ماہ', + MM : '%d ماہ', + y : 'ایک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Uzbek Latin [uz-latn] +//! author : Rasulbek Mirzayev : github.com/Rasulbeeek + +moment.defineLocale('uz-latn', { + months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'), + monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'), + weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Bugun soat] LT [da]', + nextDay : '[Ertaga] LT [da]', + nextWeek : 'dddd [kuni soat] LT [da]', + lastDay : '[Kecha soat] LT [da]', + lastWeek : '[O\'tgan] dddd [kuni soat] LT [da]', + sameElse : 'L' + }, + relativeTime : { + future : 'Yaqin %s ichida', + past : 'Bir necha %s oldin', + s : 'soniya', + m : 'bir daqiqa', + mm : '%d daqiqa', + h : 'bir soat', + hh : '%d soat', + d : 'bir kun', + dd : '%d kun', + M : 'bir oy', + MM : '%d oy', + y : 'bir yil', + yy : '%d yil' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Uzbek [uz] +//! author : Sardor Muminov : https://github.com/muminoff + +moment.defineLocale('uz', { + months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), + monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Бугун соат] LT [да]', + nextDay : '[Эртага] LT [да]', + nextWeek : 'dddd [куни соат] LT [да]', + lastDay : '[Кеча соат] LT [да]', + lastWeek : '[Утган] dddd [куни соат] LT [да]', + sameElse : 'L' + }, + relativeTime : { + future : 'Якин %s ичида', + past : 'Бир неча %s олдин', + s : 'фурсат', + m : 'бир дакика', + mm : '%d дакика', + h : 'бир соат', + hh : '%d соат', + d : 'бир кун', + dd : '%d кун', + M : 'бир ой', + MM : '%d ой', + y : 'бир йил', + yy : '%d йил' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Vietnamese [vi] +//! author : Bang Nguyen : https://github.com/bangnk + +moment.defineLocale('vi', { + months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), + monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), + monthsParseExact : true, + weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'), + weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact : true, + meridiemParse: /sa|ch/i, + isPM : function (input) { + return /^ch$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM [năm] YYYY', + LLL : 'D MMMM [năm] YYYY HH:mm', + LLLL : 'dddd, D MMMM [năm] YYYY HH:mm', + l : 'DD/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần rồi lúc] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s tới', + past : '%s trước', + s : 'vài giây', + m : 'một phút', + mm : '%d phút', + h : 'một giờ', + hh : '%d giờ', + d : 'một ngày', + dd : '%d ngày', + M : 'một tháng', + MM : '%d tháng', + y : 'một năm', + yy : '%d năm' + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Pseudo [x-pseudo] +//! author : Andrew Hood : https://github.com/andrewhood125 + +moment.defineLocale('x-pseudo', { + months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'), + monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'), + monthsParseExact : true, + weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'), + weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[T~ódá~ý át] LT', + nextDay : '[T~ómó~rró~w át] LT', + nextWeek : 'dddd [át] LT', + lastDay : '[Ý~ést~érdá~ý át] LT', + lastWeek : '[L~ást] dddd [át] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'í~ñ %s', + past : '%s á~gó', + s : 'á ~féw ~sécó~ñds', + m : 'á ~míñ~úté', + mm : '%d m~íñú~tés', + h : 'á~ñ hó~úr', + hh : '%d h~óúrs', + d : 'á ~dáý', + dd : '%d d~áýs', + M : 'á ~móñ~th', + MM : '%d m~óñt~hs', + y : 'á ~ýéár', + yy : '%d ý~éárs' + }, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Yoruba Nigeria [yo] +//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe + +moment.defineLocale('yo', { + months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'), + monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Ònì ni] LT', + nextDay : '[Ọ̀la ni] LT', + nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT', + lastDay : '[Àna ni] LT', + lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ní %s', + past : '%s kọjá', + s : 'ìsẹjú aayá die', + m : 'ìsẹjú kan', + mm : 'ìsẹjú %d', + h : 'wákati kan', + hh : 'wákati %d', + d : 'ọjọ́ kan', + dd : 'ọjọ́ %d', + M : 'osù kan', + MM : 'osù %d', + y : 'ọdún kan', + yy : 'ọdún %d' + }, + dayOfMonthOrdinalParse : /ọjọ́\s\d{1,2}/, + ordinal : 'ọjọ́ %d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chinese (China) [zh-cn] +//! author : suupic : https://github.com/suupic +//! author : Zeno Zeng : https://github.com/zenozeng + +moment.defineLocale('zh-cn', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日Ah点mm分', + LLLL : 'YYYY年MMMD日ddddAh点mm分', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || + meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime : { + future : '%s内', + past : '%s前', + s : '几秒', + m : '1 分钟', + mm : '%d 分钟', + h : '1 小时', + hh : '%d 小时', + d : '1 天', + dd : '%d 天', + M : '1 个月', + MM : '%d 个月', + y : '1 年', + yy : '%d 年' + }, + week : { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chinese (Hong Kong) [zh-hk] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +//! author : Konstantin : https://github.com/skfd + +moment.defineLocale('zh-hk', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 年', + yy : '%d 年' + } +}); + +//! moment.js locale configuration +//! locale : Chinese (Taiwan) [zh-tw] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris + +moment.defineLocale('zh-tw', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 年', + yy : '%d 年' + } +}); + +moment.locale('en'); + +return moment; + +}))); diff --git a/node_modules/moment/min/locales.min.js b/node_modules/moment/min/locales.min.js new file mode 100644 index 0000000..54698df --- /dev/null +++ b/node_modules/moment/min/locales.min.js @@ -0,0 +1,498 @@ +!function(a,b){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?b(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],b):b(a.moment)}(this,function(a){"use strict"; +//! moment.js locale configuration +//! locale : Belarusian [be] +//! author : Dmitry Demidov : https://github.com/demidov91 +//! author: Praleska: http://praleska.pro/ +//! Author : Menelion Elensúle : https://github.com/Oire +function b(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:c?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:c?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===d?c?"хвіліна":"хвіліну":"h"===d?c?"гадзіна":"гадзіну":a+" "+b(e[d],+a)} +//! moment.js locale configuration +//! locale : Breton [br] +//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou +function d(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+g(d[c],a)}function e(a){switch(f(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function f(a){return a>9?f(a%10):a}function g(a,b){return 2===b?h(a):a}function h(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)} +//! moment.js locale configuration +//! locale : Bosnian [bs] +//! author : Nedim Cholich : https://github.com/frontyard +//! based on (hr) translation by Bojan Marković +function i(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function j(a){return a>1&&a<5&&1!==~~(a/10)}function k(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekund":"pár sekundami";case"m":return b?"minuta":d?"minutu":"minutou";case"mm":return b||d?e+(j(a)?"minuty":"minut"):e+"minutami";break;case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(j(a)?"hodiny":"hodin"):e+"hodinami";break;case"d":return b||d?"den":"dnem";case"dd":return b||d?e+(j(a)?"dny":"dní"):e+"dny";break;case"M":return b||d?"měsíc":"měsícem";case"MM":return b||d?e+(j(a)?"měsíce":"měsíců"):e+"měsíci";break;case"y":return b||d?"rok":"rokem";case"yy":return b||d?e+(j(a)?"roky":"let"):e+"lety"}} +//! moment.js locale configuration +//! locale : German (Austria) [de-at] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Martin Groller : https://github.com/MadMG +//! author : Mikolaj Dadela : https://github.com/mik01aj +function l(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : German (Switzerland) [de-ch] +//! author : sschueller : https://github.com/sschueller +function m(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : German [de] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Mikolaj Dadela : https://github.com/mik01aj +function n(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}function o(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)} +//! moment.js locale configuration +//! locale : Estonian [et] +//! author : Henry Kehlmann : https://github.com/madhenry +//! improvements : Illimar Tambek : https://github.com/ragulka +function p(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}function q(a,b,c,d){var e="";switch(c){case"s":return d?"muutaman sekunnin":"muutama sekunti";case"m":return d?"minuutin":"minuutti";case"mm":e=d?"minuutin":"minuuttia";break;case"h":return d?"tunnin":"tunti";case"hh":e=d?"tunnin":"tuntia";break;case"d":return d?"päivän":"päivä";case"dd":e=d?"päivän":"päivää";break;case"M":return d?"kuukauden":"kuukausi";case"MM":e=d?"kuukauden":"kuukautta";break;case"y":return d?"vuoden":"vuosi";case"yy":e=d?"vuoden":"vuotta"}return e=r(a,d)+" "+e}function r(a,b){return a<10?b?Ea[a]:Da[a]:a} +//! moment.js locale configuration +//! locale : Konkani Latin script [gom-latn] +//! author : The Discoverer : https://github.com/WikiDiscoverer +function s(a,b,c,d){var e={s:["thodde secondanim","thodde second"],m:["eka mintan","ek minute"],mm:[a+" mintanim",a+" mintam"],h:["eka horan","ek hor"],hh:[a+" horanim",a+" hor"],d:["eka disan","ek dis"],dd:[a+" disanim",a+" dis"],M:["eka mhoinean","ek mhoino"],MM:[a+" mhoineanim",a+" mhoine"],y:["eka vorsan","ek voros"],yy:[a+" vorsanim",a+" vorsam"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : Croatian [hr] +//! author : Bojan Marković : https://github.com/bmarkovic +function t(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function u(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function v(a){return(a?"":"[múlt] ")+"["+Oa[this.day()]+"] LT[-kor]"} +//! moment.js locale configuration +//! locale : Icelandic [is] +//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik +function w(a){return a%100===11||a%10!==1}function x(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return b?"mínúta":"mínútu";case"mm":return w(a)?e+(b||d?"mínútur":"mínútum"):b?e+"mínúta":e+"mínútu";case"hh":return w(a)?e+(b||d?"klukkustundir":"klukkustundum"):e+"klukkustund";case"d":return b?"dagur":d?"dag":"degi";case"dd":return w(a)?b?e+"dagar":e+(d?"daga":"dögum"):b?e+"dagur":e+(d?"dag":"degi");case"M":return b?"mánuður":d?"mánuð":"mánuði";case"MM":return w(a)?b?e+"mánuðir":e+(d?"mánuði":"mánuðum"):b?e+"mánuður":e+(d?"mánuð":"mánuði");case"y":return b||d?"ár":"ári";case"yy":return w(a)?e+(b||d?"ár":"árum"):e+(b||d?"ár":"ári")}} +//! moment.js locale configuration +//! locale : Luxembourgish [lb] +//! author : mweimerskirch : https://github.com/mweimerskirch +//! author : David Raison : https://github.com/kwisatz +function y(a,b,c,d){var e={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?e[c][0]:e[c][1]}function z(a){var b=a.substr(0,a.indexOf(" "));return B(b)?"a "+a:"an "+a}function A(a){var b=a.substr(0,a.indexOf(" "));return B(b)?"viru "+a:"virun "+a}function B(a){if(a=parseInt(a,10),isNaN(a))return!1;if(a<0)return!0;if(a<10)return 4<=a&&a<=7;if(a<100){var b=a%10,c=a/10;return B(0===b?c:b)}if(a<1e4){for(;a>=10;)a/=10;return B(a)}return a/=1e3,B(a)}function C(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function D(a,b,c,d){return b?F(c)[0]:d?F(c)[1]:F(c)[2]}function E(a){return a%10===0||a>10&&a<20}function F(a){return Ta[a].split("_")}function G(a,b,c,d){var e=a+" ";return 1===a?e+D(a,b,c[0],d):b?e+(E(a)?F(c)[1]:F(c)[0]):d?e+F(c)[1]:e+(E(a)?F(c)[1]:F(c)[2])}function H(a,b,c){return c?b%10===1&&b%100!==11?a[2]:a[3]:b%10===1&&b%100!==11?a[0]:a[1]}function I(a,b,c){return a+" "+H(Ua[c],a,b)}function J(a,b,c){return H(Ua[c],a,b)}function K(a,b){return b?"dažas sekundes":"dažām sekundēm"}function L(a,b,c,d){var e="";if(b)switch(c){case"s":e="काही सेकंद";break;case"m":e="एक मिनिट";break;case"mm":e="%d मिनिटे";break;case"h":e="एक तास";break;case"hh":e="%d तास";break;case"d":e="एक दिवस";break;case"dd":e="%d दिवस";break;case"M":e="एक महिना";break;case"MM":e="%d महिने";break;case"y":e="एक वर्ष";break;case"yy":e="%d वर्षे"}else switch(c){case"s":e="काही सेकंदां";break;case"m":e="एका मिनिटा";break;case"mm":e="%d मिनिटां";break;case"h":e="एका तासा";break;case"hh":e="%d तासां";break;case"d":e="एका दिवसा";break;case"dd":e="%d दिवसां";break;case"M":e="एका महिन्या";break;case"MM":e="%d महिन्यां";break;case"y":e="एका वर्षा";break;case"yy":e="%d वर्षां"}return e.replace(/%d/i,a)}function M(a){return a%10<5&&a%10>1&&~~(a/10)%10!==1}function N(a,b,c){var d=a+" ";switch(c){case"m":return b?"minuta":"minutę";case"mm":return d+(M(a)?"minuty":"minut");case"h":return b?"godzina":"godzinę";case"hh":return d+(M(a)?"godziny":"godzin");case"MM":return d+(M(a)?"miesiące":"miesięcy");case"yy":return d+(M(a)?"lata":"lat")}} +//! moment.js locale configuration +//! locale : Romanian [ro] +//! author : Vlad Gurdiga : https://github.com/gurdiga +//! author : Valentin Agachi : https://github.com/avaly +function O(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]} +//! moment.js locale configuration +//! locale : Russian [ru] +//! author : Viktorminator : https://github.com/Viktorminator +//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Коренберг Марк : https://github.com/socketpair +function P(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function Q(a,b,c){var d={mm:b?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===c?b?"минута":"минуту":a+" "+P(d[c],+a)}function R(a){return a>1&&a<5}function S(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekúnd":"pár sekundami";case"m":return b?"minúta":d?"minútu":"minútou";case"mm":return b||d?e+(R(a)?"minúty":"minút"):e+"minútami";break;case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(R(a)?"hodiny":"hodín"):e+"hodinami";break;case"d":return b||d?"deň":"dňom";case"dd":return b||d?e+(R(a)?"dni":"dní"):e+"dňami";break;case"M":return b||d?"mesiac":"mesiacom";case"MM":return b||d?e+(R(a)?"mesiace":"mesiacov"):e+"mesiacmi";break;case"y":return b||d?"rok":"rokom";case"yy":return b||d?e+(R(a)?"roky":"rokov"):e+"rokmi"}} +//! moment.js locale configuration +//! locale : Slovenian [sl] +//! author : Robert Sedovšek : https://github.com/sedovsek +function T(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":a<5?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":a<5?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":a<5?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":a<5?b||d?"leta":"leti":b||d?"let":"leti"}}function U(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"leS":a.indexOf("jar")!==-1?b.slice(0,-3)+"waQ":a.indexOf("DIS")!==-1?b.slice(0,-3)+"nem":b+" pIq"}function V(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"Hu’":a.indexOf("jar")!==-1?b.slice(0,-3)+"wen":a.indexOf("DIS")!==-1?b.slice(0,-3)+"ben":b+" ret"}function W(a,b,c,d){var e=X(a);switch(c){case"mm":return e+" tup";case"hh":return e+" rep";case"dd":return e+" jaj";case"MM":return e+" jar";case"yy":return e+" DIS"}}function X(a){var b=Math.floor(a%1e3/100),c=Math.floor(a%100/10),d=a%10,e="";return b>0&&(e+=vb[b]+"vatlh"),c>0&&(e+=(""!==e?" ":"")+vb[c]+"maH"),d>0&&(e+=(""!==e?" ":"")+vb[d]),""===e?"pagh":e}function Y(a,b,c,d){var e={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[a+" míuts",""+a+" míuts"],h:["'n þora","'iensa þora"],hh:[a+" þoras",""+a+" þoras"],d:["'n ziua","'iensa ziua"],dd:[a+" ziuas",""+a+" ziuas"],M:["'n mes","'iens mes"],MM:[a+" mesen",""+a+" mesen"],y:["'n ar","'iens ar"],yy:[a+" ars",""+a+" ars"]};return d?e[c][0]:b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : Ukrainian [uk] +//! author : zemlanin : https://github.com/zemlanin +//! Author : Menelion Elensúle : https://github.com/Oire +function Z(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function $(a,b,c){var d={mm:b?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:b?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===c?b?"хвилина":"хвилину":"h"===c?b?"година":"годину":a+" "+Z(d[c],+a)}function _(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};if(!a)return c.nominative;var d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function aa(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}} +//! moment.js locale configuration +//! locale : Afrikaans [af] +//! author : Werner Mollentze : https://github.com/wernerm +a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(a){return/^nm$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Arabic (Algeria) [ar-dz] +//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme +a.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}}), +//! moment.js locale configuration +//! locale : Arabic (Kuwait) [ar-kw] +//! author : Nusret Parlak: https://github.com/nusretparlak +a.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}}); +//! moment.js locale configuration +//! locale : Arabic (Lybia) [ar-ly] +//! author : Ali Hmer: https://github.com/kikoanis +var ba={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},ca=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},da={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},ea=function(a){return function(b,c,d,e){var f=ca(b),g=da[a][ca(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},fa=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];a.defineLocale("ar-ly",{months:fa,monthsShort:fa,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:ea("s"),m:ea("m"),mm:ea("m"),h:ea("h"),hh:ea("h"),d:ea("d"),dd:ea("d"),M:ea("M"),MM:ea("M"),y:ea("y"),yy:ea("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return ba[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}), +//! moment.js locale configuration +//! locale : Arabic (Morocco) [ar-ma] +//! author : ElFadili Yassine : https://github.com/ElFadiliY +//! author : Abdel Said : https://github.com/abdelsaid +a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}}); +//! moment.js locale configuration +//! locale : Arabic (Saudi Arabia) [ar-sa] +//! author : Suhail Alkowaileet : https://github.com/xsoh +var ga={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},ha={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return ha[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return ga[a]}).replace(/,/g,"،")},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Arabic (Tunisia) [ar-tn] +//! author : Nader Toukabri : https://github.com/naderio +a.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Arabic [ar] +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi +var ia={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},ja={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},ka=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},la={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},ma=function(a){return function(b,c,d,e){var f=ka(b),g=la[a][ka(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},na=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"];a.defineLocale("ar",{months:na,monthsShort:na,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:ma("s"),m:ma("m"),mm:ma("m"),h:ma("h"),hh:ma("h"),d:ma("d"),dd:ma("d"),M:ma("M"),MM:ma("M"),y:ma("y"),yy:ma("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return ja[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return ia[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}); +//! moment.js locale configuration +//! locale : Azerbaijani [az] +//! author : topchiyev : https://github.com/topchiyev +var oa={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};a.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(a){return/^(gündüz|axşam)$/.test(a)},meridiem:function(a,b,c){return a<4?"gecə":a<12?"səhər":a<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(a){if(0===a)return a+"-ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(oa[b]||oa[c]||oa[d])},week:{dow:1,doy:7}}),a.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:c,mm:c,h:c,hh:c,d:"дзень",dd:c,M:"месяц",MM:c,y:"год",yy:c},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(a){return/^(дня|вечара)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночы":a<12?"раніцы":a<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Bulgarian [bg] +//! author : Krasen Borisov : https://github.com/kraz +a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Bengali [bn] +//! author : Kaushik Gandhi : https://github.com/kaushikgandhi +var pa={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},qa={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};a.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return qa[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return pa[a]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(a,b){return 12===a&&(a=0),"রাত"===b&&a>=4||"দুপুর"===b&&a<5||"বিকাল"===b?a+12:a},meridiem:function(a,b,c){return a<4?"রাত":a<10?"সকাল":a<17?"দুপুর":a<20?"বিকাল":"রাত"},week:{dow:0,doy:6}}); +//! moment.js locale configuration +//! locale : Tibetan [bo] +//! author : Thupten N. Chakrishar : https://github.com/vajradog +var ra={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},sa={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};a.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return sa[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return ra[a]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(a,b){return 12===a&&(a=0),"མཚན་མོ"===b&&a>=4||"ཉིན་གུང"===b&&a<5||"དགོང་དག"===b?a+12:a},meridiem:function(a,b,c){return a<4?"མཚན་མོ":a<10?"ཞོགས་ཀས":a<17?"ཉིན་གུང":a<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}}),a.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:d,h:"un eur",hh:"%d eur",d:"un devezh",dd:d,M:"ur miz",MM:d,y:"ur bloaz",yy:e},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}}),a.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:i,mm:i,h:i,hh:i,d:"dan",dd:i,M:"mjesec",MM:i,y:"godinu",yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Catalan [ca] +//! author : Juan G. Hurtado : https://github.com/juanghurtado +a.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"[el] D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"[el] D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"[el] dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return"w"!==b&&"W"!==b||(c="a"),a+c},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Czech [cs] +//! author : petrbela : https://github.com/petrbela +var ta="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),ua="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");a.defineLocale("cs",{months:ta,monthsShort:ua,monthsParse:function(a,b){var c,d=[];for(c=0;c<12;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(ta,ua),shortMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(ua),longMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(ta),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:k,m:k,mm:k,h:k,hh:k,d:k,dd:k,M:k,MM:k,y:k,yy:k},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Chuvash [cv] +//! author : Anatoly Mironov : https://github.com/mirontoli +a.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/ҫул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Welsh [cy] +//! author : Robert Allen : https://github.com/robgallen +//! author : https://github.com/ryangreaves +a.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Danish [da] +//! author : Ulrik Nielsen : https://github.com/mrbase +a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:l,mm:"%d Minuten",h:l,hh:"%d Stunden",d:l,dd:l,M:l,MM:l,y:l,yy:l},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH.mm",LLLL:"dddd, D. MMMM YYYY HH.mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:m,mm:"%d Minuten",h:m,hh:"%d Stunden",d:m,dd:m,M:m,MM:m,y:m,yy:m},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:n,mm:"%d Minuten",h:n,hh:"%d Stunden",d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Maldivian [dv] +//! author : Jawish Hameed : https://github.com/jawish +var va=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],wa=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];a.defineLocale("dv",{months:va,monthsShort:va,weekdays:wa,weekdaysShort:wa,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(a){return"މފ"===a},meridiem:function(a,b,c){return a<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:7,doy:12}}), +//! moment.js locale configuration +//! locale : Greek [el] +//! author : Aggelos Karalias : https://github.com/mehiel +a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return a?/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return o(c)&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : English (Australia) [en-au] +//! author : Jared Morse : https://github.com/jarcoal +a.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : English (Canada) [en-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca +a.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}), +//! moment.js locale configuration +//! locale : English (United Kingdom) [en-gb] +//! author : Chris Gedrim : https://github.com/chrisgedrim +a.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : English (Ireland) [en-ie] +//! author : Chris Cartlidge : https://github.com/chriscartlidge +a.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : English (New Zealand) [en-nz] +//! author : Luke McGregor : https://github.com/lukemcgregor +a.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Esperanto [eo] +//! author : Colin Dean : https://github.com/colindean +//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia +//! comment : miestasmia corrected the translation by colindean +a.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(a){return"p"===a.charAt(0).toLowerCase()},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Spanish (Dominican Republic) [es-do] +var xa="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),ya="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?ya[a.month()]:xa[a.month()]:xa},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Spanish [es] +//! author : Julio Napurí : https://github.com/julionc +var za="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Aa="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?Aa[a.month()]:za[a.month()]:za},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:p,m:p,mm:p,h:p,hh:p,d:p,dd:"%d päeva",M:p,MM:p,y:p,yy:p},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Basque [eu] +//! author : Eneko Illarramendi : https://github.com/eillarra +a.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Persian [fa] +//! author : Ebrahim Byagowi : https://github.com/ebraminio +var Ba={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},Ca={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return a<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return Ca[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Ba[a]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}}); +//! moment.js locale configuration +//! locale : Finnish [fi] +//! author : Tarmo Aidantausta : https://github.com/bleadof +var Da="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),Ea=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",Da[7],Da[8],Da[9]];a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:q,m:q,mm:q,h:q,hh:q,d:q,dd:q,M:q,MM:q,y:q,yy:q},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Faroese [fo] +//! author : Ragnar Johannesen : https://github.com/ragnar123 +a.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : French (Canada) [fr-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca +a.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(a,b){switch(b){default:case"M":case"Q":case"D":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}}}), +//! moment.js locale configuration +//! locale : French (Switzerland) [fr-ch] +//! author : Gaspard Bucher : https://github.com/gaspard +a.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(a,b){switch(b){default:case"M":case"Q":case"D":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : French [fr] +//! author : John Fischer : https://github.com/jfroffice +a.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(a,b){switch(b){case"D":return a+(1===a?"er":"");default:case"M":case"Q":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Frisian [fy] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +var Fa="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),Ga="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");a.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?Ga[a.month()]:Fa[a.month()]:Fa},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Scottish Gaelic [gd] +//! author : Jon Ashdown : https://github.com/jonashdown +var Ha=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],Ia=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],Ja=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],Ka=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],La=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];a.defineLocale("gd",{months:Ha,monthsShort:Ia,monthsParseExact:!0,weekdays:Ja,weekdaysShort:Ka,weekdaysMin:La,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(a){var b=1===a?"d":a%10===2?"na":"mh";return a+b},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Galician [gl] +//! author : Juan G. Hurtado : https://github.com/juanghurtado +a.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return 0===a.indexOf("un")?"n"+a:"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(a,b){switch(b){case"D":return a+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return a}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(a,b){return 12===a&&(a=0),"rati"===b?a<4?a:a+12:"sokalli"===b?a:"donparam"===b?a>12?a:a+12:"sanje"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"rati":a<12?"sokalli":a<16?"donparam":a<20?"sanje":"rati"}}), +//! moment.js locale configuration +//! locale : Hebrew [he] +//! author : Tomer Cohen : https://github.com/tomer +//! author : Moshe Simantov : https://github.com/DevelopmentIL +//! author : Tal Ater : https://github.com/TalAter +a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(a){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(a)},meridiem:function(a,b,c){return a<5?"לפנות בוקר":a<10?"בבוקר":a<12?c?'לפנה"צ':"לפני הצהריים":a<18?c?'אחה"צ':"אחרי הצהריים":"בערב"}}); +//! moment.js locale configuration +//! locale : Hindi [hi] +//! author : Mayank Singhal : https://github.com/mayanksinghal +var Ma={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},Na={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Na[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Ma[a]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?a<4?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात":a<10?"सुबह":a<17?"दोपहर":a<20?"शाम":"रात"},week:{dow:0,doy:6}}),a.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Hungarian [hu] +//! author : Adam Brunner : https://github.com/adambrunner +var Oa="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return a<12?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return v.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return v.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:u,m:u,mm:u,h:u,hh:u,d:u,dd:u,M:u,MM:u,y:u,yy:u},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Armenian [hy-am] +//! author : Armendarabyan : https://github.com/armendarabyan +a.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(a){return/^(ցերեկվա|երեկոյան)$/.test(a)},meridiem:function(a){return a<4?"գիշերվա":a<12?"առավոտվա":a<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Indonesian [id] +//! author : Mohammad Satrio Utomo : https://github.com/tyok +//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan +a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"siang":a<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:x,m:x,mm:x,h:"klukkustund",hh:x,d:x,dd:x,M:x,MM:x,y:x,yy:x},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Italian [it] +//! author : Lorenzo : https://github.com/aliem +//! author: Mattia Larentis: https://github.com/nostalgiaz +a.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Japanese [ja] +//! author : LI Long : https://github.com/baryon +a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return a<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";default:return a}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}}), +//! moment.js locale configuration +//! locale : Javanese [jv] +//! author : Rony Lantip : https://github.com/lantip +//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa +a.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(a,b){return 12===a&&(a=0),"enjing"===b?a:"siyang"===b?a>=11?a:a+12:"sonten"===b||"ndalu"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"enjing":a<15?"siyang":a<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Georgian [ka] +//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili +a.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის უკან"):/წელი/.test(a)?a.replace(/წელი$/,"წლის უკან"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(a){return 0===a?a:1===a?a+"-ლი":a<20||a<=100&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Kazakh [kk] +//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan +var Pa={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};a.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(Pa[a]||Pa[b]||Pa[c])},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Cambodian [km] +//! author : Kruy Vanna : https://github.com/kruyvanna +a.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Kannada [kn] +//! author : Rajeev Naik : https://github.com/rajeevnaikte +var Qa={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},Ra={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};a.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(a){return a.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(a){return Ra[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Qa[a]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ರಾತ್ರಿ"===b?a<4?a:a+12:"ಬೆಳಿಗ್ಗೆ"===b?a:"ಮಧ್ಯಾಹ್ನ"===b?a>=10?a:a+12:"ಸಂಜೆ"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"ರಾತ್ರಿ":a<10?"ಬೆಳಿಗ್ಗೆ":a<17?"ಮಧ್ಯಾಹ್ನ":a<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(a){return a+"ನೇ"},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Korean [ko] +//! author : Kyungwook, Park : https://github.com/kyungw00k +//! author : Jeeeyul Lee +a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return a<12?"오전":"오후"}}); +//! moment.js locale configuration +//! locale : Kyrgyz [ky] +//! author : Chyngyz Arystan uulu : https://github.com/chyngyz +var Sa={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};a.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(Sa[a]||Sa[b]||Sa[c])},week:{dow:1,doy:7}}),a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:z,past:A,s:"e puer Sekonnen",m:y,mm:"%d Minutten",h:y,hh:"%d Stonnen",d:y,dd:"%d Deeg",M:y,MM:"%d Méint",y:y,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Lao [lo] +//! author : Ryan Hart : https://github.com/ryanhart2 +a.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(a){return"ຕອນແລງ"===a},meridiem:function(a,b,c){return a<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(a){return"ທີ່"+a}}); +//! moment.js locale configuration +//! locale : Lithuanian [lt] +//! author : Mindaugas Mozūras : https://github.com/mmozuras +var Ta={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};a.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:C,m:D,mm:G,h:D,hh:G,d:D,dd:G,M:D,MM:G,y:D,yy:G},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Latvian [lv] +//! author : Kristaps Karlsons : https://github.com/skakri +//! author : Jānis Elmeris : https://github.com/JanisE +var Ua={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};a.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:K,m:J,mm:I,h:J,hh:I,d:J,dd:I,M:J,MM:I,y:J,yy:I},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Montenegrin [me] +//! author : Miodrag Nikač : https://github.com/miodragnikac +var Va={words:{m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=Va.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Va.correctGrammaticalCase(a,d)}};a.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:Va.translate,mm:Va.translate,h:Va.translate,hh:Va.translate,d:"dan",dd:Va.translate,M:"mjesec",MM:Va.translate,y:"godinu",yy:Va.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Maori [mi] +//! author : John Corrigan : https://github.com/johnideal +a.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Macedonian [mk] +//! author : Borislav Mickov : https://github.com/B0k0 +a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Malayalam [ml] +//! author : Floyd Pink : https://github.com/floydpink +a.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(a,b){return 12===a&&(a=0),"രാത്രി"===b&&a>=4||"ഉച്ച കഴിഞ്ഞ്"===b||"വൈകുന്നേരം"===b?a+12:a},meridiem:function(a,b,c){return a<4?"രാത്രി":a<12?"രാവിലെ":a<17?"ഉച്ച കഴിഞ്ഞ്":a<20?"വൈകുന്നേരം":"രാത്രി"}}); +//! moment.js locale configuration +//! locale : Marathi [mr] +//! author : Harshad Kale : https://github.com/kalehv +//! author : Vivek Athalye : https://github.com/vnathalye +var Wa={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},Xa={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:L,m:L,mm:L,h:L,hh:L,d:L,dd:L,M:L,MM:L,y:L,yy:L},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Xa[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Wa[a]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात्री"===b?a<4?a:a+12:"सकाळी"===b?a:"दुपारी"===b?a>=10?a:a+12:"सायंकाळी"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात्री":a<10?"सकाळी":a<17?"दुपारी":a<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Malay [ms-my] +//! note : DEPRECATED, the correct one is [ms] +//! author : Weldan Jamili : https://github.com/weldan +a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Malay [ms] +//! author : Weldan Jamili : https://github.com/weldan +a.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Burmese [my] +//! author : Squar team, mysquar.com +//! author : David Rossellat : https://github.com/gholadr +//! author : Tin Aung Lin : https://github.com/thanyawzinmin +var Ya={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},Za={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};a.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return Za[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Ya[a]})},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Norwegian Bokmål [nb] +//! authors : Espen Hovlandsdal : https://github.com/rexxars +//! Sigurd Gartmann : https://github.com/sigurdga +a.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Nepalese [ne] +//! author : suvash : https://github.com/suvash +var $a={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},_a={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return _a[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return $a[a]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(a,b){return 12===a&&(a=0),"राति"===b?a<4?a:a+12:"बिहान"===b?a:"दिउँसो"===b?a>=10?a:a+12:"साँझ"===b?a+12:void 0},meridiem:function(a,b,c){return a<3?"राति":a<12?"बिहान":a<16?"दिउँसो":a<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}}); +//! moment.js locale configuration +//! locale : Dutch (Belgium) [nl-be] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj +var ab="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),bb="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),cb=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],db=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?bb[a.month()]:ab[a.month()]:ab},monthsRegex:db,monthsShortRegex:db,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:cb,longMonthsParse:cb,shortMonthsParse:cb,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Dutch [nl] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj +var eb="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),fb="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),gb=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],hb=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?fb[a.month()]:eb[a.month()]:eb},monthsRegex:hb,monthsShortRegex:hb,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:gb,longMonthsParse:gb,shortMonthsParse:gb,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Nynorsk [nn] +//! author : https://github.com/mechuwind +a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Punjabi (India) [pa-in] +//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit +var ib={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},jb={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};a.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(a){return a.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(a){return jb[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return ib[a]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ਰਾਤ"===b?a<4?a:a+12:"ਸਵੇਰ"===b?a:"ਦੁਪਹਿਰ"===b?a>=10?a:a+12:"ਸ਼ਾਮ"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"ਰਾਤ":a<10?"ਸਵੇਰ":a<17?"ਦੁਪਹਿਰ":a<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}}); +//! moment.js locale configuration +//! locale : Polish [pl] +//! author : Rafal Hirsz : https://github.com/evoL +var kb="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),lb="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");a.defineLocale("pl",{months:function(a,b){return a?""===b?"("+lb[a.month()]+"|"+kb[a.month()]+")":/D MMMM/.test(b)?lb[a.month()]:kb[a.month()]:kb},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:N,mm:N,h:N,hh:N,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:N,y:"rok",yy:N},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Portuguese (Brazil) [pt-br] +//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira +a.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"}), +//! moment.js locale configuration +//! locale : Portuguese [pt] +//! author : Jefferson : https://github.com/jalex79 +a.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:O,h:"o oră",hh:O,d:"o zi",dd:O,M:"o lună",MM:O,y:"un an",yy:O},week:{dow:1,doy:7}});var mb=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];a.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:mb,longMonthsParse:mb,shortMonthsParse:mb,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:Q,mm:Q,h:"час",hh:Q,d:"день",dd:Q,M:"месяц",MM:Q,y:"год",yy:Q},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночи":a<12?"утра":a<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Sindhi [sd] +//! author : Narain Sagar : https://github.com/narainsagar +var nb=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],ob=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];a.defineLocale("sd",{months:nb,monthsShort:nb,weekdays:ob,weekdaysShort:ob,weekdaysMin:ob,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(a){return"شام"===a},meridiem:function(a,b,c){return a<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Northern Sami [se] +//! authors : Bård Rolstad Henriksen : https://github.com/karamell +a.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Sinhalese [si] +//! author : Sampath Sitinamaluwa : https://github.com/sampathsris +a.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(a){return a+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(a){return"ප.ව."===a||"පස් වරු"===a},meridiem:function(a,b,c){return a>11?c?"ප.ව.":"පස් වරු":c?"පෙ.ව.":"පෙර වරු"}}); +//! moment.js locale configuration +//! locale : Slovak [sk] +//! author : Martin Minka : https://github.com/k2s +//! based on work of petrbela : https://github.com/petrbela +var pb="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),qb="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");a.defineLocale("sk",{months:pb,monthsShort:qb,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:S,m:S,mm:S,h:S,hh:S,d:S,dd:S,M:S,MM:S,y:S,yy:S},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:T,m:T,mm:T,h:T,hh:T,d:T,dd:T,M:T,MM:T,y:T,yy:T},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Albanian [sq] +//! author : Flakërim Ismani : https://github.com/flakerimi +//! author : Menelion Elensúle : https://github.com/Oire +//! author : Oerd Cukalla : https://github.com/oerd +a.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(a){return"M"===a.charAt(0)},meridiem:function(a,b,c){return a<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Serbian Cyrillic [sr-cyrl] +//! author : Milan Janačković : https://github.com/milan-j +var rb={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=rb.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+rb.correctGrammaticalCase(a,d)}};a.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:rb.translate,mm:rb.translate,h:rb.translate,hh:rb.translate,d:"дан",dd:rb.translate,M:"месец",MM:rb.translate,y:"годину",yy:rb.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Serbian [sr] +//! author : Milan Janačković : https://github.com/milan-j +var sb={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=sb.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+sb.correctGrammaticalCase(a,d)}};a.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:sb.translate,mm:sb.translate,h:sb.translate,hh:sb.translate,d:"dan",dd:sb.translate,M:"mesec",MM:sb.translate,y:"godinu",yy:sb.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : siSwati [ss] +//! author : Nicolai Davies : https://github.com/nicolaidavies +a.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(a,b,c){return a<11?"ekuseni":a<15?"emini":a<19?"entsambama":"ebusuku"},meridiemHour:function(a,b){return 12===a&&(a=0),"ekuseni"===b?a:"emini"===b?a>=11?a:a+12:"entsambama"===b||"ebusuku"===b?0===a?0:a+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Swedish [sv] +//! author : Jens Alm : https://github.com/ulmus +a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Swahili [sw] +//! author : Fahad Kassim : https://github.com/fadsel +a.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Tamil [ta] +//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 +var tb={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},ub={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};a.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(a){return a+"வது"},preparse:function(a){return a.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(a){return ub[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return tb[a]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(a,b,c){return a<2?" யாமம்":a<6?" வைகறை":a<10?" காலை":a<14?" நண்பகல்":a<18?" எற்பாடு":a<22?" மாலை":" யாமம்"},meridiemHour:function(a,b){return 12===a&&(a=0),"யாமம்"===b?a<2?a:a+12:"வைகறை"===b||"காலை"===b?a:"நண்பகல்"===b&&a>=10?a:a+12},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Telugu [te] +//! author : Krishna Chaitanya Thota : https://github.com/kcthota +a.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(a,b){return 12===a&&(a=0),"రాత్రి"===b?a<4?a:a+12:"ఉదయం"===b?a:"మధ్యాహ్నం"===b?a>=10?a:a+12:"సాయంత్రం"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"రాత్రి":a<10?"ఉదయం":a<17?"మధ్యాహ్నం":a<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Tetun Dili (East Timor) [tet] +//! author : Joshua Brooks : https://github.com/joshbrooks +//! author : Onorio De J. Afonso : https://github.com/marobo +a.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Thai [th] +//! author : Kridsada Thanabulpong : https://github.com/sirn +a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return a<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}}), +//! moment.js locale configuration +//! locale : Tagalog (Philippines) [tl-ph] +//! author : Dan Hagman : https://github.com/hagmandan +a.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Klingon [tlh] +//! author : Dominika Kruk : https://github.com/amaranthrose +var vb="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");a.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:U,past:V,s:"puS lup",m:"wa’ tup",mm:W,h:"wa’ rep",hh:W,d:"wa’ jaj",dd:W,M:"wa’ jar",MM:W,y:"wa’ DIS",yy:W},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Turkish [tr] +//! authors : Erhan Gundogan : https://github.com/erhangundogan, +//! Burak Yiğit Kaya: https://github.com/BYK +var wb={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},dayOfMonthOrdinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)return a+"'ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(wb[b]||wb[c]||wb[d])},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Talossan [tzl] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +//! author : Iustì Canun +a.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(a){return"d'o"===a.toLowerCase()},meridiem:function(a,b,c){return a>11?c?"d'o":"D'O":c?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:Y,m:Y,mm:Y,h:Y,hh:Y,d:Y,dd:Y,M:Y,MM:Y,y:Y,yy:Y},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Central Atlas Tamazight Latin [tzm-latn] +//! author : Abdel Said : https://github.com/abdelsaid +a.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}), +//! moment.js locale configuration +//! locale : Central Atlas Tamazight [tzm] +//! author : Abdel Said : https://github.com/abdelsaid +a.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}}),a.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:_,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:aa("[Сьогодні "),nextDay:aa("[Завтра "),lastDay:aa("[Вчора "),nextWeek:aa("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return aa("[Минулої] dddd [").call(this);case 1:case 2:case 4:return aa("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:$,mm:$,h:"годину",hh:$,d:"день",dd:$,M:"місяць",MM:$,y:"рік",yy:$},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночі":a<12?"ранку":a<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Urdu [ur] +//! author : Sawood Alam : https://github.com/ibnesayeed +//! author : Zack : https://github.com/ZackVision +var xb=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],yb=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"]; +//! moment.js locale configuration +//! locale : Uzbek Latin [uz-latn] +//! author : Rasulbek Mirzayev : github.com/Rasulbeeek +//! moment.js locale configuration +//! locale : Uzbek [uz] +//! author : Sardor Muminov : https://github.com/muminoff +//! moment.js locale configuration +//! locale : Vietnamese [vi] +//! author : Bang Nguyen : https://github.com/bangnk +//! moment.js locale configuration +//! locale : Pseudo [x-pseudo] +//! author : Andrew Hood : https://github.com/andrewhood125 +//! moment.js locale configuration +//! locale : Yoruba Nigeria [yo] +//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe +//! moment.js locale configuration +//! locale : Chinese (China) [zh-cn] +//! author : suupic : https://github.com/suupic +//! author : Zeno Zeng : https://github.com/zenozeng +//! moment.js locale configuration +//! locale : Chinese (Hong Kong) [zh-hk] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +//! author : Konstantin : https://github.com/skfd +//! moment.js locale configuration +//! locale : Chinese (Taiwan) [zh-tw] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +return a.defineLocale("ur",{months:xb,monthsShort:xb,weekdays:yb,weekdaysShort:yb,weekdaysMin:yb,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(a){return"شام"===a},meridiem:function(a,b,c){return a<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:1,doy:4}}),a.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),a.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}}),a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),a.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),a.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}}),a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}}),a.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.locale("en"),a}); \ No newline at end of file diff --git a/node_modules/moment/min/moment-with-locales.js b/node_modules/moment/min/moment-with-locales.js new file mode 100644 index 0000000..67447c2 --- /dev/null +++ b/node_modules/moment/min/moment-with-locales.js @@ -0,0 +1,13700 @@ +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, (function () { 'use strict'; + +var hookCallback; + +function hooks () { + return hookCallback.apply(null, arguments); +} + +// This is done to register the method called with moment() +// without creating circular dependencies. +function setHookCallback (callback) { + hookCallback = callback; +} + +function isArray(input) { + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; +} + +function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return input != null && Object.prototype.toString.call(input) === '[object Object]'; +} + +function isObjectEmpty(obj) { + var k; + for (k in obj) { + // even if its not own property I'd still call it non-empty + return false; + } + return true; +} + +function isUndefined(input) { + return input === void 0; +} + +function isNumber(input) { + return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; +} + +function isDate(input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; +} + +function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; +} + +function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); +} + +function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; +} + +function createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); +} + +function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false, + parsedDateParts : [], + meridiem : null, + rfc2822 : false, + weekdayMismatch : false + }; +} + +function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; +} + +var some; +if (Array.prototype.some) { + some = Array.prototype.some; +} else { + some = function (fun) { + var t = Object(this); + var len = t.length >>> 0; + + for (var i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; +} + +var some$1 = some; + +function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m); + var parsedParts = some$1.call(flags.parsedDateParts, function (i) { + return i != null; + }); + var isNowValid = !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } + else { + return isNowValid; + } + } + return m._isValid; +} + +function createInvalid (flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } + else { + getParsingFlags(m).userInvalidated = true; + } + + return m; +} + +// Plugins that add properties should also add the key here (null value), +// so we can properly clone ourselves. +var momentProperties = hooks.momentProperties = []; + +function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; +} + +var updateInProgress = false; + +// Moment prototype object +function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } +} + +function isMoment (obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); +} + +function absFloor (number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } +} + +function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; +} + +// compare two arrays, return the number of differences +function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; +} + +function warn(msg) { + if (hooks.suppressDeprecationWarnings === false && + (typeof console !== 'undefined') && console.warn) { + console.warn('Deprecation warning: ' + msg); + } +} + +function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = []; + var arg; + for (var i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (var key in arguments[0]) { + arg += key + ': ' + arguments[0][key] + ', '; + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); +} + +var deprecations = {}; + +function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } +} + +hooks.suppressDeprecationWarnings = false; +hooks.deprecationHandler = null; + +function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; +} + +function set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + (/\d{1,2}/).source); +} + +function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if (hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop])) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; +} + +function Locale(config) { + if (config != null) { + this.set(config); + } +} + +var keys; + +if (Object.keys) { + keys = Object.keys; +} else { + keys = function (obj) { + var i, res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; +} + +var keys$1 = keys; + +var defaultCalendar = { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' +}; + +function calendar (key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; +} + +var defaultLongDateFormat = { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' +}; + +function longDateFormat (key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + + return this._longDateFormat[key]; +} + +var defaultInvalidDate = 'Invalid date'; + +function invalidDate () { + return this._invalidDate; +} + +var defaultOrdinal = '%d'; +var defaultDayOfMonthOrdinalParse = /\d{1,2}/; + +function ordinal (number) { + return this._ordinal.replace('%d', number); +} + +var defaultRelativeTime = { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + ss : '%d seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' +}; + +function relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (isFunction(output)) ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); +} + +function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); +} + +var aliases = {}; + +function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; +} + +function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; +} + +function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; +} + +var priorities = {}; + +function addUnitPriority(unit, priority) { + priorities[unit] = priority; +} + +function getPrioritizedUnits(unitsObj) { + var units = []; + for (var u in unitsObj) { + units.push({unit: u, priority: priorities[u]}); + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; +} + +function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; +} + +function get (mom, unit) { + return mom.isValid() ? + mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; +} + +function set$1 (mom, unit, value) { + if (mom.isValid()) { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } +} + +// MOMENTS + +function stringGet (units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; +} + + +function stringSet (units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units); + for (var i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; +} + +function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; +} + +var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; + +var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + +var formatFunctions = {}; + +var formatTokenFunctions = {}; + +// token: 'M' +// padded: ['MM', 2] +// ordinal: 'Mo' +// callback: function () { this.month() + 1 } +function addFormatToken (token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; + } +} + +function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); +} + +function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) ? array[i].call(mom, format) : array[i]; + } + return output; + }; +} + +// format date using native date object +function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); +} + +function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; +} + +var match1 = /\d/; // 0 - 9 +var match2 = /\d\d/; // 00 - 99 +var match3 = /\d{3}/; // 000 - 999 +var match4 = /\d{4}/; // 0000 - 9999 +var match6 = /[+-]?\d{6}/; // -999999 - 999999 +var match1to2 = /\d\d?/; // 0 - 99 +var match3to4 = /\d\d\d\d?/; // 999 - 9999 +var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 +var match1to3 = /\d{1,3}/; // 0 - 999 +var match1to4 = /\d{1,4}/; // 0 - 9999 +var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + +var matchUnsigned = /\d+/; // 0 - inf +var matchSigned = /[+-]?\d+/; // -inf - inf + +var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z +var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z + +var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + +// any word (or two) characters or numbers including two/three word month in arabic. +// includes scottish gaelic two word and hyphenated months +var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + + +var regexes = {}; + +function addRegexToken (token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; +} + +function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); +} + +// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript +function unescapeFormat(s) { + return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + })); +} + +function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} + +var tokens = {}; + +function addParseToken (token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } +} + +function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); +} + +function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } +} + +var YEAR = 0; +var MONTH = 1; +var DATE = 2; +var HOUR = 3; +var MINUTE = 4; +var SECOND = 5; +var MILLISECOND = 6; +var WEEK = 7; +var WEEKDAY = 8; + +var indexOf; + +if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; +} else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; +} + +var indexOf$1 = indexOf; + +function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); +} + +// FORMATTING + +addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; +}); + +addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); +}); + +addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); +}); + +// ALIASES + +addUnitAlias('month', 'M'); + +// PRIORITY + +addUnitPriority('month', 8); + +// PARSING + +addRegexToken('M', match1to2); +addRegexToken('MM', match1to2, match2); +addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); +}); +addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); +}); + +addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; +}); + +addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } +}); + +// LOCALES + +var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; +var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); +function localeMonths (m, format) { + if (!m) { + return isArray(this._months) ? this._months : + this._months['standalone']; + } + return isArray(this._months) ? this._months[m.month()] : + this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; +} + +var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); +function localeMonthsShort (m, format) { + if (!m) { + return isArray(this._monthsShort) ? this._monthsShort : + this._monthsShort['standalone']; + } + return isArray(this._monthsShort) ? this._monthsShort[m.month()] : + this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; +} + +function handleStrictParse(monthName, format, strict) { + var i, ii, mom, llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf$1.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf$1.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +function localeMonthsParse (monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } +} + +// MOMENTS + +function setMonth (mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; +} + +function getSetMonth (value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } +} + +function getDaysInMonth () { + return daysInMonth(this.year(), this.month()); +} + +var defaultMonthsShortRegex = matchWord; +function monthsShortRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict ? + this._monthsShortStrictRegex : this._monthsShortRegex; + } +} + +var defaultMonthsRegex = matchWord; +function monthsRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict ? + this._monthsStrictRegex : this._monthsRegex; + } +} + +function computeMonthsParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], longPieces = [], mixedPieces = [], + i, mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); +} + +// FORMATTING + +addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? '' + y : '+' + y; +}); + +addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; +}); + +addFormatToken(0, ['YYYY', 4], 0, 'year'); +addFormatToken(0, ['YYYYY', 5], 0, 'year'); +addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + +// ALIASES + +addUnitAlias('year', 'y'); + +// PRIORITIES + +addUnitPriority('year', 1); + +// PARSING + +addRegexToken('Y', matchSigned); +addRegexToken('YY', match1to2, match2); +addRegexToken('YYYY', match1to4, match4); +addRegexToken('YYYYY', match1to6, match6); +addRegexToken('YYYYYY', match1to6, match6); + +addParseToken(['YYYYY', 'YYYYYY'], YEAR); +addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); +}); +addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); +}); +addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); +}); + +// HELPERS + +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} + +function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; +} + +// HOOKS + +hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); +}; + +// MOMENTS + +var getSetYear = makeGetSet('FullYear', true); + +function getIsLeapYear () { + return isLeapYear(this.year()); +} + +function createDate (y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date = new Date(y, m, d, h, M, s, ms); + + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { + date.setFullYear(y); + } + return date; +} + +function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)); + + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + return date; +} + +// start-of-first-week - start-of-year +function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; +} + +// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday +function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear + }; +} + +function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear + }; +} + +function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; +} + +// FORMATTING + +addFormatToken('w', ['ww', 2], 'wo', 'week'); +addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + +// ALIASES + +addUnitAlias('week', 'w'); +addUnitAlias('isoWeek', 'W'); + +// PRIORITIES + +addUnitPriority('week', 5); +addUnitPriority('isoWeek', 5); + +// PARSING + +addRegexToken('w', match1to2); +addRegexToken('ww', match1to2, match2); +addRegexToken('W', match1to2); +addRegexToken('WW', match1to2, match2); + +addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); +}); + +// HELPERS + +// LOCALES + +function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; +} + +var defaultLocaleWeek = { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. +}; + +function localeFirstDayOfWeek () { + return this._week.dow; +} + +function localeFirstDayOfYear () { + return this._week.doy; +} + +// MOMENTS + +function getSetWeek (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +// FORMATTING + +addFormatToken('d', 0, 'do', 'day'); + +addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); +}); + +addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); +}); + +addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); +}); + +addFormatToken('e', 0, 0, 'weekday'); +addFormatToken('E', 0, 0, 'isoWeekday'); + +// ALIASES + +addUnitAlias('day', 'd'); +addUnitAlias('weekday', 'e'); +addUnitAlias('isoWeekday', 'E'); + +// PRIORITY +addUnitPriority('day', 11); +addUnitPriority('weekday', 11); +addUnitPriority('isoWeekday', 11); + +// PARSING + +addRegexToken('d', match1to2); +addRegexToken('e', match1to2); +addRegexToken('E', match1to2); +addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); +}); +addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); +}); +addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); +}); + +addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } +}); + +addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); +}); + +// HELPERS + +function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; +} + +function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; +} + +// LOCALES + +var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); +function localeWeekdays (m, format) { + if (!m) { + return isArray(this._weekdays) ? this._weekdays : + this._weekdays['standalone']; + } + return isArray(this._weekdays) ? this._weekdays[m.day()] : + this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; +} + +var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); +function localeWeekdaysShort (m) { + return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; +} + +var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); +function localeWeekdaysMin (m) { + return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin; +} + +function handleStrictParse$1(weekdayName, format, strict) { + var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf$1.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +function localeWeekdaysParse (weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); + this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); + this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); + } + if (!this._weekdaysParse[i]) { + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } +} + +// MOMENTS + +function getSetDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } +} + +function getSetLocaleDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); +} + +function getSetISODayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } +} + +var defaultWeekdaysRegex = matchWord; +function weekdaysRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict ? + this._weekdaysStrictRegex : this._weekdaysRegex; + } +} + +var defaultWeekdaysShortRegex = matchWord; +function weekdaysShortRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict ? + this._weekdaysShortStrictRegex : this._weekdaysShortRegex; + } +} + +var defaultWeekdaysMinRegex = matchWord; +function weekdaysMinRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict ? + this._weekdaysMinStrictRegex : this._weekdaysMinRegex; + } +} + + +function computeWeekdaysParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], + i, mom, minp, shortp, longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = this.weekdaysMin(mom, ''); + shortp = this.weekdaysShort(mom, ''); + longp = this.weekdays(mom, ''); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 7; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); + this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); +} + +// FORMATTING + +function hFormat() { + return this.hours() % 12 || 12; +} + +function kFormat() { + return this.hours() || 24; +} + +addFormatToken('H', ['HH', 2], 0, 'hour'); +addFormatToken('h', ['hh', 2], 0, hFormat); +addFormatToken('k', ['kk', 2], 0, kFormat); + +addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); +}); + +addFormatToken('hmmss', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); +}); + +addFormatToken('Hmmss', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); +} + +meridiem('a', true); +meridiem('A', false); + +// ALIASES + +addUnitAlias('hour', 'h'); + +// PRIORITY +addUnitPriority('hour', 13); + +// PARSING + +function matchMeridiem (isStrict, locale) { + return locale._meridiemParse; +} + +addRegexToken('a', matchMeridiem); +addRegexToken('A', matchMeridiem); +addRegexToken('H', match1to2); +addRegexToken('h', match1to2); +addRegexToken('k', match1to2); +addRegexToken('HH', match1to2, match2); +addRegexToken('hh', match1to2, match2); +addRegexToken('kk', match1to2, match2); + +addRegexToken('hmm', match3to4); +addRegexToken('hmmss', match5to6); +addRegexToken('Hmm', match3to4); +addRegexToken('Hmmss', match5to6); + +addParseToken(['H', 'HH'], HOUR); +addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; +}); +addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; +}); +addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); +}); +addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); +}); + +// LOCALES + +function localeIsPM (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); +} + +var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; +function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } +} + + +// MOMENTS + +// Setting the hour should keep the time, because the user explicitly +// specified which hour he wants. So trying to maintain the same hour (in +// a new timezone) makes sense. Adding/subtracting hours does not follow +// this rule. +var getSetHour = makeGetSet('Hours', true); + +// months +// week +// weekdays +// meridiem +var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse +}; + +// internal storage for locale config files +var locales = {}; +var localeFamilies = {}; +var globalLocale; + +function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; +} + +// pick the locale from the array +// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each +// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root +function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; +} + +function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && (typeof module !== 'undefined') && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; +} + +// This function will load locale and then set the global locale. If +// no arguments are passed in, it will simply return the current global +// locale key. +function getSetGlobalLocale (key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } + else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; +} + +function defineLocale (name, config) { + if (config !== null) { + var parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple('defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config + }); + return null; + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } +} + +function updateLocale(name, config) { + if (config != null) { + var locale, parentConfig = baseConfig; + // MERGE + if (locales[name] != null) { + parentConfig = locales[name]._config; + } + config = mergeConfigs(parentConfig, config); + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; +} + +// returns locale data +function getLocale (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); +} + +function listLocales() { + return keys$1(locales); +} + +function checkOverflow (m) { + var overflow; + var a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; +} + +// iso 8601 regex +// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) +var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; +var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; + +var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; + +var isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + // YYYYMM is NOT allowed by the standard + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/] +]; + +// iso time formats and regexes +var isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/] +]; + +var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + +// date from iso format +function configFromISO(config) { + var i, l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, dateFormat, timeFormat, tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } +} + +// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 +var basicRfcRegex = /^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/; + +// date and time from ref 2822 format +function configFromRFC2822(config) { + var string, match, dayFormat, + dateFormat, timeFormat, tzFormat; + var timezones = { + ' GMT': ' +0000', + ' EDT': ' -0400', + ' EST': ' -0500', + ' CDT': ' -0500', + ' CST': ' -0600', + ' MDT': ' -0600', + ' MST': ' -0700', + ' PDT': ' -0700', + ' PST': ' -0800' + }; + var military = 'YXWVUTSRQPONZABCDEFGHIKLM'; + var timezone, timezoneIndex; + + string = config._i + .replace(/\([^\)]*\)|[\n\t]/g, ' ') // Remove comments and folding whitespace + .replace(/(\s\s+)/g, ' ') // Replace multiple-spaces with a single space + .replace(/^\s|\s$/g, ''); // Remove leading and trailing spaces + match = basicRfcRegex.exec(string); + + if (match) { + dayFormat = match[1] ? 'ddd' + ((match[1].length === 5) ? ', ' : ' ') : ''; + dateFormat = 'D MMM ' + ((match[2].length > 10) ? 'YYYY ' : 'YY '); + timeFormat = 'HH:mm' + (match[4] ? ':ss' : ''); + + // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check. + if (match[1]) { // day of week given + var momentDate = new Date(match[2]); + var momentDay = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()]; + + if (match[1].substr(0,3) !== momentDay) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return; + } + } + + switch (match[5].length) { + case 2: // military + if (timezoneIndex === 0) { + timezone = ' +0000'; + } else { + timezoneIndex = military.indexOf(match[5][1].toUpperCase()) - 12; + timezone = ((timezoneIndex < 0) ? ' -' : ' +') + + (('' + timezoneIndex).replace(/^-?/, '0')).match(/..$/)[0] + '00'; + } + break; + case 4: // Zone + timezone = timezones[match[5]]; + break; + default: // UT or +/-9999 + timezone = timezones[' GMT']; + } + match[5] = timezone; + config._i = match.splice(1).join(''); + tzFormat = ' ZZ'; + config._f = dayFormat + dateFormat + timeFormat + tzFormat; + configFromStringAndFormat(config); + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } +} + +// date from iso format or fallback +function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); +} + +hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } +); + +// Pick the first defined of two or three arguments. +function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; +} + +function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; +} + +// convert an array to a date. +// the array should mirror the parameters below +// note: all values past the year are optional and will default to the lowest possible value. +// [year, month, day , hour, minute, second, millisecond] +function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } +} + +function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + var curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to begining of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } +} + +// constant that refers to the ISO standard +hooks.ISO_8601 = function () {}; + +// constant that refers to the RFC 2822 form +hooks.RFC_2822 = function () {}; + +// date from string and format string +function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + // console.log('token', token, 'parsedInput', parsedInput, + // 'regex', getParseRegexForToken(token, config)); + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } + else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + + configFromArray(config); + checkOverflow(config); +} + + +function meridiemFixWrap (locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } +} + +// date from string and array of format strings +function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (!isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); +} + +function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i); + config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { + return obj && parseInt(obj, 10); + }); + + configFromArray(config); +} + +function createFromConfig (config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; +} + +function prepareConfig (config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; +} + +function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } +} + +function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {}; + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ((isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0)) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); +} + +function createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); +} + +var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } +); + +var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } +); + +// Pick a moment m from moments so that m[fn](other) is true for all +// other. This relies on the function fn to be transitive. +// +// moments should either be an array of moment objects or an array, whose +// first element is an array of moment objects. +function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; +} + +// TODO: Use [].sort instead? +function min () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); +} + +function max () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); +} + +var now = function () { + return Date.now ? Date.now() : +(new Date()); +}; + +var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; + +function isDurationValid(m) { + for (var key in m) { + if (!(ordering.indexOf(key) !== -1 && (m[key] == null || !isNaN(m[key])))) { + return false; + } + } + + var unitHasDecimal = false; + for (var i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; +} + +function isValid$1() { + return this._isValid; +} + +function createInvalid$1() { + return createDuration(NaN); +} + +function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); +} + +function isDuration (obj) { + return obj instanceof Duration; +} + +function absRound (number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } +} + +// FORMATTING + +function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); +} + +offset('Z', ':'); +offset('ZZ', ''); + +// PARSING + +addRegexToken('Z', matchShortOffset); +addRegexToken('ZZ', matchShortOffset); +addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); +}); + +// HELPERS + +// timezone chunker +// '+10:00' > ['10', '00'] +// '-1530' > ['-15', '30'] +var chunkOffset = /([\+\-]|\d\d)/gi; + +function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher); + + if (matches === null) { + return null; + } + + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? + 0 : + parts[0] === '+' ? minutes : -minutes; +} + +// Return a moment from input, that is local/utc/zone equivalent to model. +function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } +} + +function getDateOffset (m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; +} + +// HOOKS + +// This function will be called whenever a moment is mutated. +// It is intended to keep the offset in sync with the timezone. +hooks.updateOffset = function () {}; + +// MOMENTS + +// keepLocalTime = true means only change the timezone, without +// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> +// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset +// +0200, so we adjust the time as needed, to be valid. +// +// Keeping the time actually adds/subtracts (one hour) +// from the actual represented time. That is why we call updateOffset +// a second time. In case it wants us to change the offset again +// _changeInProgress == true case, then we have to adjust, because +// there is no such time in the given timezone. +function getSetOffset (input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract(this, createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } +} + +function getSetZone (input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } +} + +function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime); +} + +function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; +} + +function setOffsetToParsedOffset () { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } + else { + this.utcOffset(0, true); + } + } + return this; +} + +function hasAlignedHourOffset (input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; +} + +function isDaylightSavingTime () { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); +} + +function isDaylightSavingTimeShifted () { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + var other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = this.isValid() && + compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; +} + +function isLocal () { + return this.isValid() ? !this._isUTC : false; +} + +function isUtcOffset () { + return this.isValid() ? this._isUTC : false; +} + +function isUtc () { + return this.isValid() ? this._isUTC && this._offset === 0 : false; +} + +// ASP.NET json date format regex +var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; + +// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html +// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere +// and further modified to allow for strings containing both week and day +var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; + +function createDuration (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms : input._milliseconds, + d : input._days, + M : input._months + }; + } else if (isNumber(input)) { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : 0, + d : toInt(match[DATE]) * sign, + h : toInt(match[HOUR]) * sign, + m : toInt(match[MINUTE]) * sign, + s : toInt(match[SECOND]) * sign, + ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match + }; + } else if (!!(match = isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : parseIso(match[2], sign), + M : parseIso(match[3], sign), + w : parseIso(match[4], sign), + d : parseIso(match[5], sign), + h : parseIso(match[6], sign), + m : parseIso(match[7], sign), + s : parseIso(match[8], sign) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; +} + +createDuration.fn = Duration.prototype; +createDuration.invalid = createInvalid$1; + +function parseIso (inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; +} + +function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; +} + +function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return {milliseconds: 0, months: 0}; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; +} + +// TODO: remove 'name' arg after deprecation is removed +function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; +} + +function addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } +} + +var add = createAdder(1, 'add'); +var subtract = createAdder(-1, 'subtract'); + +function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; +} + +function calendar$1 (time, formats) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse'; + + var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); + + return this.format(output || this.localeData().calendar(format, this, createLocal(now))); +} + +function clone () { + return new Moment(this); +} + +function isAfter (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } +} + +function isBefore (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } +} + +function isBetween (from, to, units, inclusivity) { + inclusivity = inclusivity || '()'; + return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && + (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); +} + +function isSame (input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); + } +} + +function isSameOrAfter (input, units) { + return this.isSame(input, units) || this.isAfter(input,units); +} + +function isSameOrBefore (input, units) { + return this.isSame(input, units) || this.isBefore(input,units); +} + +function diff (input, units, asFloat) { + var that, + zoneDelta, + delta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; + } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; + } + return asFloat ? output : absFloor(output); +} + +function monthDiff (a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; +} + +hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; +hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + +function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); +} + +function toISOString() { + if (!this.isValid()) { + return null; + } + var m = this.clone().utc(); + if (m.year() < 0 || m.year() > 9999) { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); +} + +/** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ +function inspect () { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment'; + var zone = ''; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + var prefix = '[' + func + '("]'; + var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; + var datetime = '-MM-DD[T]HH:mm:ss.SSS'; + var suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); +} + +function format (inputString) { + if (!inputString) { + inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); +} + +function from (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +function fromNow (withoutSuffix) { + return this.from(createLocal(), withoutSuffix); +} + +function to (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +function toNow (withoutSuffix) { + return this.to(createLocal(), withoutSuffix); +} + +// If passed a locale key, it will set the locale for this +// instance. Otherwise, it will return the locale configuration +// variables for this instance. +function locale (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } +} + +var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } +); + +function localeData () { + return this._locale; +} + +function startOf (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + case 'date': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; +} + +function endOf (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + + // 'date' is an alias for 'day', so it should be considered as such. + if (units === 'date') { + units = 'day'; + } + + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); +} + +function valueOf () { + return this._d.valueOf() - ((this._offset || 0) * 60000); +} + +function unix () { + return Math.floor(this.valueOf() / 1000); +} + +function toDate () { + return new Date(this.valueOf()); +} + +function toArray () { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; +} + +function toObject () { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds() + }; +} + +function toJSON () { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; +} + +function isValid$2 () { + return isValid(this); +} + +function parsingFlags () { + return extend({}, getParsingFlags(this)); +} + +function invalidAt () { + return getParsingFlags(this).overflow; +} + +function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict + }; +} + +// FORMATTING + +addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; +}); + +addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; +}); + +function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter); +} + +addWeekYearFormatToken('gggg', 'weekYear'); +addWeekYearFormatToken('ggggg', 'weekYear'); +addWeekYearFormatToken('GGGG', 'isoWeekYear'); +addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + +// ALIASES + +addUnitAlias('weekYear', 'gg'); +addUnitAlias('isoWeekYear', 'GG'); + +// PRIORITY + +addUnitPriority('weekYear', 1); +addUnitPriority('isoWeekYear', 1); + + +// PARSING + +addRegexToken('G', matchSigned); +addRegexToken('g', matchSigned); +addRegexToken('GG', match1to2, match2); +addRegexToken('gg', match1to2, match2); +addRegexToken('GGGG', match1to4, match4); +addRegexToken('gggg', match1to4, match4); +addRegexToken('GGGGG', match1to6, match6); +addRegexToken('ggggg', match1to6, match6); + +addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); +}); + +addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); +}); + +// MOMENTS + +function getSetWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy); +} + +function getSetISOWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, this.isoWeek(), this.isoWeekday(), 1, 4); +} + +function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4); +} + +function getWeeksInYear () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); +} + +function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } +} + +function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; +} + +// FORMATTING + +addFormatToken('Q', 0, 'Qo', 'quarter'); + +// ALIASES + +addUnitAlias('quarter', 'Q'); + +// PRIORITY + +addUnitPriority('quarter', 7); + +// PARSING + +addRegexToken('Q', match1); +addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; +}); + +// MOMENTS + +function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); +} + +// FORMATTING + +addFormatToken('D', ['DD', 2], 'Do', 'date'); + +// ALIASES + +addUnitAlias('date', 'D'); + +// PRIOROITY +addUnitPriority('date', 9); + +// PARSING + +addRegexToken('D', match1to2); +addRegexToken('DD', match1to2, match2); +addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict ? + (locale._dayOfMonthOrdinalParse || locale._ordinalParse) : + locale._dayOfMonthOrdinalParseLenient; +}); + +addParseToken(['D', 'DD'], DATE); +addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); +}); + +// MOMENTS + +var getSetDayOfMonth = makeGetSet('Date', true); + +// FORMATTING + +addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + +// ALIASES + +addUnitAlias('dayOfYear', 'DDD'); + +// PRIORITY +addUnitPriority('dayOfYear', 4); + +// PARSING + +addRegexToken('DDD', match1to3); +addRegexToken('DDDD', match3); +addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); +}); + +// HELPERS + +// MOMENTS + +function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); +} + +// FORMATTING + +addFormatToken('m', ['mm', 2], 0, 'minute'); + +// ALIASES + +addUnitAlias('minute', 'm'); + +// PRIORITY + +addUnitPriority('minute', 14); + +// PARSING + +addRegexToken('m', match1to2); +addRegexToken('mm', match1to2, match2); +addParseToken(['m', 'mm'], MINUTE); + +// MOMENTS + +var getSetMinute = makeGetSet('Minutes', false); + +// FORMATTING + +addFormatToken('s', ['ss', 2], 0, 'second'); + +// ALIASES + +addUnitAlias('second', 's'); + +// PRIORITY + +addUnitPriority('second', 15); + +// PARSING + +addRegexToken('s', match1to2); +addRegexToken('ss', match1to2, match2); +addParseToken(['s', 'ss'], SECOND); + +// MOMENTS + +var getSetSecond = makeGetSet('Seconds', false); + +// FORMATTING + +addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); +}); + +addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); +}); + +addFormatToken(0, ['SSS', 3], 0, 'millisecond'); +addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; +}); +addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; +}); +addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; +}); +addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; +}); +addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; +}); +addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; +}); + + +// ALIASES + +addUnitAlias('millisecond', 'ms'); + +// PRIORITY + +addUnitPriority('millisecond', 16); + +// PARSING + +addRegexToken('S', match1to3, match1); +addRegexToken('SS', match1to3, match2); +addRegexToken('SSS', match1to3, match3); + +var token; +for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); +} + +function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); +} + +for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); +} +// MOMENTS + +var getSetMillisecond = makeGetSet('Milliseconds', false); + +// FORMATTING + +addFormatToken('z', 0, 0, 'zoneAbbr'); +addFormatToken('zz', 0, 0, 'zoneName'); + +// MOMENTS + +function getZoneAbbr () { + return this._isUTC ? 'UTC' : ''; +} + +function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : ''; +} + +var proto = Moment.prototype; + +proto.add = add; +proto.calendar = calendar$1; +proto.clone = clone; +proto.diff = diff; +proto.endOf = endOf; +proto.format = format; +proto.from = from; +proto.fromNow = fromNow; +proto.to = to; +proto.toNow = toNow; +proto.get = stringGet; +proto.invalidAt = invalidAt; +proto.isAfter = isAfter; +proto.isBefore = isBefore; +proto.isBetween = isBetween; +proto.isSame = isSame; +proto.isSameOrAfter = isSameOrAfter; +proto.isSameOrBefore = isSameOrBefore; +proto.isValid = isValid$2; +proto.lang = lang; +proto.locale = locale; +proto.localeData = localeData; +proto.max = prototypeMax; +proto.min = prototypeMin; +proto.parsingFlags = parsingFlags; +proto.set = stringSet; +proto.startOf = startOf; +proto.subtract = subtract; +proto.toArray = toArray; +proto.toObject = toObject; +proto.toDate = toDate; +proto.toISOString = toISOString; +proto.inspect = inspect; +proto.toJSON = toJSON; +proto.toString = toString; +proto.unix = unix; +proto.valueOf = valueOf; +proto.creationData = creationData; + +// Year +proto.year = getSetYear; +proto.isLeapYear = getIsLeapYear; + +// Week Year +proto.weekYear = getSetWeekYear; +proto.isoWeekYear = getSetISOWeekYear; + +// Quarter +proto.quarter = proto.quarters = getSetQuarter; + +// Month +proto.month = getSetMonth; +proto.daysInMonth = getDaysInMonth; + +// Week +proto.week = proto.weeks = getSetWeek; +proto.isoWeek = proto.isoWeeks = getSetISOWeek; +proto.weeksInYear = getWeeksInYear; +proto.isoWeeksInYear = getISOWeeksInYear; + +// Day +proto.date = getSetDayOfMonth; +proto.day = proto.days = getSetDayOfWeek; +proto.weekday = getSetLocaleDayOfWeek; +proto.isoWeekday = getSetISODayOfWeek; +proto.dayOfYear = getSetDayOfYear; + +// Hour +proto.hour = proto.hours = getSetHour; + +// Minute +proto.minute = proto.minutes = getSetMinute; + +// Second +proto.second = proto.seconds = getSetSecond; + +// Millisecond +proto.millisecond = proto.milliseconds = getSetMillisecond; + +// Offset +proto.utcOffset = getSetOffset; +proto.utc = setOffsetToUTC; +proto.local = setOffsetToLocal; +proto.parseZone = setOffsetToParsedOffset; +proto.hasAlignedHourOffset = hasAlignedHourOffset; +proto.isDST = isDaylightSavingTime; +proto.isLocal = isLocal; +proto.isUtcOffset = isUtcOffset; +proto.isUtc = isUtc; +proto.isUTC = isUtc; + +// Timezone +proto.zoneAbbr = getZoneAbbr; +proto.zoneName = getZoneName; + +// Deprecations +proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); +proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); +proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); +proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); +proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); + +function createUnix (input) { + return createLocal(input * 1000); +} + +function createInZone () { + return createLocal.apply(null, arguments).parseZone(); +} + +function preParsePostFormat (string) { + return string; +} + +var proto$1 = Locale.prototype; + +proto$1.calendar = calendar; +proto$1.longDateFormat = longDateFormat; +proto$1.invalidDate = invalidDate; +proto$1.ordinal = ordinal; +proto$1.preparse = preParsePostFormat; +proto$1.postformat = preParsePostFormat; +proto$1.relativeTime = relativeTime; +proto$1.pastFuture = pastFuture; +proto$1.set = set; + +// Month +proto$1.months = localeMonths; +proto$1.monthsShort = localeMonthsShort; +proto$1.monthsParse = localeMonthsParse; +proto$1.monthsRegex = monthsRegex; +proto$1.monthsShortRegex = monthsShortRegex; + +// Week +proto$1.week = localeWeek; +proto$1.firstDayOfYear = localeFirstDayOfYear; +proto$1.firstDayOfWeek = localeFirstDayOfWeek; + +// Day of Week +proto$1.weekdays = localeWeekdays; +proto$1.weekdaysMin = localeWeekdaysMin; +proto$1.weekdaysShort = localeWeekdaysShort; +proto$1.weekdaysParse = localeWeekdaysParse; + +proto$1.weekdaysRegex = weekdaysRegex; +proto$1.weekdaysShortRegex = weekdaysShortRegex; +proto$1.weekdaysMinRegex = weekdaysMinRegex; + +// Hours +proto$1.isPM = localeIsPM; +proto$1.meridiem = localeMeridiem; + +function get$1 (format, index, field, setter) { + var locale = getLocale(); + var utc = createUTC().set(setter, index); + return locale[field](utc, format); +} + +function listMonthsImpl (format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i; + var out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; +} + +// () +// (5) +// (fmt, 5) +// (fmt) +// (true) +// (true, 5) +// (true, fmt, 5) +// (true, fmt) +function listWeekdaysImpl (localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + var i; + var out = []; + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; +} + +function listMonths (format, index) { + return listMonthsImpl(format, index, 'months'); +} + +function listMonthsShort (format, index) { + return listMonthsImpl(format, index, 'monthsShort'); +} + +function listWeekdays (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); +} + +function listWeekdaysShort (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); +} + +function listWeekdaysMin (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); +} + +getSetGlobalLocale('en', { + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); + +// Side effect imports +hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale); +hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale); + +var mathAbs = Math.abs; + +function abs () { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; +} + +function addSubtract$1 (duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); +} + +// supports only 2.0-style add(1, 's') or add(duration) +function add$1 (input, value) { + return addSubtract$1(this, input, value, 1); +} + +// supports only 2.0-style subtract(1, 's') or subtract(duration) +function subtract$1 (input, value) { + return addSubtract$1(this, input, value, -1); +} + +function absCeil (number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } +} + +function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; +} + +function daysToMonths (days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; +} + +function monthsToDays (months) { + // the reverse of daysToMonths + return months * 146097 / 4800; +} + +function as (units) { + if (!this.isValid()) { + return NaN; + } + var days; + var months; + var milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 1440 + milliseconds / 6e4; + case 'second' : return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } +} + +// TODO: Use this.as('ms')? +function valueOf$1 () { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); +} + +function makeAs (alias) { + return function () { + return this.as(alias); + }; +} + +var asMilliseconds = makeAs('ms'); +var asSeconds = makeAs('s'); +var asMinutes = makeAs('m'); +var asHours = makeAs('h'); +var asDays = makeAs('d'); +var asWeeks = makeAs('w'); +var asMonths = makeAs('M'); +var asYears = makeAs('y'); + +function get$2 (units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; +} + +function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; +} + +var milliseconds = makeGetter('milliseconds'); +var seconds = makeGetter('seconds'); +var minutes = makeGetter('minutes'); +var hours = makeGetter('hours'); +var days = makeGetter('days'); +var months = makeGetter('months'); +var years = makeGetter('years'); + +function weeks () { + return absFloor(this.days() / 7); +} + +var round = Math.round; +var thresholds = { + ss: 44, // a few seconds to seconds + s : 45, // seconds to minute + m : 45, // minutes to hour + h : 22, // hours to day + d : 26, // days to month + M : 11 // months to year +}; + +// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize +function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); +} + +function relativeTime$1 (posNegDuration, withoutSuffix, locale) { + var duration = createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds <= thresholds.ss && ['s', seconds] || + seconds < thresholds.s && ['ss', seconds] || + minutes <= 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours <= 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days <= 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months <= 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years <= 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); +} + +// This function allows you to set the rounding function for relative time strings +function getSetRelativeTimeRounding (roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof(roundingFunction) === 'function') { + round = roundingFunction; + return true; + } + return false; +} + +// This function allows you to set a threshold for relative time strings +function getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; +} + +function humanize (withSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var locale = this.localeData(); + var output = relativeTime$1(this, !withSuffix, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); +} + +var abs$1 = Math.abs; + +function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs$1(this._milliseconds) / 1000; + var days = abs$1(this._days); + var months = abs$1(this._months); + var minutes, hours, years; + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); +} + +var proto$2 = Duration.prototype; + +proto$2.isValid = isValid$1; +proto$2.abs = abs; +proto$2.add = add$1; +proto$2.subtract = subtract$1; +proto$2.as = as; +proto$2.asMilliseconds = asMilliseconds; +proto$2.asSeconds = asSeconds; +proto$2.asMinutes = asMinutes; +proto$2.asHours = asHours; +proto$2.asDays = asDays; +proto$2.asWeeks = asWeeks; +proto$2.asMonths = asMonths; +proto$2.asYears = asYears; +proto$2.valueOf = valueOf$1; +proto$2._bubble = bubble; +proto$2.get = get$2; +proto$2.milliseconds = milliseconds; +proto$2.seconds = seconds; +proto$2.minutes = minutes; +proto$2.hours = hours; +proto$2.days = days; +proto$2.weeks = weeks; +proto$2.months = months; +proto$2.years = years; +proto$2.humanize = humanize; +proto$2.toISOString = toISOString$1; +proto$2.toString = toISOString$1; +proto$2.toJSON = toISOString$1; +proto$2.locale = locale; +proto$2.localeData = localeData; + +// Deprecations +proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1); +proto$2.lang = lang; + +// Side effect imports + +// FORMATTING + +addFormatToken('X', 0, 0, 'unix'); +addFormatToken('x', 0, 0, 'valueOf'); + +// PARSING + +addRegexToken('x', matchSigned); +addRegexToken('X', matchTimestamp); +addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); +}); +addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); +}); + +// Side effect imports + +//! moment.js +//! version : 2.18.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +hooks.version = '2.18.1'; + +setHookCallback(createLocal); + +hooks.fn = proto; +hooks.min = min; +hooks.max = max; +hooks.now = now; +hooks.utc = createUTC; +hooks.unix = createUnix; +hooks.months = listMonths; +hooks.isDate = isDate; +hooks.locale = getSetGlobalLocale; +hooks.invalid = createInvalid; +hooks.duration = createDuration; +hooks.isMoment = isMoment; +hooks.weekdays = listWeekdays; +hooks.parseZone = createInZone; +hooks.localeData = getLocale; +hooks.isDuration = isDuration; +hooks.monthsShort = listMonthsShort; +hooks.weekdaysMin = listWeekdaysMin; +hooks.defineLocale = defineLocale; +hooks.updateLocale = updateLocale; +hooks.locales = listLocales; +hooks.weekdaysShort = listWeekdaysShort; +hooks.normalizeUnits = normalizeUnits; +hooks.relativeTimeRounding = getSetRelativeTimeRounding; +hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; +hooks.calendarFormat = getCalendarFormat; +hooks.prototype = proto; + +//! moment.js locale configuration +//! locale : Afrikaans [af] +//! author : Werner Mollentze : https://github.com/wernerm + +hooks.defineLocale('af', { + months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), + weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM : function (input) { + return /^nm$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Vandag om] LT', + nextDay : '[Môre om] LT', + nextWeek : 'dddd [om] LT', + lastDay : '[Gister om] LT', + lastWeek : '[Laas] dddd [om] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'oor %s', + past : '%s gelede', + s : '\'n paar sekondes', + m : '\'n minuut', + mm : '%d minute', + h : '\'n uur', + hh : '%d ure', + d : '\'n dag', + dd : '%d dae', + M : '\'n maand', + MM : '%d maande', + y : '\'n jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week : { + dow : 1, // Maandag is die eerste dag van die week. + doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Algeria) [ar-dz] +//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme + +hooks.defineLocale('ar-dz', { + months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 4 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Kuwait) [ar-kw] +//! author : Nusret Parlak: https://github.com/nusretparlak + +hooks.defineLocale('ar-kw', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Lybia) [ar-ly] +//! author : Ali Hmer: https://github.com/kikoanis + +var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0' +}; +var pluralForm = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}; +var plurals = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}; +var pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}; +var months$1 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر' +]; + +hooks.defineLocale('ar-ly', { + months : months$1, + monthsShort : months$1, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize('s'), + m : pluralize('m'), + mm : pluralize('m'), + h : pluralize('h'), + hh : pluralize('h'), + d : pluralize('d'), + dd : pluralize('d'), + M : pluralize('M'), + MM : pluralize('M'), + y : pluralize('y'), + yy : pluralize('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Morocco) [ar-ma] +//! author : ElFadili Yassine : https://github.com/ElFadiliY +//! author : Abdel Said : https://github.com/abdelsaid + +hooks.defineLocale('ar-ma', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Saudi Arabia) [ar-sa] +//! author : Suhail Alkowaileet : https://github.com/xsoh + +var symbolMap$1 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' +}; +var numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; + +hooks.defineLocale('ar-sa', { + months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + preparse: function (string) { + return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$1[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Tunisia) [ar-tn] +//! author : Nader Toukabri : https://github.com/naderio + +hooks.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic [ar] +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi + +var symbolMap$2 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' +}; +var numberMap$1 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; +var pluralForm$1 = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}; +var plurals$1 = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}; +var pluralize$1 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$1(number), + str = plurals$1[u][pluralForm$1(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}; +var months$2 = [ + 'كانون الثاني يناير', + 'شباط فبراير', + 'آذار مارس', + 'نيسان أبريل', + 'أيار مايو', + 'حزيران يونيو', + 'تموز يوليو', + 'آب أغسطس', + 'أيلول سبتمبر', + 'تشرين الأول أكتوبر', + 'تشرين الثاني نوفمبر', + 'كانون الأول ديسمبر' +]; + +hooks.defineLocale('ar', { + months : months$2, + monthsShort : months$2, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize$1('s'), + m : pluralize$1('m'), + mm : pluralize$1('m'), + h : pluralize$1('h'), + hh : pluralize$1('h'), + d : pluralize$1('d'), + dd : pluralize$1('d'), + M : pluralize$1('M'), + MM : pluralize$1('M'), + y : pluralize$1('y'), + yy : pluralize$1('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$1[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$2[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Azerbaijani [az] +//! author : topchiyev : https://github.com/topchiyev + +var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı' +}; + +hooks.defineLocale('az', { + months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), + monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), + weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[sabah saat] LT', + nextWeek : '[gələn həftə] dddd [saat] LT', + lastDay : '[dünən] LT', + lastWeek : '[keçən həftə] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s əvvəl', + s : 'birneçə saniyyə', + m : 'bir dəqiqə', + mm : '%d dəqiqə', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir il', + yy : '%d il' + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM : function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Belarusian [be] +//! author : Dmitry Demidov : https://github.com/demidov91 +//! author: Praleska: http://praleska.pro/ +//! Author : Menelion Elensúle : https://github.com/Oire + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + 'dd': 'дзень_дні_дзён', + 'MM': 'месяц_месяцы_месяцаў', + 'yy': 'год_гады_гадоў' + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } + else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} + +hooks.defineLocale('be', { + months : { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_') + }, + monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), + weekdays : { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'), + isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/ + }, + weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'праз %s', + past : '%s таму', + s : 'некалькі секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : relativeTimeWithPlural, + hh : relativeTimeWithPlural, + d : 'дзень', + dd : relativeTimeWithPlural, + M : 'месяц', + MM : relativeTimeWithPlural, + y : 'год', + yy : relativeTimeWithPlural + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM : function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bulgarian [bg] +//! author : Krasen Borisov : https://github.com/kraz + +hooks.defineLocale('bg', { + months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'), + weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Днес в] LT', + nextDay : '[Утре в] LT', + nextWeek : 'dddd [в] LT', + lastDay : '[Вчера в] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'след %s', + past : 'преди %s', + s : 'няколко секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дни', + M : 'месец', + MM : '%d месеца', + y : 'година', + yy : '%d години' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bengali [bn] +//! author : Kaushik Gandhi : https://github.com/kaushikgandhi + +var symbolMap$3 = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০' +}; +var numberMap$2 = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' +}; + +hooks.defineLocale('bn', { + months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), + monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'), + weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'), + weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'), + longDateFormat : { + LT : 'A h:mm সময়', + LTS : 'A h:mm:ss সময়', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm সময়', + LLLL : 'dddd, D MMMM YYYY, A h:mm সময়' + }, + calendar : { + sameDay : '[আজ] LT', + nextDay : '[আগামীকাল] LT', + nextWeek : 'dddd, LT', + lastDay : '[গতকাল] LT', + lastWeek : '[গত] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s পরে', + past : '%s আগে', + s : 'কয়েক সেকেন্ড', + m : 'এক মিনিট', + mm : '%d মিনিট', + h : 'এক ঘন্টা', + hh : '%d ঘন্টা', + d : 'এক দিন', + dd : '%d দিন', + M : 'এক মাস', + MM : '%d মাস', + y : 'এক বছর', + yy : '%d বছর' + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap$2[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$3[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tibetan [bo] +//! author : Thupten N. Chakrishar : https://github.com/vajradog + +var symbolMap$4 = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠' +}; +var numberMap$3 = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0' +}; + +hooks.defineLocale('bo', { + months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'), + weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[དི་རིང] LT', + nextDay : '[སང་ཉིན] LT', + nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay : '[ཁ་སང] LT', + lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ལ་', + past : '%s སྔན་ལ', + s : 'ལམ་སང', + m : 'སྐར་མ་གཅིག', + mm : '%d སྐར་མ', + h : 'ཆུ་ཚོད་གཅིག', + hh : '%d ཆུ་ཚོད', + d : 'ཉིན་གཅིག', + dd : '%d ཉིན་', + M : 'ཟླ་བ་གཅིག', + MM : '%d ཟླ་བ', + y : 'ལོ་གཅིག', + yy : '%d ལོ' + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap$3[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$4[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Breton [br] +//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou + +function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + 'mm': 'munutenn', + 'MM': 'miz', + 'dd': 'devezh' + }; + return number + ' ' + mutation(format[key], number); +} +function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } +} +function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; +} +function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; +} +function softMutation(text) { + var mutationTable = { + 'm': 'v', + 'b': 'v', + 'd': 'z' + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); +} + +hooks.defineLocale('br', { + months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), + monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h[e]mm A', + LTS : 'h[e]mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [a viz] MMMM YYYY', + LLL : 'D [a viz] MMMM YYYY h[e]mm A', + LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A' + }, + calendar : { + sameDay : '[Hiziv da] LT', + nextDay : '[Warc\'hoazh da] LT', + nextWeek : 'dddd [da] LT', + lastDay : '[Dec\'h da] LT', + lastWeek : 'dddd [paset da] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'a-benn %s', + past : '%s \'zo', + s : 'un nebeud segondennoù', + m : 'ur vunutenn', + mm : relativeTimeWithMutation, + h : 'un eur', + hh : '%d eur', + d : 'un devezh', + dd : relativeTimeWithMutation, + M : 'ur miz', + MM : relativeTimeWithMutation, + y : 'ur bloaz', + yy : specialMutationForYears + }, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, + ordinal : function (number) { + var output = (number === 1) ? 'añ' : 'vet'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bosnian [bs] +//! author : Nedim Cholich : https://github.com/frontyard +//! based on (hr) translation by Bojan Marković + +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +hooks.defineLocale('bs', { + months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : 'dan', + dd : translate, + M : 'mjesec', + MM : translate, + y : 'godinu', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Catalan [ca] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +hooks.defineLocale('ca', { + months : { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), + format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'), + isFormat: /D[oD]?(\s)+MMMM/ + }, + monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), + weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : '[el] D MMMM [de] YYYY', + ll : 'D MMM YYYY', + LLL : '[el] D MMMM [de] YYYY [a les] H:mm', + lll : 'D MMM YYYY, H:mm', + LLLL : '[el] dddd D MMMM [de] YYYY [a les] H:mm', + llll : 'ddd D MMM YYYY, H:mm' + }, + calendar : { + sameDay : function () { + return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextDay : function () { + return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastDay : function () { + return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'd\'aquí %s', + past : 'fa %s', + s : 'uns segons', + m : 'un minut', + mm : '%d minuts', + h : 'una hora', + hh : '%d hores', + d : 'un dia', + dd : '%d dies', + M : 'un mes', + MM : '%d mesos', + y : 'un any', + yy : '%d anys' + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal : function (number, period) { + var output = (number === 1) ? 'r' : + (number === 2) ? 'n' : + (number === 3) ? 'r' : + (number === 4) ? 't' : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Czech [cs] +//! author : petrbela : https://github.com/petrbela + +var months$3 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'); +var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'); +function plural$1(n) { + return (n > 1) && (n < 5) && (~~(n / 10) !== 1); +} +function translate$1(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + break; + } +} + +hooks.defineLocale('cs', { + months : months$3, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months$3, monthsShort)), + shortMonthsParse : (function (monthsShort) { + var i, _shortMonthsParse = []; + for (i = 0; i < 12; i++) { + _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i'); + } + return _shortMonthsParse; + }(monthsShort)), + longMonthsParse : (function (months) { + var i, _longMonthsParse = []; + for (i = 0; i < 12; i++) { + _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i'); + } + return _longMonthsParse; + }(months$3)), + weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm', + l : 'D. M. YYYY' + }, + calendar : { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'před %s', + s : translate$1, + m : translate$1, + mm : translate$1, + h : translate$1, + hh : translate$1, + d : translate$1, + dd : translate$1, + M : translate$1, + MM : translate$1, + y : translate$1, + yy : translate$1 + }, + dayOfMonthOrdinalParse : /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chuvash [cv] +//! author : Anatoly Mironov : https://github.com/mirontoli + +hooks.defineLocale('cv', { + months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'), + monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'), + weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm' + }, + calendar : { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L' + }, + relativeTime : { + future : function (output) { + var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран'; + return output + affix; + }, + past : '%s каялла', + s : 'пӗр-ик ҫеккунт', + m : 'пӗр минут', + mm : '%d минут', + h : 'пӗр сехет', + hh : '%d сехет', + d : 'пӗр кун', + dd : '%d кун', + M : 'пӗр уйӑх', + MM : '%d уйӑх', + y : 'пӗр ҫул', + yy : '%d ҫул' + }, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, + ordinal : '%d-мӗш', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Welsh [cy] +//! author : Robert Allen : https://github.com/robgallen +//! author : https://github.com/ryangreaves + +hooks.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact : true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd' + }, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed + 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Danish [da] +//! author : Ulrik Nielsen : https://github.com/mrbase + +hooks.defineLocale('da', { + months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay : '[i dag kl.] LT', + nextDay : '[i morgen kl.] LT', + nextWeek : 'på dddd [kl.] LT', + lastDay : '[i går kl.] LT', + lastWeek : '[i] dddd[s kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'få sekunder', + m : 'et minut', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dage', + M : 'en måned', + MM : '%d måneder', + y : 'et år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : German (Austria) [de-at] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Martin Groller : https://github.com/MadMG +//! author : Mikolaj Dadela : https://github.com/mik01aj + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +hooks.defineLocale('de-at', { + months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : German (Switzerland) [de-ch] +//! author : sschueller : https://github.com/sschueller + +// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de# + +function processRelativeTime$1(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +hooks.defineLocale('de-ch', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH.mm', + LLLL : 'dddd, D. MMMM YYYY HH.mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime$1, + mm : '%d Minuten', + h : processRelativeTime$1, + hh : '%d Stunden', + d : processRelativeTime$1, + dd : processRelativeTime$1, + M : processRelativeTime$1, + MM : processRelativeTime$1, + y : processRelativeTime$1, + yy : processRelativeTime$1 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : German [de] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Mikolaj Dadela : https://github.com/mik01aj + +function processRelativeTime$2(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +hooks.defineLocale('de', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime$2, + mm : '%d Minuten', + h : processRelativeTime$2, + hh : '%d Stunden', + d : processRelativeTime$2, + dd : processRelativeTime$2, + M : processRelativeTime$2, + MM : processRelativeTime$2, + y : processRelativeTime$2, + yy : processRelativeTime$2 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Maldivian [dv] +//! author : Jawish Hameed : https://github.com/jawish + +var months$4 = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު' +]; +var weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު' +]; + +hooks.defineLocale('dv', { + months : months$4, + monthsShort : months$4, + weekdays : weekdays, + weekdaysShort : weekdays, + weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat : { + + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/M/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /މކ|މފ/, + isPM : function (input) { + return 'މފ' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar : { + sameDay : '[މިއަދު] LT', + nextDay : '[މާދަމާ] LT', + nextWeek : 'dddd LT', + lastDay : '[އިއްޔެ] LT', + lastWeek : '[ފާއިތުވި] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ތެރޭގައި %s', + past : 'ކުރިން %s', + s : 'ސިކުންތުކޮޅެއް', + m : 'މިނިޓެއް', + mm : 'މިނިޓު %d', + h : 'ގަޑިއިރެއް', + hh : 'ގަޑިއިރު %d', + d : 'ދުވަހެއް', + dd : 'ދުވަސް %d', + M : 'މަހެއް', + MM : 'މަސް %d', + y : 'އަހަރެއް', + yy : 'އަހަރު %d' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 7, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Greek [el] +//! author : Aggelos Karalias : https://github.com/mehiel + +hooks.defineLocale('el', { + monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), + monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'), + months : function (momentToFormat, format) { + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), + weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM : function (input) { + return ((input + '').toLowerCase()[0] === 'μ'); + }, + meridiemParse : /[ΠΜ]\.?Μ?\.?/i, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendarEl : { + sameDay : '[Σήμερα {}] LT', + nextDay : '[Αύριο {}] LT', + nextWeek : 'dddd [{}] LT', + lastDay : '[Χθες {}] LT', + lastWeek : function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction(output)) { + output = output.apply(mom); + } + return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις')); + }, + relativeTime : { + future : 'σε %s', + past : '%s πριν', + s : 'λίγα δευτερόλεπτα', + m : 'ένα λεπτό', + mm : '%d λεπτά', + h : 'μία ώρα', + hh : '%d ώρες', + d : 'μία μέρα', + dd : '%d μέρες', + M : 'ένας μήνας', + MM : '%d μήνες', + y : 'ένας χρόνος', + yy : '%d χρόνια' + }, + dayOfMonthOrdinalParse: /\d{1,2}η/, + ordinal: '%dη', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Australia) [en-au] +//! author : Jared Morse : https://github.com/jarcoal + +hooks.defineLocale('en-au', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Canada) [en-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +hooks.defineLocale('en-ca', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'YYYY-MM-DD', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); + +//! moment.js locale configuration +//! locale : English (United Kingdom) [en-gb] +//! author : Chris Gedrim : https://github.com/chrisgedrim + +hooks.defineLocale('en-gb', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Ireland) [en-ie] +//! author : Chris Cartlidge : https://github.com/chriscartlidge + +hooks.defineLocale('en-ie', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (New Zealand) [en-nz] +//! author : Luke McGregor : https://github.com/lukemcgregor + +hooks.defineLocale('en-nz', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Esperanto [eo] +//! author : Colin Dean : https://github.com/colindean +//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia +//! comment : miestasmia corrected the translation by colindean + +hooks.defineLocale('eo', { + months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'), + weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D[-a de] MMMM, YYYY', + LLL : 'D[-a de] MMMM, YYYY HH:mm', + LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm' + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar : { + sameDay : '[Hodiaŭ je] LT', + nextDay : '[Morgaŭ je] LT', + nextWeek : 'dddd [je] LT', + lastDay : '[Hieraŭ je] LT', + lastWeek : '[pasinta] dddd [je] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'post %s', + past : 'antaŭ %s', + s : 'sekundoj', + m : 'minuto', + mm : '%d minutoj', + h : 'horo', + hh : '%d horoj', + d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo + dd : '%d tagoj', + M : 'monato', + MM : '%d monatoj', + y : 'jaro', + yy : '%d jaroj' + }, + dayOfMonthOrdinalParse: /\d{1,2}a/, + ordinal : '%da', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Spanish (Dominican Republic) [es-do] + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +hooks.defineLocale('es-do', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort$1[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY h:mm A', + LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Spanish [es] +//! author : Julio Napurí : https://github.com/julionc + +var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +hooks.defineLocale('es', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot$1; + } else if (/-MMM-/.test(format)) { + return monthsShort$2[m.month()]; + } else { + return monthsShortDot$1[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Estonian [et] +//! author : Henry Kehlmann : https://github.com/madhenry +//! improvements : Illimar Tambek : https://github.com/ragulka + +function processRelativeTime$3(number, withoutSuffix, key, isFuture) { + var format = { + 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + 'm' : ['ühe minuti', 'üks minut'], + 'mm': [number + ' minuti', number + ' minutit'], + 'h' : ['ühe tunni', 'tund aega', 'üks tund'], + 'hh': [number + ' tunni', number + ' tundi'], + 'd' : ['ühe päeva', 'üks päev'], + 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], + 'MM': [number + ' kuu', number + ' kuud'], + 'y' : ['ühe aasta', 'aasta', 'üks aasta'], + 'yy': [number + ' aasta', number + ' aastat'] + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; +} + +hooks.defineLocale('et', { + months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), + monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), + weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), + weekdaysShort : 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin : 'P_E_T_K_N_R_L'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Täna,] LT', + nextDay : '[Homme,] LT', + nextWeek : '[Järgmine] dddd LT', + lastDay : '[Eile,] LT', + lastWeek : '[Eelmine] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s pärast', + past : '%s tagasi', + s : processRelativeTime$3, + m : processRelativeTime$3, + mm : processRelativeTime$3, + h : processRelativeTime$3, + hh : processRelativeTime$3, + d : processRelativeTime$3, + dd : '%d päeva', + M : processRelativeTime$3, + MM : processRelativeTime$3, + y : processRelativeTime$3, + yy : processRelativeTime$3 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Basque [eu] +//! author : Eneko Illarramendi : https://github.com/eillarra + +hooks.defineLocale('eu', { + months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), + monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), + monthsParseExact : true, + weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), + weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY[ko] MMMM[ren] D[a]', + LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l : 'YYYY-M-D', + ll : 'YYYY[ko] MMM D[a]', + lll : 'YYYY[ko] MMM D[a] HH:mm', + llll : 'ddd, YYYY[ko] MMM D[a] HH:mm' + }, + calendar : { + sameDay : '[gaur] LT[etan]', + nextDay : '[bihar] LT[etan]', + nextWeek : 'dddd LT[etan]', + lastDay : '[atzo] LT[etan]', + lastWeek : '[aurreko] dddd LT[etan]', + sameElse : 'L' + }, + relativeTime : { + future : '%s barru', + past : 'duela %s', + s : 'segundo batzuk', + m : 'minutu bat', + mm : '%d minutu', + h : 'ordu bat', + hh : '%d ordu', + d : 'egun bat', + dd : '%d egun', + M : 'hilabete bat', + MM : '%d hilabete', + y : 'urte bat', + yy : '%d urte' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Persian [fa] +//! author : Ebrahim Byagowi : https://github.com/ebraminio + +var symbolMap$5 = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰' +}; +var numberMap$4 = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0' +}; + +hooks.defineLocale('fa', { + months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar : { + sameDay : '[امروز ساعت] LT', + nextDay : '[فردا ساعت] LT', + nextWeek : 'dddd [ساعت] LT', + lastDay : '[دیروز ساعت] LT', + lastWeek : 'dddd [پیش] [ساعت] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'در %s', + past : '%s پیش', + s : 'چند ثانیه', + m : 'یک دقیقه', + mm : '%d دقیقه', + h : 'یک ساعت', + hh : '%d ساعت', + d : 'یک روز', + dd : '%d روز', + M : 'یک ماه', + MM : '%d ماه', + y : 'یک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap$4[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$5[match]; + }).replace(/,/g, '،'); + }, + dayOfMonthOrdinalParse: /\d{1,2}م/, + ordinal : '%dم', + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Finnish [fi] +//! author : Tarmo Aidantausta : https://github.com/bleadof + +var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '); +var numbersFuture = [ + 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', + numbersPast[7], numbersPast[8], numbersPast[9] + ]; +function translate$2(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; +} +function verbalNumber(number, isFuture) { + return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; +} + +hooks.defineLocale('fi', { + months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), + monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), + weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), + weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'Do MMMM[ta] YYYY', + LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l : 'D.M.YYYY', + ll : 'Do MMM YYYY', + lll : 'Do MMM YYYY, [klo] HH.mm', + llll : 'ddd, Do MMM YYYY, [klo] HH.mm' + }, + calendar : { + sameDay : '[tänään] [klo] LT', + nextDay : '[huomenna] [klo] LT', + nextWeek : 'dddd [klo] LT', + lastDay : '[eilen] [klo] LT', + lastWeek : '[viime] dddd[na] [klo] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s päästä', + past : '%s sitten', + s : translate$2, + m : translate$2, + mm : translate$2, + h : translate$2, + hh : translate$2, + d : translate$2, + dd : translate$2, + M : translate$2, + MM : translate$2, + y : translate$2, + yy : translate$2 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Faroese [fo] +//! author : Ragnar Johannesen : https://github.com/ragnar123 + +hooks.defineLocale('fo', { + months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'), + weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D. MMMM, YYYY HH:mm' + }, + calendar : { + sameDay : '[Í dag kl.] LT', + nextDay : '[Í morgin kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[Í gjár kl.] LT', + lastWeek : '[síðstu] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'um %s', + past : '%s síðani', + s : 'fá sekund', + m : 'ein minutt', + mm : '%d minuttir', + h : 'ein tími', + hh : '%d tímar', + d : 'ein dagur', + dd : '%d dagar', + M : 'ein mánaði', + MM : '%d mánaðir', + y : 'eitt ár', + yy : '%d ár' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : French (Canada) [fr-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +hooks.defineLocale('fr-ca', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + } +}); + +//! moment.js locale configuration +//! locale : French (Switzerland) [fr-ch] +//! author : Gaspard Bucher : https://github.com/gaspard + +hooks.defineLocale('fr-ch', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : French [fr] +//! author : John Fischer : https://github.com/jfroffice + +hooks.defineLocale('fr', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal : function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Frisian [fy] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v + +var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'); +var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); + +hooks.defineLocale('fy', { + months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), + weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'oer %s', + past : '%s lyn', + s : 'in pear sekonden', + m : 'ien minút', + mm : '%d minuten', + h : 'ien oere', + hh : '%d oeren', + d : 'ien dei', + dd : '%d dagen', + M : 'ien moanne', + MM : '%d moannen', + y : 'ien jier', + yy : '%d jierren' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Scottish Gaelic [gd] +//! author : Jon Ashdown : https://github.com/jonashdown + +var months$5 = [ + 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd' +]; + +var monthsShort$3 = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh']; + +var weekdays$1 = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; + +var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; + +var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + +hooks.defineLocale('gd', { + months : months$5, + monthsShort : monthsShort$3, + monthsParseExact : true, + weekdays : weekdays$1, + weekdaysShort : weekdaysShort, + weekdaysMin : weekdaysMin, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[An-diugh aig] LT', + nextDay : '[A-màireach aig] LT', + nextWeek : 'dddd [aig] LT', + lastDay : '[An-dè aig] LT', + lastWeek : 'dddd [seo chaidh] [aig] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ann an %s', + past : 'bho chionn %s', + s : 'beagan diogan', + m : 'mionaid', + mm : '%d mionaidean', + h : 'uair', + hh : '%d uairean', + d : 'latha', + dd : '%d latha', + M : 'mìos', + MM : '%d mìosan', + y : 'bliadhna', + yy : '%d bliadhna' + }, + dayOfMonthOrdinalParse : /\d{1,2}(d|na|mh)/, + ordinal : function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Galician [gl] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +hooks.defineLocale('gl', { + months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'), + monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextDay : function () { + return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextWeek : function () { + return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + lastDay : function () { + return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; + }, + lastWeek : function () { + return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past : 'hai %s', + s : 'uns segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'unha hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Konkani Latin script [gom-latn] +//! author : The Discoverer : https://github.com/WikiDiscoverer + +function processRelativeTime$4(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['thodde secondanim', 'thodde second'], + 'm': ['eka mintan', 'ek minute'], + 'mm': [number + ' mintanim', number + ' mintam'], + 'h': ['eka horan', 'ek hor'], + 'hh': [number + ' horanim', number + ' hor'], + 'd': ['eka disan', 'ek dis'], + 'dd': [number + ' disanim', number + ' dis'], + 'M': ['eka mhoinean', 'ek mhoino'], + 'MM': [number + ' mhoineanim', number + ' mhoine'], + 'y': ['eka vorsan', 'ek voros'], + 'yy': [number + ' vorsanim', number + ' vorsam'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +hooks.defineLocale('gom-latn', { + months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), + monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'), + weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'A h:mm [vazta]', + LTS : 'A h:mm:ss [vazta]', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY A h:mm [vazta]', + LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]' + }, + calendar : { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Ieta to] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fatlo] dddd[,] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s', + past : '%s adim', + s : processRelativeTime$4, + m : processRelativeTime$4, + mm : processRelativeTime$4, + h : processRelativeTime$4, + hh : processRelativeTime$4, + d : processRelativeTime$4, + dd : processRelativeTime$4, + M : processRelativeTime$4, + MM : processRelativeTime$4, + y : processRelativeTime$4, + yy : processRelativeTime$4 + }, + dayOfMonthOrdinalParse : /\d{1,2}(er)/, + ordinal : function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /rati|sokalli|donparam|sanje/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokalli') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokalli'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + } +}); + +//! moment.js locale configuration +//! locale : Hebrew [he] +//! author : Tomer Cohen : https://github.com/tomer +//! author : Moshe Simantov : https://github.com/DevelopmentIL +//! author : Tal Ater : https://github.com/TalAter + +hooks.defineLocale('he', { + months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), + monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'), + weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [ב]MMMM YYYY', + LLL : 'D [ב]MMMM YYYY HH:mm', + LLLL : 'dddd, D [ב]MMMM YYYY HH:mm', + l : 'D/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay : '[היום ב־]LT', + nextDay : '[מחר ב־]LT', + nextWeek : 'dddd [בשעה] LT', + lastDay : '[אתמול ב־]LT', + lastWeek : '[ביום] dddd [האחרון בשעה] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'בעוד %s', + past : 'לפני %s', + s : 'מספר שניות', + m : 'דקה', + mm : '%d דקות', + h : 'שעה', + hh : function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d : 'יום', + dd : function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M : 'חודש', + MM : function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y : 'שנה', + yy : function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + } + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM : function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + } +}); + +//! moment.js locale configuration +//! locale : Hindi [hi] +//! author : Mayank Singhal : https://github.com/mayanksinghal + +var symbolMap$6 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$5 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +hooks.defineLocale('hi', { + months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'), + monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), + monthsParseExact: true, + weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm बजे', + LTS : 'A h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, A h:mm बजे' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[कल] LT', + nextWeek : 'dddd, LT', + lastDay : '[कल] LT', + lastWeek : '[पिछले] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s में', + past : '%s पहले', + s : 'कुछ ही क्षण', + m : 'एक मिनट', + mm : '%d मिनट', + h : 'एक घंटा', + hh : '%d घंटे', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महीने', + MM : '%d महीने', + y : 'एक वर्ष', + yy : '%d वर्ष' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$5[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$6[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Croatian [hr] +//! author : Bojan Marković : https://github.com/bmarkovic + +function translate$3(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +hooks.defineLocale('hr', { + months : { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_') + }, + monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate$3, + mm : translate$3, + h : translate$3, + hh : translate$3, + d : 'dan', + dd : translate$3, + M : 'mjesec', + MM : translate$3, + y : 'godinu', + yy : translate$3 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Hungarian [hu] +//! author : Adam Brunner : https://github.com/adambrunner + +var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); +function translate$4(number, withoutSuffix, key, isFuture) { + var num = number, + suffix; + switch (key) { + case 's': + return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; +} +function week(isFuture) { + return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; +} + +hooks.defineLocale('hu', { + months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), + monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), + weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'YYYY.MM.DD.', + LL : 'YYYY. MMMM D.', + LLL : 'YYYY. MMMM D. H:mm', + LLLL : 'YYYY. MMMM D., dddd H:mm' + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar : { + sameDay : '[ma] LT[-kor]', + nextDay : '[holnap] LT[-kor]', + nextWeek : function () { + return week.call(this, true); + }, + lastDay : '[tegnap] LT[-kor]', + lastWeek : function () { + return week.call(this, false); + }, + sameElse : 'L' + }, + relativeTime : { + future : '%s múlva', + past : '%s', + s : translate$4, + m : translate$4, + mm : translate$4, + h : translate$4, + hh : translate$4, + d : translate$4, + dd : translate$4, + M : translate$4, + MM : translate$4, + y : translate$4, + yy : translate$4 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Armenian [hy-am] +//! author : Armendarabyan : https://github.com/armendarabyan + +hooks.defineLocale('hy-am', { + months : { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_') + }, + monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'), + weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY թ.', + LLL : 'D MMMM YYYY թ., HH:mm', + LLLL : 'dddd, D MMMM YYYY թ., HH:mm' + }, + calendar : { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L' + }, + relativeTime : { + future : '%s հետո', + past : '%s առաջ', + s : 'մի քանի վայրկյան', + m : 'րոպե', + mm : '%d րոպե', + h : 'ժամ', + hh : '%d ժամ', + d : 'օր', + dd : '%d օր', + M : 'ամիս', + MM : '%d ամիս', + y : 'տարի', + yy : '%d տարի' + }, + meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem : function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'առավոտվա'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Indonesian [id] +//! author : Mohammad Satrio Utomo : https://github.com/tyok +//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan + +hooks.defineLocale('id', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Besok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kemarin pukul] LT', + lastWeek : 'dddd [lalu pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lalu', + s : 'beberapa detik', + m : 'semenit', + mm : '%d menit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Icelandic [is] +//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik + +function plural$2(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; +} +function translate$5(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } +} + +hooks.defineLocale('is', { + months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'), + weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm' + }, + calendar : { + sameDay : '[í dag kl.] LT', + nextDay : '[á morgun kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[í gær kl.] LT', + lastWeek : '[síðasta] dddd [kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'eftir %s', + past : 'fyrir %s síðan', + s : translate$5, + m : translate$5, + mm : translate$5, + h : 'klukkustund', + hh : translate$5, + d : translate$5, + dd : translate$5, + M : translate$5, + MM : translate$5, + y : translate$5, + yy : translate$5 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Italian [it] +//! author : Lorenzo : https://github.com/aliem +//! author: Mattia Larentis: https://github.com/nostalgiaz + +hooks.defineLocale('it', { + months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), + monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), + weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : function (s) { + return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s; + }, + past : '%s fa', + s : 'alcuni secondi', + m : 'un minuto', + mm : '%d minuti', + h : 'un\'ora', + hh : '%d ore', + d : 'un giorno', + dd : '%d giorni', + M : 'un mese', + MM : '%d mesi', + y : 'un anno', + yy : '%d anni' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Japanese [ja] +//! author : LI Long : https://github.com/baryon + +hooks.defineLocale('ja', { + months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort : '日_月_火_水_木_金_土'.split('_'), + weekdaysMin : '日_月_火_水_木_金_土'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY年M月D日', + LLL : 'YYYY年M月D日 HH:mm', + LLLL : 'YYYY年M月D日 HH:mm dddd', + l : 'YYYY/MM/DD', + ll : 'YYYY年M月D日', + lll : 'YYYY年M月D日 HH:mm', + llll : 'YYYY年M月D日 HH:mm dddd' + }, + meridiemParse: /午前|午後/i, + isPM : function (input) { + return input === '午後'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar : { + sameDay : '[今日] LT', + nextDay : '[明日] LT', + nextWeek : '[来週]dddd LT', + lastDay : '[昨日] LT', + lastWeek : '[前週]dddd LT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse : /\d{1,2}日/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime : { + future : '%s後', + past : '%s前', + s : '数秒', + m : '1分', + mm : '%d分', + h : '1時間', + hh : '%d時間', + d : '1日', + dd : '%d日', + M : '1ヶ月', + MM : '%dヶ月', + y : '1年', + yy : '%d年' + } +}); + +//! moment.js locale configuration +//! locale : Javanese [jv] +//! author : Rony Lantip : https://github.com/lantip +//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa + +hooks.defineLocale('jv', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar : { + sameDay : '[Dinten puniko pukul] LT', + nextDay : '[Mbenjang pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kala wingi pukul] LT', + lastWeek : 'dddd [kepengker pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'wonten ing %s', + past : '%s ingkang kepengker', + s : 'sawetawis detik', + m : 'setunggal menit', + mm : '%d menit', + h : 'setunggal jam', + hh : '%d jam', + d : 'sedinten', + dd : '%d dinten', + M : 'sewulan', + MM : '%d wulan', + y : 'setaun', + yy : '%d taun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Georgian [ka] +//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili + +hooks.defineLocale('ka', { + months : { + standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), + format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') + }, + monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays : { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'), + isFormat: /(წინა|შემდეგ)/ + }, + weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[დღეს] LT[-ზე]', + nextDay : '[ხვალ] LT[-ზე]', + lastDay : '[გუშინ] LT[-ზე]', + nextWeek : '[შემდეგ] dddd LT[-ზე]', + lastWeek : '[წინა] dddd LT-ზე', + sameElse : 'L' + }, + relativeTime : { + future : function (s) { + return (/(წამი|წუთი|საათი|წელი)/).test(s) ? + s.replace(/ი$/, 'ში') : + s + 'ში'; + }, + past : function (s) { + if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { + return s.replace(/(ი|ე)$/, 'ის უკან'); + } + if ((/წელი/).test(s)) { + return s.replace(/წელი$/, 'წლის უკან'); + } + }, + s : 'რამდენიმე წამი', + m : 'წუთი', + mm : '%d წუთი', + h : 'საათი', + hh : '%d საათი', + d : 'დღე', + dd : '%d დღე', + M : 'თვე', + MM : '%d თვე', + y : 'წელი', + yy : '%d წელი' + }, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal : function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week : { + dow : 1, + doy : 7 + } +}); + +//! moment.js locale configuration +//! locale : Kazakh [kk] +//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan + +var suffixes$1 = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші' +}; + +hooks.defineLocale('kk', { + months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'), + monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'), + weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгін сағат] LT', + nextDay : '[Ертең сағат] LT', + nextWeek : 'dddd [сағат] LT', + lastDay : '[Кеше сағат] LT', + lastWeek : '[Өткен аптаның] dddd [сағат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ішінде', + past : '%s бұрын', + s : 'бірнеше секунд', + m : 'бір минут', + mm : '%d минут', + h : 'бір сағат', + hh : '%d сағат', + d : 'бір күн', + dd : '%d күн', + M : 'бір ай', + MM : '%d ай', + y : 'бір жыл', + yy : '%d жыл' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Cambodian [km] +//! author : Kruy Vanna : https://github.com/kruyvanna + +hooks.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L' + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Kannada [kn] +//! author : Rajeev Naik : https://github.com/rajeevnaikte + +var symbolMap$7 = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦' +}; +var numberMap$6 = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0' +}; + +hooks.defineLocale('kn', { + months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'), + monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'), + monthsParseExact: true, + weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'), + weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[ಇಂದು] LT', + nextDay : '[ನಾಳೆ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ನಿನ್ನೆ] LT', + lastWeek : '[ಕೊನೆಯ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ನಂತರ', + past : '%s ಹಿಂದೆ', + s : 'ಕೆಲವು ಕ್ಷಣಗಳು', + m : 'ಒಂದು ನಿಮಿಷ', + mm : '%d ನಿಮಿಷ', + h : 'ಒಂದು ಗಂಟೆ', + hh : '%d ಗಂಟೆ', + d : 'ಒಂದು ದಿನ', + dd : '%d ದಿನ', + M : 'ಒಂದು ತಿಂಗಳು', + MM : '%d ತಿಂಗಳು', + y : 'ಒಂದು ವರ್ಷ', + yy : '%d ವರ್ಷ' + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap$6[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$7[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal : function (number) { + return number + 'ನೇ'; + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Korean [ko] +//! author : Kyungwook, Park : https://github.com/kyungw00k +//! author : Jeeeyul Lee + +hooks.defineLocale('ko', { + months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort : '일_월_화_수_목_금_토'.split('_'), + weekdaysMin : '일_월_화_수_목_금_토'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'YYYY.MM.DD', + LL : 'YYYY년 MMMM D일', + LLL : 'YYYY년 MMMM D일 A h:mm', + LLLL : 'YYYY년 MMMM D일 dddd A h:mm', + l : 'YYYY.MM.DD', + ll : 'YYYY년 MMMM D일', + lll : 'YYYY년 MMMM D일 A h:mm', + llll : 'YYYY년 MMMM D일 dddd A h:mm' + }, + calendar : { + sameDay : '오늘 LT', + nextDay : '내일 LT', + nextWeek : 'dddd LT', + lastDay : '어제 LT', + lastWeek : '지난주 dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s 후', + past : '%s 전', + s : '몇 초', + ss : '%d초', + m : '1분', + mm : '%d분', + h : '한 시간', + hh : '%d시간', + d : '하루', + dd : '%d일', + M : '한 달', + MM : '%d달', + y : '일 년', + yy : '%d년' + }, + dayOfMonthOrdinalParse : /\d{1,2}일/, + ordinal : '%d일', + meridiemParse : /오전|오후/, + isPM : function (token) { + return token === '오후'; + }, + meridiem : function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + } +}); + +//! moment.js locale configuration +//! locale : Kyrgyz [ky] +//! author : Chyngyz Arystan uulu : https://github.com/chyngyz + + +var suffixes$2 = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү' +}; + +hooks.defineLocale('ky', { + months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'), + weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгүн саат] LT', + nextDay : '[Эртең саат] LT', + nextWeek : 'dddd [саат] LT', + lastDay : '[Кече саат] LT', + lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ичинде', + past : '%s мурун', + s : 'бирнече секунд', + m : 'бир мүнөт', + mm : '%d мүнөт', + h : 'бир саат', + hh : '%d саат', + d : 'бир күн', + dd : '%d күн', + M : 'бир ай', + MM : '%d ай', + y : 'бир жыл', + yy : '%d жыл' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Luxembourgish [lb] +//! author : mweimerskirch : https://github.com/mweimerskirch +//! author : David Raison : https://github.com/kwisatz + +function processRelativeTime$5(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eng Minutt', 'enger Minutt'], + 'h': ['eng Stonn', 'enger Stonn'], + 'd': ['een Dag', 'engem Dag'], + 'M': ['ee Mount', 'engem Mount'], + 'y': ['ee Joer', 'engem Joer'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} +function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; +} +function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; +} +/** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ +function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } +} + +hooks.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]' + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + } + }, + relativeTime : { + future : processFutureTime, + past : processPastTime, + s : 'e puer Sekonnen', + m : processRelativeTime$5, + mm : '%d Minutten', + h : processRelativeTime$5, + hh : '%d Stonnen', + d : processRelativeTime$5, + dd : '%d Deeg', + M : processRelativeTime$5, + MM : '%d Méint', + y : processRelativeTime$5, + yy : '%d Joer' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Lao [lo] +//! author : Ryan Hart : https://github.com/ryanhart2 + +hooks.defineLocale('lo', { + months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'ວັນdddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar : { + sameDay : '[ມື້ນີ້ເວລາ] LT', + nextDay : '[ມື້ອື່ນເວລາ] LT', + nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay : '[ມື້ວານນີ້ເວລາ] LT', + lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ອີກ %s', + past : '%sຜ່ານມາ', + s : 'ບໍ່ເທົ່າໃດວິນາທີ', + m : '1 ນາທີ', + mm : '%d ນາທີ', + h : '1 ຊົ່ວໂມງ', + hh : '%d ຊົ່ວໂມງ', + d : '1 ມື້', + dd : '%d ມື້', + M : '1 ເດືອນ', + MM : '%d ເດືອນ', + y : '1 ປີ', + yy : '%d ປີ' + }, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, + ordinal : function (number) { + return 'ທີ່' + number; + } +}); + +//! moment.js locale configuration +//! locale : Lithuanian [lt] +//! author : Mindaugas Mozūras : https://github.com/mmozuras + +var units = { + 'm' : 'minutė_minutės_minutę', + 'mm': 'minutės_minučių_minutes', + 'h' : 'valanda_valandos_valandą', + 'hh': 'valandos_valandų_valandas', + 'd' : 'diena_dienos_dieną', + 'dd': 'dienos_dienų_dienas', + 'M' : 'mėnuo_mėnesio_mėnesį', + 'MM': 'mėnesiai_mėnesių_mėnesius', + 'y' : 'metai_metų_metus', + 'yy': 'metai_metų_metus' +}; +function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } +} +function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); +} +function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); +} +function forms(key) { + return units[key].split('_'); +} +function translate$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return result + translateSingular(number, withoutSuffix, key[0], isFuture); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } +} +hooks.defineLocale('lt', { + months : { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/ + }, + monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays : { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'), + isFormat: /dddd HH:mm/ + }, + weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), + weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY [m.] MMMM D [d.]', + LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l : 'YYYY-MM-DD', + ll : 'YYYY [m.] MMMM D [d.]', + lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' + }, + calendar : { + sameDay : '[Šiandien] LT', + nextDay : '[Rytoj] LT', + nextWeek : 'dddd LT', + lastDay : '[Vakar] LT', + lastWeek : '[Praėjusį] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'po %s', + past : 'prieš %s', + s : translateSeconds, + m : translateSingular, + mm : translate$6, + h : translateSingular, + hh : translate$6, + d : translateSingular, + dd : translate$6, + M : translateSingular, + MM : translate$6, + y : translateSingular, + yy : translate$6 + }, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, + ordinal : function (number) { + return number + '-oji'; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Latvian [lv] +//! author : Kristaps Karlsons : https://github.com/skakri +//! author : Jānis Elmeris : https://github.com/JanisE + +var units$1 = { + 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), + 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), + 'h': 'stundas_stundām_stunda_stundas'.split('_'), + 'hh': 'stundas_stundām_stunda_stundas'.split('_'), + 'd': 'dienas_dienām_diena_dienas'.split('_'), + 'dd': 'dienas_dienām_diena_dienas'.split('_'), + 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + 'y': 'gada_gadiem_gads_gadi'.split('_'), + 'yy': 'gada_gadiem_gads_gadi'.split('_') +}; +/** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ +function format$1(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minūte", "3 minūtes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minūtes" as in "pēc 21 minūtes". + // E.g. "3 minūtēm" as in "pēc 3 minūtēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } +} +function relativeTimeWithPlural$1(number, withoutSuffix, key) { + return number + ' ' + format$1(units$1[key], number, withoutSuffix); +} +function relativeTimeWithSingular(number, withoutSuffix, key) { + return format$1(units$1[key], number, withoutSuffix); +} +function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; +} + +hooks.defineLocale('lv', { + months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'), + weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY.', + LL : 'YYYY. [gada] D. MMMM', + LLL : 'YYYY. [gada] D. MMMM, HH:mm', + LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm' + }, + calendar : { + sameDay : '[Šodien pulksten] LT', + nextDay : '[Rīt pulksten] LT', + nextWeek : 'dddd [pulksten] LT', + lastDay : '[Vakar pulksten] LT', + lastWeek : '[Pagājušā] dddd [pulksten] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'pēc %s', + past : 'pirms %s', + s : relativeSeconds, + m : relativeTimeWithSingular, + mm : relativeTimeWithPlural$1, + h : relativeTimeWithSingular, + hh : relativeTimeWithPlural$1, + d : relativeTimeWithSingular, + dd : relativeTimeWithPlural$1, + M : relativeTimeWithSingular, + MM : relativeTimeWithPlural$1, + y : relativeTimeWithSingular, + yy : relativeTimeWithPlural$1 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Montenegrin [me] +//! author : Miodrag Nikač : https://github.com/miodragnikac + +var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +hooks.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact : true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedjelje] [u] LT', + '[prošlog] [ponedjeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srijede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'nekoliko sekundi', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'dan', + dd : translator.translate, + M : 'mjesec', + MM : translator.translate, + y : 'godinu', + yy : translator.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Maori [mi] +//! author : John Corrigan : https://github.com/johnideal + +hooks.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm' + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Macedonian [mk] +//! author : Borislav Mickov : https://github.com/B0k0 + +hooks.defineLocale('mk', { + months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'), + weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Денес во] LT', + nextDay : '[Утре во] LT', + nextWeek : '[Во] dddd [во] LT', + lastDay : '[Вчера во] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'после %s', + past : 'пред %s', + s : 'неколку секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дена', + M : 'месец', + MM : '%d месеци', + y : 'година', + yy : '%d години' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malayalam [ml] +//! author : Floyd Pink : https://github.com/floydpink + +hooks.defineLocale('ml', { + months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'), + monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'), + monthsParseExact : true, + weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'), + weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + longDateFormat : { + LT : 'A h:mm -നു', + LTS : 'A h:mm:ss -നു', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm -നു', + LLLL : 'dddd, D MMMM YYYY, A h:mm -നു' + }, + calendar : { + sameDay : '[ഇന്ന്] LT', + nextDay : '[നാളെ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ഇന്നലെ] LT', + lastWeek : '[കഴിഞ്ഞ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s കഴിഞ്ഞ്', + past : '%s മുൻപ്', + s : 'അൽപ നിമിഷങ്ങൾ', + m : 'ഒരു മിനിറ്റ്', + mm : '%d മിനിറ്റ്', + h : 'ഒരു മണിക്കൂർ', + hh : '%d മണിക്കൂർ', + d : 'ഒരു ദിവസം', + dd : '%d ദിവസം', + M : 'ഒരു മാസം', + MM : '%d മാസം', + y : 'ഒരു വർഷം', + yy : '%d വർഷം' + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + } +}); + +//! moment.js locale configuration +//! locale : Marathi [mr] +//! author : Harshad Kale : https://github.com/kalehv +//! author : Vivek Athalye : https://github.com/vnathalye + +var symbolMap$8 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$7 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +function relativeTimeMr(number, withoutSuffix, string, isFuture) +{ + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': output = 'काही सेकंद'; break; + case 'm': output = 'एक मिनिट'; break; + case 'mm': output = '%d मिनिटे'; break; + case 'h': output = 'एक तास'; break; + case 'hh': output = '%d तास'; break; + case 'd': output = 'एक दिवस'; break; + case 'dd': output = '%d दिवस'; break; + case 'M': output = 'एक महिना'; break; + case 'MM': output = '%d महिने'; break; + case 'y': output = 'एक वर्ष'; break; + case 'yy': output = '%d वर्षे'; break; + } + } + else { + switch (string) { + case 's': output = 'काही सेकंदां'; break; + case 'm': output = 'एका मिनिटा'; break; + case 'mm': output = '%d मिनिटां'; break; + case 'h': output = 'एका तासा'; break; + case 'hh': output = '%d तासां'; break; + case 'd': output = 'एका दिवसा'; break; + case 'dd': output = '%d दिवसां'; break; + case 'M': output = 'एका महिन्या'; break; + case 'MM': output = '%d महिन्यां'; break; + case 'y': output = 'एका वर्षा'; break; + case 'yy': output = '%d वर्षां'; break; + } + } + return output.replace(/%d/i, number); +} + +hooks.defineLocale('mr', { + months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'), + monthsParseExact : true, + weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm वाजता', + LTS : 'A h:mm:ss वाजता', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm वाजता', + LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[उद्या] LT', + nextWeek : 'dddd, LT', + lastDay : '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$7[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$8[match]; + }); + }, + meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात्री') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळी') { + return hour; + } else if (meridiem === 'दुपारी') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'सायंकाळी') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात्री'; + } else if (hour < 10) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malay [ms-my] +//! note : DEPRECATED, the correct one is [ms] +//! author : Weldan Jamili : https://github.com/weldan + +hooks.defineLocale('ms-my', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malay [ms] +//! author : Weldan Jamili : https://github.com/weldan + +hooks.defineLocale('ms', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Burmese [my] +//! author : Squar team, mysquar.com +//! author : David Rossellat : https://github.com/gholadr +//! author : Tin Aung Lin : https://github.com/thanyawzinmin + +var symbolMap$9 = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀' +}; +var numberMap$8 = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0' +}; + +hooks.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L' + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်' + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap$8[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$9[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Norwegian Bokmål [nb] +//! authors : Espen Hovlandsdal : https://github.com/rexxars +//! Sigurd Gartmann : https://github.com/sigurdga + +hooks.defineLocale('nb', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'noen sekunder', + m : 'ett minutt', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dager', + M : 'en måned', + MM : '%d måneder', + y : 'ett år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Nepalese [ne] +//! author : suvash : https://github.com/suvash + +var symbolMap$10 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$9 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +hooks.defineLocale('ne', { + months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'), + monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'), + monthsParseExact : true, + weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'), + weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'Aको h:mm बजे', + LTS : 'Aको h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, Aको h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$9[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$10[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[भोलि] LT', + nextWeek : '[आउँदो] dddd[,] LT', + lastDay : '[हिजो] LT', + lastWeek : '[गएको] dddd[,] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%sमा', + past : '%s अगाडि', + s : 'केही क्षण', + m : 'एक मिनेट', + mm : '%d मिनेट', + h : 'एक घण्टा', + hh : '%d घण्टा', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महिना', + MM : '%d महिना', + y : 'एक बर्ष', + yy : '%d बर्ष' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Dutch (Belgium) [nl-be] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'); +var monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex$1 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +hooks.defineLocale('nl-be', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots$1; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$1[m.month()]; + } else { + return monthsShortWithDots$1[m.month()]; + } + }, + + monthsRegex: monthsRegex$1, + monthsShortRegex: monthsRegex$1, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Dutch [nl] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'); +var monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse$1 = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex$2 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +hooks.defineLocale('nl', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots$2; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$2[m.month()]; + } else { + return monthsShortWithDots$2[m.month()]; + } + }, + + monthsRegex: monthsRegex$2, + monthsShortRegex: monthsRegex$2, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse$1, + longMonthsParse : monthsParse$1, + shortMonthsParse : monthsParse$1, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Nynorsk [nn] +//! author : https://github.com/mechuwind + +hooks.defineLocale('nn', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'), + weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s sidan', + s : 'nokre sekund', + m : 'eit minutt', + mm : '%d minutt', + h : 'ein time', + hh : '%d timar', + d : 'ein dag', + dd : '%d dagar', + M : 'ein månad', + MM : '%d månader', + y : 'eit år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Punjabi (India) [pa-in] +//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit + +var symbolMap$11 = { + '1': '੧', + '2': '੨', + '3': '੩', + '4': '੪', + '5': '੫', + '6': '੬', + '7': '੭', + '8': '੮', + '9': '੯', + '0': '੦' +}; +var numberMap$10 = { + '੧': '1', + '੨': '2', + '੩': '3', + '੪': '4', + '੫': '5', + '੬': '6', + '੭': '7', + '੮': '8', + '੯': '9', + '੦': '0' +}; + +hooks.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi. + months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'), + weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat : { + LT : 'A h:mm ਵਜੇ', + LTS : 'A h:mm:ss ਵਜੇ', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ' + }, + calendar : { + sameDay : '[ਅਜ] LT', + nextDay : '[ਕਲ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ਕਲ] LT', + lastWeek : '[ਪਿਛਲੇ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ਵਿੱਚ', + past : '%s ਪਿਛਲੇ', + s : 'ਕੁਝ ਸਕਿੰਟ', + m : 'ਇਕ ਮਿੰਟ', + mm : '%d ਮਿੰਟ', + h : 'ਇੱਕ ਘੰਟਾ', + hh : '%d ਘੰਟੇ', + d : 'ਇੱਕ ਦਿਨ', + dd : '%d ਦਿਨ', + M : 'ਇੱਕ ਮਹੀਨਾ', + MM : '%d ਮਹੀਨੇ', + y : 'ਇੱਕ ਸਾਲ', + yy : '%d ਸਾਲ' + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap$10[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$11[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Polish [pl] +//! author : Rafal Hirsz : https://github.com/evoL + +var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'); +var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'); +function plural$3(n) { + return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1); +} +function translate$7(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural$3(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural$3(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural$3(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural$3(number) ? 'lata' : 'lat'); + } +} + +hooks.defineLocale('pl', { + months : function (momentToFormat, format) { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')'; + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'), + weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: '[W] dddd [o] LT', + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : '%s temu', + s : 'kilka sekund', + m : translate$7, + mm : translate$7, + h : translate$7, + hh : translate$7, + d : '1 dzień', + dd : '%d dni', + M : 'miesiąc', + MM : translate$7, + y : 'rok', + yy : translate$7 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Portuguese (Brazil) [pt-br] +//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira + +hooks.defineLocale('pt-br', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : '%s atrás', + s : 'poucos segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal : '%dº' +}); + +//! moment.js locale configuration +//! locale : Portuguese [pt] +//! author : Jefferson : https://github.com/jalex79 + +hooks.defineLocale('pt', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : 'há %s', + s : 'segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Romanian [ro] +//! author : Vlad Gurdiga : https://github.com/gurdiga +//! author : Valentin Agachi : https://github.com/avaly + +function relativeTimeWithPlural$2(number, withoutSuffix, key) { + var format = { + 'mm': 'minute', + 'hh': 'ore', + 'dd': 'zile', + 'MM': 'luni', + 'yy': 'ani' + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; +} + +hooks.defineLocale('ro', { + months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'), + monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'peste %s', + past : '%s în urmă', + s : 'câteva secunde', + m : 'un minut', + mm : relativeTimeWithPlural$2, + h : 'o oră', + hh : relativeTimeWithPlural$2, + d : 'o zi', + dd : relativeTimeWithPlural$2, + M : 'o lună', + MM : relativeTimeWithPlural$2, + y : 'un an', + yy : relativeTimeWithPlural$2 + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Russian [ru] +//! author : Viktorminator : https://github.com/Viktorminator +//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Коренберг Марк : https://github.com/socketpair + +function plural$4(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural$3(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + 'hh': 'час_часа_часов', + 'dd': 'день_дня_дней', + 'MM': 'месяц_месяца_месяцев', + 'yy': 'год_года_лет' + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } + else { + return number + ' ' + plural$4(format[key], +number); + } +} +var monthsParse$2 = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; + +// http://new.gramota.ru/spravka/rules/139-prop : § 103 +// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 +// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 +hooks.defineLocale('ru', { + months : { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_') + }, + monthsShort : { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_') + }, + weekdays : { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/ + }, + weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse : monthsParse$2, + longMonthsParse : monthsParse$2, + shortMonthsParse : monthsParse$2, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соотвествует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сегодня в] LT', + nextDay: '[Завтра в] LT', + lastDay: '[Вчера в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'через %s', + past : '%s назад', + s : 'несколько секунд', + m : relativeTimeWithPlural$3, + mm : relativeTimeWithPlural$3, + h : 'час', + hh : relativeTimeWithPlural$3, + d : 'день', + dd : relativeTimeWithPlural$3, + M : 'месяц', + MM : relativeTimeWithPlural$3, + y : 'год', + yy : relativeTimeWithPlural$3 + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM : function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Sindhi [sd] +//! author : Narain Sagar : https://github.com/narainsagar + +var months$6 = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر' +]; +var days$1 = [ + 'آچر', + 'سومر', + 'اڱارو', + 'اربع', + 'خميس', + 'جمع', + 'ڇنڇر' +]; + +hooks.defineLocale('sd', { + months : months$6, + monthsShort : months$6, + weekdays : days$1, + weekdaysShort : days$1, + weekdaysMin : days$1, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[اڄ] LT', + nextDay : '[سڀاڻي] LT', + nextWeek : 'dddd [اڳين هفتي تي] LT', + lastDay : '[ڪالهه] LT', + lastWeek : '[گزريل هفتي] dddd [تي] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s پوء', + past : '%s اڳ', + s : 'چند سيڪنڊ', + m : 'هڪ منٽ', + mm : '%d منٽ', + h : 'هڪ ڪلاڪ', + hh : '%d ڪلاڪ', + d : 'هڪ ڏينهن', + dd : '%d ڏينهن', + M : 'هڪ مهينو', + MM : '%d مهينا', + y : 'هڪ سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Northern Sami [se] +//! authors : Bård Rolstad Henriksen : https://github.com/karamell + + +hooks.defineLocale('se', { + months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), + monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), + weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), + weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin : 's_v_m_g_d_b_L'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'MMMM D. [b.] YYYY', + LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' + }, + calendar : { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s geažes', + past : 'maŋit %s', + s : 'moadde sekunddat', + m : 'okta minuhta', + mm : '%d minuhtat', + h : 'okta diimmu', + hh : '%d diimmut', + d : 'okta beaivi', + dd : '%d beaivvit', + M : 'okta mánnu', + MM : '%d mánut', + y : 'okta jahki', + yy : '%d jagit' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Sinhalese [si] +//! author : Sampath Sitinamaluwa : https://github.com/sampathsris + +/*jshint -W100*/ +hooks.defineLocale('si', { + months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'), + monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'), + weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'), + weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'a h:mm', + LTS : 'a h:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY MMMM D', + LLL : 'YYYY MMMM D, a h:mm', + LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss' + }, + calendar : { + sameDay : '[අද] LT[ට]', + nextDay : '[හෙට] LT[ට]', + nextWeek : 'dddd LT[ට]', + lastDay : '[ඊයේ] LT[ට]', + lastWeek : '[පසුගිය] dddd LT[ට]', + sameElse : 'L' + }, + relativeTime : { + future : '%sකින්', + past : '%sකට පෙර', + s : 'තත්පර කිහිපය', + m : 'මිනිත්තුව', + mm : 'මිනිත්තු %d', + h : 'පැය', + hh : 'පැය %d', + d : 'දිනය', + dd : 'දින %d', + M : 'මාසය', + MM : 'මාස %d', + y : 'වසර', + yy : 'වසර %d' + }, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, + ordinal : function (number) { + return number + ' වැනි'; + }, + meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM : function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + } +}); + +//! moment.js locale configuration +//! locale : Slovak [sk] +//! author : Martin Minka : https://github.com/k2s +//! based on work of petrbela : https://github.com/petrbela + +var months$7 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'); +var monthsShort$4 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); +function plural$5(n) { + return (n > 1) && (n < 5); +} +function translate$8(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + break; + } +} + +hooks.defineLocale('sk', { + months : months$7, + monthsShort : monthsShort$4, + weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pred %s', + s : translate$8, + m : translate$8, + mm : translate$8, + h : translate$8, + hh : translate$8, + d : translate$8, + dd : translate$8, + M : translate$8, + MM : translate$8, + y : translate$8, + yy : translate$8 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Slovenian [sl] +//! author : Robert Sedovšek : https://github.com/sedovsek + +function processRelativeTime$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami'; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } +} + +hooks.defineLocale('sl', { + months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danes ob] LT', + nextDay : '[jutri ob] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay : '[včeraj ob] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + return '[prejšnjo] [nedeljo] [ob] LT'; + case 3: + return '[prejšnjo] [sredo] [ob] LT'; + case 6: + return '[prejšnjo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'čez %s', + past : 'pred %s', + s : processRelativeTime$6, + m : processRelativeTime$6, + mm : processRelativeTime$6, + h : processRelativeTime$6, + hh : processRelativeTime$6, + d : processRelativeTime$6, + dd : processRelativeTime$6, + M : processRelativeTime$6, + MM : processRelativeTime$6, + y : processRelativeTime$6, + yy : processRelativeTime$6 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Albanian [sq] +//! author : Flakërim Ismani : https://github.com/flakerimi +//! author : Menelion Elensúle : https://github.com/Oire +//! author : Oerd Cukalla : https://github.com/oerd + +hooks.defineLocale('sq', { + months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), + monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), + weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact : true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem : function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Sot në] LT', + nextDay : '[Nesër në] LT', + nextWeek : 'dddd [në] LT', + lastDay : '[Dje në] LT', + lastWeek : 'dddd [e kaluar në] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'në %s', + past : '%s më parë', + s : 'disa sekonda', + m : 'një minutë', + mm : '%d minuta', + h : 'një orë', + hh : '%d orë', + d : 'një ditë', + dd : '%d ditë', + M : 'një muaj', + MM : '%d muaj', + y : 'një vit', + yy : '%d vite' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Serbian Cyrillic [sr-cyrl] +//! author : Milan Janačković : https://github.com/milan-j + +var translator$1 = { + words: { //Different grammatical cases + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$1.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator$1.correctGrammaticalCase(number, wordKey); + } + } +}; + +hooks.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay : '[јуче у] LT', + lastWeek : function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'за %s', + past : 'пре %s', + s : 'неколико секунди', + m : translator$1.translate, + mm : translator$1.translate, + h : translator$1.translate, + hh : translator$1.translate, + d : 'дан', + dd : translator$1.translate, + M : 'месец', + MM : translator$1.translate, + y : 'годину', + yy : translator$1.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Serbian [sr] +//! author : Milan Janačković : https://github.com/milan-j + +var translator$2 = { + words: { //Different grammatical cases + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$2.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator$2.correctGrammaticalCase(number, wordKey); + } + } +}; + +hooks.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pre %s', + s : 'nekoliko sekundi', + m : translator$2.translate, + mm : translator$2.translate, + h : translator$2.translate, + hh : translator$2.translate, + d : 'dan', + dd : translator$2.translate, + M : 'mesec', + MM : translator$2.translate, + y : 'godinu', + yy : translator$2.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : siSwati [ss] +//! author : Nicolai Davies : https://github.com/nicolaidavies + + +hooks.defineLocale('ss', { + months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), + monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), + weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Namuhla nga] LT', + nextDay : '[Kusasa nga] LT', + nextWeek : 'dddd [nga] LT', + lastDay : '[Itolo nga] LT', + lastWeek : 'dddd [leliphelile] [nga] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'nga %s', + past : 'wenteka nga %s', + s : 'emizuzwana lomcane', + m : 'umzuzu', + mm : '%d emizuzu', + h : 'lihora', + hh : '%d emahora', + d : 'lilanga', + dd : '%d emalanga', + M : 'inyanga', + MM : '%d tinyanga', + y : 'umnyaka', + yy : '%d iminyaka' + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : '%d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Swedish [sv] +//! author : Jens Alm : https://github.com/ulmus + +hooks.defineLocale('sv', { + months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D MMMM YYYY [kl.] HH:mm', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: '[På] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : 'för %s sedan', + s : 'några sekunder', + m : 'en minut', + mm : '%d minuter', + h : 'en timme', + hh : '%d timmar', + d : 'en dag', + dd : '%d dagar', + M : 'en månad', + MM : '%d månader', + y : 'ett år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}(e|a)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'e' : + (b === 1) ? 'a' : + (b === 2) ? 'a' : + (b === 3) ? 'e' : 'e'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Swahili [sw] +//! author : Fahad Kassim : https://github.com/fadsel + +hooks.defineLocale('sw', { + months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), + weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[leo saa] LT', + nextDay : '[kesho saa] LT', + nextWeek : '[wiki ijayo] dddd [saat] LT', + lastDay : '[jana] LT', + lastWeek : '[wiki iliyopita] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s baadaye', + past : 'tokea %s', + s : 'hivi punde', + m : 'dakika moja', + mm : 'dakika %d', + h : 'saa limoja', + hh : 'masaa %d', + d : 'siku moja', + dd : 'masiku %d', + M : 'mwezi mmoja', + MM : 'miezi %d', + y : 'mwaka mmoja', + yy : 'miaka %d' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tamil [ta] +//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 + +var symbolMap$12 = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦' +}; +var numberMap$11 = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0' +}; + +hooks.defineLocale('ta', { + months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'), + weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), + weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, HH:mm', + LLLL : 'dddd, D MMMM YYYY, HH:mm' + }, + calendar : { + sameDay : '[இன்று] LT', + nextDay : '[நாளை] LT', + nextWeek : 'dddd, LT', + lastDay : '[நேற்று] LT', + lastWeek : '[கடந்த வாரம்] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s இல்', + past : '%s முன்', + s : 'ஒரு சில விநாடிகள்', + m : 'ஒரு நிமிடம்', + mm : '%d நிமிடங்கள்', + h : 'ஒரு மணி நேரம்', + hh : '%d மணி நேரம்', + d : 'ஒரு நாள்', + dd : '%d நாட்கள்', + M : 'ஒரு மாதம்', + MM : '%d மாதங்கள்', + y : 'ஒரு வருடம்', + yy : '%d ஆண்டுகள்' + }, + dayOfMonthOrdinalParse: /\d{1,2}வது/, + ordinal : function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap$11[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$12[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem : function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Telugu [te] +//! author : Krishna Chaitanya Thota : https://github.com/kcthota + +hooks.defineLocale('te', { + months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'), + monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'), + monthsParseExact : true, + weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'), + weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[నేడు] LT', + nextDay : '[రేపు] LT', + nextWeek : 'dddd, LT', + lastDay : '[నిన్న] LT', + lastWeek : '[గత] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s లో', + past : '%s క్రితం', + s : 'కొన్ని క్షణాలు', + m : 'ఒక నిమిషం', + mm : '%d నిమిషాలు', + h : 'ఒక గంట', + hh : '%d గంటలు', + d : 'ఒక రోజు', + dd : '%d రోజులు', + M : 'ఒక నెల', + MM : '%d నెలలు', + y : 'ఒక సంవత్సరం', + yy : '%d సంవత్సరాలు' + }, + dayOfMonthOrdinalParse : /\d{1,2}వ/, + ordinal : '%dవ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tetun Dili (East Timor) [tet] +//! author : Joshua Brooks : https://github.com/joshbrooks +//! author : Onorio De J. Afonso : https://github.com/marobo + +hooks.defineLocale('tet', { + months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'), + weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'), + weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'iha %s', + past : '%s liuba', + s : 'minutu balun', + m : 'minutu ida', + mm : 'minutus %d', + h : 'horas ida', + hh : 'horas %d', + d : 'loron ida', + dd : 'loron %d', + M : 'fulan ida', + MM : 'fulan %d', + y : 'tinan ida', + yy : 'tinan %d' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Thai [th] +//! author : Kridsada Thanabulpong : https://github.com/sirn + +hooks.defineLocale('th', { + months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), + monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'), + monthsParseExact: true, + weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY เวลา H:mm', + LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm' + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar : { + sameDay : '[วันนี้ เวลา] LT', + nextDay : '[พรุ่งนี้ เวลา] LT', + nextWeek : 'dddd[หน้า เวลา] LT', + lastDay : '[เมื่อวานนี้ เวลา] LT', + lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'อีก %s', + past : '%sที่แล้ว', + s : 'ไม่กี่วินาที', + m : '1 นาที', + mm : '%d นาที', + h : '1 ชั่วโมง', + hh : '%d ชั่วโมง', + d : '1 วัน', + dd : '%d วัน', + M : '1 เดือน', + MM : '%d เดือน', + y : '1 ปี', + yy : '%d ปี' + } +}); + +//! moment.js locale configuration +//! locale : Tagalog (Philippines) [tl-ph] +//! author : Dan Hagman : https://github.com/hagmandan + +hooks.defineLocale('tl-ph', { + months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), + monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), + weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'MM/D/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY HH:mm', + LLLL : 'dddd, MMMM DD, YYYY HH:mm' + }, + calendar : { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L' + }, + relativeTime : { + future : 'sa loob ng %s', + past : '%s ang nakalipas', + s : 'ilang segundo', + m : 'isang minuto', + mm : '%d minuto', + h : 'isang oras', + hh : '%d oras', + d : 'isang araw', + dd : '%d araw', + M : 'isang buwan', + MM : '%d buwan', + y : 'isang taon', + yy : '%d taon' + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Klingon [tlh] +//! author : Dominika Kruk : https://github.com/amaranthrose + +var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + +function translateFuture(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'leS' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'waQ' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'nem' : + time + ' pIq'; + return time; +} + +function translatePast(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'Hu’' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'wen' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'ben' : + time + ' ret'; + return time; +} + +function translate$9(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } +} + +function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[one]; + } + return (word === '') ? 'pagh' : word; +} + +hooks.defineLocale('tlh', { + months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'), + monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'), + monthsParseExact : true, + weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L' + }, + relativeTime : { + future : translateFuture, + past : translatePast, + s : 'puS lup', + m : 'wa’ tup', + mm : translate$9, + h : 'wa’ rep', + hh : translate$9, + d : 'wa’ jaj', + dd : translate$9, + M : 'wa’ jar', + MM : translate$9, + y : 'wa’ DIS', + yy : translate$9 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Turkish [tr] +//! authors : Erhan Gundogan : https://github.com/erhangundogan, +//! Burak Yiğit Kaya: https://github.com/BYK + +var suffixes$3 = { + 1: '\'inci', + 5: '\'inci', + 8: '\'inci', + 70: '\'inci', + 80: '\'inci', + 2: '\'nci', + 7: '\'nci', + 20: '\'nci', + 50: '\'nci', + 3: '\'üncü', + 4: '\'üncü', + 100: '\'üncü', + 6: '\'ncı', + 9: '\'uncu', + 10: '\'uncu', + 30: '\'uncu', + 60: '\'ıncı', + 90: '\'ıncı' +}; + +hooks.defineLocale('tr', { + months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), + monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), + weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[yarın saat] LT', + nextWeek : '[haftaya] dddd [saat] LT', + lastDay : '[dün] LT', + lastWeek : '[geçen hafta] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s önce', + s : 'birkaç saniye', + m : 'bir dakika', + mm : '%d dakika', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir yıl', + yy : '%d yıl' + }, + dayOfMonthOrdinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '\'ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$3[a] || suffixes$3[b] || suffixes$3[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Talossan [tzl] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +//! author : Iustì Canun + +// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. +// This is currently too difficult (maybe even impossible) to add. +hooks.defineLocale('tzl', { + months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), + monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM [dallas] YYYY', + LLL : 'D. MMMM [dallas] YYYY HH.mm', + LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' + }, + meridiemParse: /d\'o|d\'a/i, + isPM : function (input) { + return 'd\'o' === input.toLowerCase(); + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'd\'o' : 'D\'O'; + } else { + return isLower ? 'd\'a' : 'D\'A'; + } + }, + calendar : { + sameDay : '[oxhi à] LT', + nextDay : '[demà à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[ieiri à] LT', + lastWeek : '[sür el] dddd [lasteu à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'osprei %s', + past : 'ja%s', + s : processRelativeTime$7, + m : processRelativeTime$7, + mm : processRelativeTime$7, + h : processRelativeTime$7, + hh : processRelativeTime$7, + d : processRelativeTime$7, + dd : processRelativeTime$7, + M : processRelativeTime$7, + MM : processRelativeTime$7, + y : processRelativeTime$7, + yy : processRelativeTime$7 + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +function processRelativeTime$7(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['viensas secunds', '\'iensas secunds'], + 'm': ['\'n míut', '\'iens míut'], + 'mm': [number + ' míuts', '' + number + ' míuts'], + 'h': ['\'n þora', '\'iensa þora'], + 'hh': [number + ' þoras', '' + number + ' þoras'], + 'd': ['\'n ziua', '\'iensa ziua'], + 'dd': [number + ' ziuas', '' + number + ' ziuas'], + 'M': ['\'n mes', '\'iens mes'], + 'MM': [number + ' mesen', '' + number + ' mesen'], + 'y': ['\'n ar', '\'iens ar'], + 'yy': [number + ' ars', '' + number + ' ars'] + }; + return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]); +} + +//! moment.js locale configuration +//! locale : Central Atlas Tamazight Latin [tzm-latn] +//! author : Abdel Said : https://github.com/abdelsaid + +hooks.defineLocale('tzm-latn', { + months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'dadkh s yan %s', + past : 'yan %s', + s : 'imik', + m : 'minuḍ', + mm : '%d minuḍ', + h : 'saɛa', + hh : '%d tassaɛin', + d : 'ass', + dd : '%d ossan', + M : 'ayowr', + MM : '%d iyyirn', + y : 'asgas', + yy : '%d isgasn' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Central Atlas Tamazight [tzm] +//! author : Abdel Said : https://github.com/abdelsaid + +hooks.defineLocale('tzm', { + months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past : 'ⵢⴰⵏ %s', + s : 'ⵉⵎⵉⴽ', + m : 'ⵎⵉⵏⵓⴺ', + mm : '%d ⵎⵉⵏⵓⴺ', + h : 'ⵙⴰⵄⴰ', + hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d : 'ⴰⵙⵙ', + dd : '%d oⵙⵙⴰⵏ', + M : 'ⴰⵢoⵓⵔ', + MM : '%d ⵉⵢⵢⵉⵔⵏ', + y : 'ⴰⵙⴳⴰⵙ', + yy : '%d ⵉⵙⴳⴰⵙⵏ' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Ukrainian [uk] +//! author : zemlanin : https://github.com/zemlanin +//! Author : Menelion Elensúle : https://github.com/Oire + +function plural$6(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural$4(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + 'dd': 'день_дні_днів', + 'MM': 'місяць_місяці_місяців', + 'yy': 'рік_роки_років' + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } + else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } + else { + return number + ' ' + plural$6(format[key], +number); + } +} +function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), + 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), + 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') + }; + + if (!m) { + return weekdays['nominative']; + } + + var nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? + 'accusative' : + ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? + 'genitive' : + 'nominative'); + return weekdays[nounCase][m.day()]; +} +function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; +} + +hooks.defineLocale('uk', { + months : { + 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'), + 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_') + }, + monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'), + weekdays : weekdaysCaseReplace, + weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY р.', + LLL : 'D MMMM YYYY р., HH:mm', + LLLL : 'dddd, D MMMM YYYY р., HH:mm' + }, + calendar : { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'за %s', + past : '%s тому', + s : 'декілька секунд', + m : relativeTimeWithPlural$4, + mm : relativeTimeWithPlural$4, + h : 'годину', + hh : relativeTimeWithPlural$4, + d : 'день', + dd : relativeTimeWithPlural$4, + M : 'місяць', + MM : relativeTimeWithPlural$4, + y : 'рік', + yy : relativeTimeWithPlural$4 + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Urdu [ur] +//! author : Sawood Alam : https://github.com/ibnesayeed +//! author : Zack : https://github.com/ZackVision + +var months$8 = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر' +]; +var days$2 = [ + 'اتوار', + 'پیر', + 'منگل', + 'بدھ', + 'جمعرات', + 'جمعہ', + 'ہفتہ' +]; + +hooks.defineLocale('ur', { + months : months$8, + monthsShort : months$8, + weekdays : days$2, + weekdaysShort : days$2, + weekdaysMin : days$2, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[آج بوقت] LT', + nextDay : '[کل بوقت] LT', + nextWeek : 'dddd [بوقت] LT', + lastDay : '[گذشتہ روز بوقت] LT', + lastWeek : '[گذشتہ] dddd [بوقت] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s بعد', + past : '%s قبل', + s : 'چند سیکنڈ', + m : 'ایک منٹ', + mm : '%d منٹ', + h : 'ایک گھنٹہ', + hh : '%d گھنٹے', + d : 'ایک دن', + dd : '%d دن', + M : 'ایک ماہ', + MM : '%d ماہ', + y : 'ایک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Uzbek Latin [uz-latn] +//! author : Rasulbek Mirzayev : github.com/Rasulbeeek + +hooks.defineLocale('uz-latn', { + months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'), + monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'), + weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Bugun soat] LT [da]', + nextDay : '[Ertaga] LT [da]', + nextWeek : 'dddd [kuni soat] LT [da]', + lastDay : '[Kecha soat] LT [da]', + lastWeek : '[O\'tgan] dddd [kuni soat] LT [da]', + sameElse : 'L' + }, + relativeTime : { + future : 'Yaqin %s ichida', + past : 'Bir necha %s oldin', + s : 'soniya', + m : 'bir daqiqa', + mm : '%d daqiqa', + h : 'bir soat', + hh : '%d soat', + d : 'bir kun', + dd : '%d kun', + M : 'bir oy', + MM : '%d oy', + y : 'bir yil', + yy : '%d yil' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Uzbek [uz] +//! author : Sardor Muminov : https://github.com/muminoff + +hooks.defineLocale('uz', { + months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), + monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Бугун соат] LT [да]', + nextDay : '[Эртага] LT [да]', + nextWeek : 'dddd [куни соат] LT [да]', + lastDay : '[Кеча соат] LT [да]', + lastWeek : '[Утган] dddd [куни соат] LT [да]', + sameElse : 'L' + }, + relativeTime : { + future : 'Якин %s ичида', + past : 'Бир неча %s олдин', + s : 'фурсат', + m : 'бир дакика', + mm : '%d дакика', + h : 'бир соат', + hh : '%d соат', + d : 'бир кун', + dd : '%d кун', + M : 'бир ой', + MM : '%d ой', + y : 'бир йил', + yy : '%d йил' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Vietnamese [vi] +//! author : Bang Nguyen : https://github.com/bangnk + +hooks.defineLocale('vi', { + months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), + monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), + monthsParseExact : true, + weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'), + weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact : true, + meridiemParse: /sa|ch/i, + isPM : function (input) { + return /^ch$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM [năm] YYYY', + LLL : 'D MMMM [năm] YYYY HH:mm', + LLLL : 'dddd, D MMMM [năm] YYYY HH:mm', + l : 'DD/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần rồi lúc] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s tới', + past : '%s trước', + s : 'vài giây', + m : 'một phút', + mm : '%d phút', + h : 'một giờ', + hh : '%d giờ', + d : 'một ngày', + dd : '%d ngày', + M : 'một tháng', + MM : '%d tháng', + y : 'một năm', + yy : '%d năm' + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Pseudo [x-pseudo] +//! author : Andrew Hood : https://github.com/andrewhood125 + +hooks.defineLocale('x-pseudo', { + months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'), + monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'), + monthsParseExact : true, + weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'), + weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[T~ódá~ý át] LT', + nextDay : '[T~ómó~rró~w át] LT', + nextWeek : 'dddd [át] LT', + lastDay : '[Ý~ést~érdá~ý át] LT', + lastWeek : '[L~ást] dddd [át] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'í~ñ %s', + past : '%s á~gó', + s : 'á ~féw ~sécó~ñds', + m : 'á ~míñ~úté', + mm : '%d m~íñú~tés', + h : 'á~ñ hó~úr', + hh : '%d h~óúrs', + d : 'á ~dáý', + dd : '%d d~áýs', + M : 'á ~móñ~th', + MM : '%d m~óñt~hs', + y : 'á ~ýéár', + yy : '%d ý~éárs' + }, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Yoruba Nigeria [yo] +//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe + +hooks.defineLocale('yo', { + months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'), + monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Ònì ni] LT', + nextDay : '[Ọ̀la ni] LT', + nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT', + lastDay : '[Àna ni] LT', + lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ní %s', + past : '%s kọjá', + s : 'ìsẹjú aayá die', + m : 'ìsẹjú kan', + mm : 'ìsẹjú %d', + h : 'wákati kan', + hh : 'wákati %d', + d : 'ọjọ́ kan', + dd : 'ọjọ́ %d', + M : 'osù kan', + MM : 'osù %d', + y : 'ọdún kan', + yy : 'ọdún %d' + }, + dayOfMonthOrdinalParse : /ọjọ́\s\d{1,2}/, + ordinal : 'ọjọ́ %d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chinese (China) [zh-cn] +//! author : suupic : https://github.com/suupic +//! author : Zeno Zeng : https://github.com/zenozeng + +hooks.defineLocale('zh-cn', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日Ah点mm分', + LLLL : 'YYYY年MMMD日ddddAh点mm分', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || + meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime : { + future : '%s内', + past : '%s前', + s : '几秒', + m : '1 分钟', + mm : '%d 分钟', + h : '1 小时', + hh : '%d 小时', + d : '1 天', + dd : '%d 天', + M : '1 个月', + MM : '%d 个月', + y : '1 年', + yy : '%d 年' + }, + week : { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chinese (Hong Kong) [zh-hk] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +//! author : Konstantin : https://github.com/skfd + +hooks.defineLocale('zh-hk', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 年', + yy : '%d 年' + } +}); + +//! moment.js locale configuration +//! locale : Chinese (Taiwan) [zh-tw] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris + +hooks.defineLocale('zh-tw', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 年', + yy : '%d 年' + } +}); + +hooks.locale('en'); + +return hooks; + +}))); diff --git a/node_modules/moment/min/moment-with-locales.min.js b/node_modules/moment/min/moment-with-locales.min.js new file mode 100644 index 0000000..a2842a7 --- /dev/null +++ b/node_modules/moment/min/moment-with-locales.min.js @@ -0,0 +1,505 @@ +!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return re.apply(null,arguments)}function b(a){re=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a)return!1;return!0}function f(a){return void 0===a}function g(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function h(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function i(a,b){var c,d=[];for(c=0;c0)for(c=0;c0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Ge[c]=Ge[c+"s"]=Ge[b]=a}function K(a){return"string"==typeof a?Ge[a]||Ge[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)j(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){He[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:He[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Le[a]=e),b&&(Le[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Le[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Ie);for(b=0,c=d.length;b=0&&Je.test(a);)a=a.replace(Je,c),Je.lastIndex=0,d-=1;return a}function Z(a,b,c){bf[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return j(bf,a)?bf[a](b._strict,b._locale):new RegExp(_(a))}function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),g(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments));return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function ua(a,b,c){var d=7+b-c,e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1}function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7}function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy}function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:c(this._weekdays)?this._weekdays:this._weekdays.standalone}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=l([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=nf.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=nf.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=nf.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=nf.call(this._weekdaysParse,g),e!==-1?e:(e=nf.call(this._shortWeekdaysParse,g),e!==-1?e:(e=nf.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=nf.call(this._shortWeekdaysParse,g),e!==-1?e:(e=nf.call(this._weekdaysParse,g),e!==-1?e:(e=nf.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=nf.call(this._minWeekdaysParse,g),e!==-1?e:(e=nf.call(this._weekdaysParse,g),e!==-1?e:(e=nf.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){if(e=l([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN;if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(j(this,"_weekdaysRegex")||(this._weekdaysRegex=yf),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(j(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=zf),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(j(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Af),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++)c=l([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for(g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Ua(a,b){return b._meridiemParse}function Va(a){return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a}function Ya(a){for(var b,c,d,e,f=0;f0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function Za(a){var b=null;if(!Ff[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Bf._abbr,require("./locale/"+a),$a(b)}catch(a){}return Ff[a]}function $a(a,b){var c;return a&&(c=f(b)?bb(a):_a(a,b),c&&(Bf=c)),Bf._abbr}function _a(a,b){if(null!==b){var c=Ef;if(b.abbr=a,null!=Ff[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=Ff[a]._config;else if(null!=b.parentLocale){if(null==Ff[b.parentLocale])return Gf[b.parentLocale]||(Gf[b.parentLocale]=[]),Gf[b.parentLocale].push({name:a,config:b}),null;c=Ff[b.parentLocale]._config}return Ff[a]=new C(B(c,b)),Gf[a]&&Gf[a].forEach(function(a){_a(a.name,a.config)}),$a(a),Ff[a]}return delete Ff[a],null}function ab(a,b){if(null!=b){var c,d=Ef;null!=Ff[a]&&(d=Ff[a]._config),b=B(d,b),c=new C(b),c.parentLocale=Ff[a],Ff[a]=c,$a(a)}else null!=Ff[a]&&(null!=Ff[a].parentLocale?Ff[a]=Ff[a].parentLocale:null!=Ff[a]&&delete Ff[a]);return Ff[a]}function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Bf;if(!c(a)){if(b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return ze(Ff)}function db(a){var b,c=a._a;return c&&n(a).overflow===-2&&(b=c[ef]<0||c[ef]>11?ef:c[ff]<1||c[ff]>ea(c[df],c[ef])?ff:c[gf]<0||c[gf]>24||24===c[gf]&&(0!==c[hf]||0!==c[jf]||0!==c[kf])?gf:c[hf]<0||c[hf]>59?hf:c[jf]<0||c[jf]>59?jf:c[kf]<0||c[kf]>999?kf:-1,n(a)._overflowDayOfYear&&(bff)&&(b=ff),n(a)._overflowWeeks&&b===-1&&(b=lf),n(a)._overflowWeekday&&b===-1&&(b=mf),n(a).overflow=b),a}function eb(a){var b,c,d,e,f,g,h=a._i,i=Hf.exec(h)||If.exec(h);if(i){for(n(a).iso=!0,b=0,c=Kf.length;b10?"YYYY ":"YY "),f="HH:mm"+(c[4]?":ss":""),c[1]){var l=new Date(c[2]),m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][l.getDay()];if(c[1].substr(0,3)!==m)return n(a).weekdayMismatch=!0,void(a._isValid=!1)}switch(c[5].length){case 2:0===i?h=" +0000":(i=k.indexOf(c[5][1].toUpperCase())-12,h=(i<0?" -":" +")+(""+i).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:h=j[c[5]];break;default:h=j[" GMT"]}c[5]=h,a._i=c.splice(1).join(""),g=" ZZ",a._f=d+e+f+g,lb(a),n(a).rfc2822=!0}else a._isValid=!1}function gb(b){var c=Mf.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(eb(b),void(b._isValid===!1&&(delete b._isValid,fb(b),b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b)))))}function hb(a,b,c){return null!=a?a:null!=b?b:c}function ib(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function jb(a){var b,c,d,e,f=[];if(!a._d){for(d=ib(a),a._w&&null==a._a[ff]&&null==a._a[ef]&&kb(a),null!=a._dayOfYear&&(e=hb(a._a[df],d[df]),(a._dayOfYear>pa(e)||0===a._dayOfYear)&&(n(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[ef]=c.getUTCMonth(),a._a[ff]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[gf]&&0===a._a[hf]&&0===a._a[jf]&&0===a._a[kf]&&(a._nextDay=!0,a._a[gf]=0),a._d=(a._useUTC?ta:sa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[gf]=24)}}function kb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4,c=hb(b.GG,a._a[df],wa(tb(),1,4).year),d=hb(b.W,1),e=hb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(tb(),f,g);c=hb(b.gg,a._a[df],j.year),d=hb(b.w,j.week),null!=b.d?(e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f}d<1||d>xa(c,f,g)?n(a)._overflowWeeks=!0:null!=i?n(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[df]=h.year,a._dayOfYear=h.dayOfYear)}function lb(b){if(b._f===a.ISO_8601)return void eb(b);if(b._f===a.RFC_2822)return void fb(b);b._a=[],n(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Ie)||[],c=0;c0&&n(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),Le[f]?(d?n(b).empty=!1:n(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&n(b).unusedTokens.push(f);n(b).charsLeftOver=i-j,h.length>0&&n(b).unusedInput.push(h),b._a[gf]<=12&&n(b).bigHour===!0&&b._a[gf]>0&&(n(b).bigHour=void 0),n(b).parsedDateParts=b._a.slice(0),n(b).meridiem=b._meridiem,b._a[gf]=mb(b._locale,b._a[gf],b._meridiem),jb(b),db(b)}function mb(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b}function nb(a){var b,c,d,e,f;if(0===a._f.length)return n(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;ethis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ob(){if(!f(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=qb(a),a._a){var b=a._isUTC?l(a._a):tb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Pb(){return!!this.isValid()&&!this._isUTC}function Qb(){return!!this.isValid()&&this._isUTC}function Rb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Sb(a,b){var c,d,e,f=a,h=null;return Bb(a)?f={ms:a._milliseconds,d:a._days,M:a._months}:g(a)?(f={},b?f[b]=a:f.milliseconds=a):(h=Tf.exec(a))?(c="-"===h[1]?-1:1,f={y:0,d:u(h[ff])*c,h:u(h[gf])*c,m:u(h[hf])*c,s:u(h[jf])*c,ms:u(Cb(1e3*h[kf]))*c}):(h=Uf.exec(a))?(c="-"===h[1]?-1:1,f={y:Tb(h[2],c),M:Tb(h[3],c),w:Tb(h[4],c),d:Tb(h[5],c),h:Tb(h[6],c),m:Tb(h[7],c),s:Tb(h[8],c)}):null==f?f={}:"object"==typeof f&&("from"in f||"to"in f)&&(e=Vb(tb(f.from),tb(f.to)),f={},f.ms=e.milliseconds,f.M=e.months),d=new Ab(f),Bb(a)&&j(a,"_locale")&&(d._locale=a._locale),d}function Tb(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function Ub(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Vb(a,b){var c;return a.isValid()&&b.isValid()?(b=Fb(b,a),a.isBefore(b)?c=Ub(a,b):(c=Ub(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function Wb(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Sb(c,d),Xb(this,e,a),this}}function Xb(b,c,d,e){var f=c._milliseconds,g=Cb(c._days),h=Cb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Yb(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Zb(b,c){var d=b||tb(),e=Fb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,tb(d)))}function $b(){return new r(this)}function _b(a,b){var c=s(a)?a:tb(a);return!(!this.isValid()||!c.isValid())&&(b=K(f(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()9999?X(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):z(Date.prototype.toISOString)?this.toDate().toISOString():X(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function jc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var a="moment",b="";this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",b="Z");var c="["+a+'("]',d=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",e="-MM-DD[T]HH:mm:ss.SSS",f=b+'[")]';return this.format(c+d+e+f)}function kc(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=X(this,b);return this.localeData().postformat(c)}function lc(a,b){return this.isValid()&&(s(a)&&a.isValid()||tb(a).isValid())?Sb({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function mc(a){return this.from(tb(),a)}function nc(a,b){return this.isValid()&&(s(a)&&a.isValid()||tb(a).isValid())?Sb({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function oc(a){return this.to(tb(),a)}function pc(a){var b;return void 0===a?this._locale._abbr:(b=bb(a),null!=b&&(this._locale=b),this)}function qc(){return this._locale}function rc(a){switch(a=K(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function sc(a){return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function tc(){return this._d.valueOf()-6e4*(this._offset||0)}function uc(){return Math.floor(this.valueOf()/1e3)}function vc(){return new Date(this.valueOf())}function wc(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function xc(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function yc(){return this.isValid()?this.toISOString():null}function zc(){return o(this)}function Ac(){ +return k({},n(this))}function Bc(){return n(this).overflow}function Cc(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Dc(a,b){U(0,[a,a.length],0,b)}function Ec(a){return Ic.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Fc(a){return Ic.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Gc(){return xa(this.year(),1,4)}function Hc(){var a=this.localeData()._week;return xa(this.year(),a.dow,a.doy)}function Ic(a,b,c,d,e){var f;return null==a?wa(this,d,e).year:(f=xa(a,d,e),b>f&&(b=f),Jc.call(this,a,b,c,d,e))}function Jc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Kc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Lc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Mc(a,b){b[kf]=u(1e3*("0."+a))}function Nc(){return this._isUTC?"UTC":""}function Oc(){return this._isUTC?"Coordinated Universal Time":""}function Pc(a){return tb(1e3*a)}function Qc(){return tb.apply(null,arguments).parseZone()}function Rc(a){return a}function Sc(a,b,c,d){var e=bb(),f=l().set(d,b);return e[c](f,a)}function Tc(a,b,c){if(g(a)&&(b=a,a=void 0),a=a||"",null!=b)return Sc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Sc(a,d,c,"month");return e}function Uc(a,b,c,d){"boolean"==typeof a?(g(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,g(b)&&(c=b,b=void 0),b=b||"");var e=bb(),f=a?e._week.dow:0;if(null!=c)return Sc(b,(c+f)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Sc(b,(h+f)%7,d,"day");return i}function Vc(a,b){return Tc(a,b,"months")}function Wc(a,b){return Tc(a,b,"monthsShort")}function Xc(a,b,c){return Uc(a,b,c,"weekdays")}function Yc(a,b,c){return Uc(a,b,c,"weekdaysShort")}function Zc(a,b,c){return Uc(a,b,c,"weekdaysMin")}function $c(){var a=this._data;return this._milliseconds=dg(this._milliseconds),this._days=dg(this._days),this._months=dg(this._months),a.milliseconds=dg(a.milliseconds),a.seconds=dg(a.seconds),a.minutes=dg(a.minutes),a.hours=dg(a.hours),a.months=dg(a.months),a.years=dg(a.years),this}function _c(a,b,c,d){var e=Sb(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function ad(a,b){return _c(this,a,b,1)}function bd(a,b){return _c(this,a,b,-1)}function cd(a){return a<0?Math.floor(a):Math.ceil(a)}function dd(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*cd(fd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ed(g)),h+=e,g-=cd(fd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ed(a){return 4800*a/146097}function fd(a){return 146097*a/4800}function gd(a){if(!this.isValid())return NaN;var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ed(b),"month"===a?c:c/12;switch(b=this._days+Math.round(fd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function hd(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12):NaN}function id(a){return function(){return this.as(a)}}function jd(a){return a=K(a),this.isValid()?this[a+"s"]():NaN}function kd(a){return function(){return this.isValid()?this._data[a]:NaN}}function ld(){return t(this.days()/7)}function md(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function nd(a,b,c){var d=Sb(a).abs(),e=tg(d.as("s")),f=tg(d.as("m")),g=tg(d.as("h")),h=tg(d.as("d")),i=tg(d.as("M")),j=tg(d.as("y")),k=e<=ug.ss&&["s",e]||e0,k[4]=c,md.apply(null,k)}function od(a){return void 0===a?tg:"function"==typeof a&&(tg=a,!0)}function pd(a,b){return void 0!==ug[a]&&(void 0===b?ug[a]:(ug[a]=b,"s"===a&&(ug.ss=b-1),!0))}function qd(a){if(!this.isValid())return this.localeData().invalidDate();var b=this.localeData(),c=nd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function rd(){if(!this.isValid())return this.localeData().invalidDate();var a,b,c,d=vg(this._milliseconds)/1e3,e=vg(this._days),f=vg(this._months);a=t(d/60),b=t(a/60),d%=60,a%=60,c=t(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"} +//! moment.js locale configuration +//! locale : Belarusian [be] +//! author : Dmitry Demidov : https://github.com/demidov91 +//! author: Praleska: http://praleska.pro/ +//! Author : Menelion Elensúle : https://github.com/Oire +function sd(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function td(a,b,c){var d={mm:b?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:b?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===c?b?"хвіліна":"хвіліну":"h"===c?b?"гадзіна":"гадзіну":a+" "+sd(d[c],+a)} +//! moment.js locale configuration +//! locale : Breton [br] +//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou +function ud(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+xd(d[c],a)}function vd(a){switch(wd(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function wd(a){return a>9?wd(a%10):a}function xd(a,b){return 2===b?yd(a):a}function yd(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)} +//! moment.js locale configuration +//! locale : Bosnian [bs] +//! author : Nedim Cholich : https://github.com/frontyard +//! based on (hr) translation by Bojan Marković +function zd(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function Ad(a){return a>1&&a<5&&1!==~~(a/10)}function Bd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekund":"pár sekundami";case"m":return b?"minuta":d?"minutu":"minutou";case"mm":return b||d?e+(Ad(a)?"minuty":"minut"):e+"minutami";break;case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(Ad(a)?"hodiny":"hodin"):e+"hodinami";break;case"d":return b||d?"den":"dnem";case"dd":return b||d?e+(Ad(a)?"dny":"dní"):e+"dny";break;case"M":return b||d?"měsíc":"měsícem";case"MM":return b||d?e+(Ad(a)?"měsíce":"měsíců"):e+"měsíci";break;case"y":return b||d?"rok":"rokem";case"yy":return b||d?e+(Ad(a)?"roky":"let"):e+"lety"}} +//! moment.js locale configuration +//! locale : German (Austria) [de-at] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Martin Groller : https://github.com/MadMG +//! author : Mikolaj Dadela : https://github.com/mik01aj +function Cd(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : German (Switzerland) [de-ch] +//! author : sschueller : https://github.com/sschueller +function Dd(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : German [de] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Mikolaj Dadela : https://github.com/mik01aj +function Ed(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : Estonian [et] +//! author : Henry Kehlmann : https://github.com/madhenry +//! improvements : Illimar Tambek : https://github.com/ragulka +function Fd(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}function Gd(a,b,c,d){var e="";switch(c){case"s":return d?"muutaman sekunnin":"muutama sekunti";case"m":return d?"minuutin":"minuutti";case"mm":e=d?"minuutin":"minuuttia";break;case"h":return d?"tunnin":"tunti";case"hh":e=d?"tunnin":"tuntia";break;case"d":return d?"päivän":"päivä";case"dd":e=d?"päivän":"päivää";break;case"M":return d?"kuukauden":"kuukausi";case"MM":e=d?"kuukauden":"kuukautta";break;case"y":return d?"vuoden":"vuosi";case"yy":e=d?"vuoden":"vuotta"}return e=Hd(a,d)+" "+e}function Hd(a,b){return a<10?b?$g[a]:Zg[a]:a} +//! moment.js locale configuration +//! locale : Konkani Latin script [gom-latn] +//! author : The Discoverer : https://github.com/WikiDiscoverer +function Id(a,b,c,d){var e={s:["thodde secondanim","thodde second"],m:["eka mintan","ek minute"],mm:[a+" mintanim",a+" mintam"],h:["eka horan","ek hor"],hh:[a+" horanim",a+" hor"],d:["eka disan","ek dis"],dd:[a+" disanim",a+" dis"],M:["eka mhoinean","ek mhoino"],MM:[a+" mhoineanim",a+" mhoine"],y:["eka vorsan","ek voros"],yy:[a+" vorsanim",a+" vorsam"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : Croatian [hr] +//! author : Bojan Marković : https://github.com/bmarkovic +function Jd(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function Kd(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function Ld(a){return(a?"":"[múlt] ")+"["+ih[this.day()]+"] LT[-kor]"} +//! moment.js locale configuration +//! locale : Icelandic [is] +//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik +function Md(a){return a%100===11||a%10!==1}function Nd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return b?"mínúta":"mínútu";case"mm":return Md(a)?e+(b||d?"mínútur":"mínútum"):b?e+"mínúta":e+"mínútu";case"hh":return Md(a)?e+(b||d?"klukkustundir":"klukkustundum"):e+"klukkustund";case"d":return b?"dagur":d?"dag":"degi";case"dd":return Md(a)?b?e+"dagar":e+(d?"daga":"dögum"):b?e+"dagur":e+(d?"dag":"degi");case"M":return b?"mánuður":d?"mánuð":"mánuði";case"MM":return Md(a)?b?e+"mánuðir":e+(d?"mánuði":"mánuðum"):b?e+"mánuður":e+(d?"mánuð":"mánuði");case"y":return b||d?"ár":"ári";case"yy":return Md(a)?e+(b||d?"ár":"árum"):e+(b||d?"ár":"ári")}} +//! moment.js locale configuration +//! locale : Luxembourgish [lb] +//! author : mweimerskirch : https://github.com/mweimerskirch +//! author : David Raison : https://github.com/kwisatz +function Od(a,b,c,d){var e={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?e[c][0]:e[c][1]}function Pd(a){var b=a.substr(0,a.indexOf(" "));return Rd(b)?"a "+a:"an "+a}function Qd(a){var b=a.substr(0,a.indexOf(" "));return Rd(b)?"viru "+a:"virun "+a}function Rd(a){if(a=parseInt(a,10),isNaN(a))return!1;if(a<0)return!0;if(a<10)return 4<=a&&a<=7;if(a<100){var b=a%10,c=a/10;return Rd(0===b?c:b)}if(a<1e4){for(;a>=10;)a/=10;return Rd(a)}return a/=1e3,Rd(a)}function Sd(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function Td(a,b,c,d){return b?Vd(c)[0]:d?Vd(c)[1]:Vd(c)[2]}function Ud(a){return a%10===0||a>10&&a<20}function Vd(a){return nh[a].split("_")}function Wd(a,b,c,d){var e=a+" ";return 1===a?e+Td(a,b,c[0],d):b?e+(Ud(a)?Vd(c)[1]:Vd(c)[0]):d?e+Vd(c)[1]:e+(Ud(a)?Vd(c)[1]:Vd(c)[2])}function Xd(a,b,c){return c?b%10===1&&b%100!==11?a[2]:a[3]:b%10===1&&b%100!==11?a[0]:a[1]}function Yd(a,b,c){return a+" "+Xd(oh[c],a,b)}function Zd(a,b,c){return Xd(oh[c],a,b)}function $d(a,b){return b?"dažas sekundes":"dažām sekundēm"}function _d(a,b,c,d){var e="";if(b)switch(c){case"s":e="काही सेकंद";break;case"m":e="एक मिनिट";break;case"mm":e="%d मिनिटे";break;case"h":e="एक तास";break;case"hh":e="%d तास";break;case"d":e="एक दिवस";break;case"dd":e="%d दिवस";break;case"M":e="एक महिना";break;case"MM":e="%d महिने";break;case"y":e="एक वर्ष";break;case"yy":e="%d वर्षे"}else switch(c){case"s":e="काही सेकंदां";break;case"m":e="एका मिनिटा";break;case"mm":e="%d मिनिटां";break;case"h":e="एका तासा";break;case"hh":e="%d तासां";break;case"d":e="एका दिवसा";break;case"dd":e="%d दिवसां";break;case"M":e="एका महिन्या";break;case"MM":e="%d महिन्यां";break;case"y":e="एका वर्षा";break;case"yy":e="%d वर्षां"}return e.replace(/%d/i,a)}function ae(a){return a%10<5&&a%10>1&&~~(a/10)%10!==1}function be(a,b,c){var d=a+" ";switch(c){case"m":return b?"minuta":"minutę";case"mm":return d+(ae(a)?"minuty":"minut");case"h":return b?"godzina":"godzinę";case"hh":return d+(ae(a)?"godziny":"godzin");case"MM":return d+(ae(a)?"miesiące":"miesięcy");case"yy":return d+(ae(a)?"lata":"lat")}} +//! moment.js locale configuration +//! locale : Romanian [ro] +//! author : Vlad Gurdiga : https://github.com/gurdiga +//! author : Valentin Agachi : https://github.com/avaly +function ce(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]} +//! moment.js locale configuration +//! locale : Russian [ru] +//! author : Viktorminator : https://github.com/Viktorminator +//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Коренберг Марк : https://github.com/socketpair +function de(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function ee(a,b,c){var d={mm:b?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===c?b?"минута":"минуту":a+" "+de(d[c],+a)}function fe(a){return a>1&&a<5}function ge(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"pár sekúnd":"pár sekundami";case"m":return b?"minúta":d?"minútu":"minútou";case"mm":return b||d?e+(fe(a)?"minúty":"minút"):e+"minútami";break;case"h":return b?"hodina":d?"hodinu":"hodinou";case"hh":return b||d?e+(fe(a)?"hodiny":"hodín"):e+"hodinami";break;case"d":return b||d?"deň":"dňom";case"dd":return b||d?e+(fe(a)?"dni":"dní"):e+"dňami";break;case"M":return b||d?"mesiac":"mesiacom";case"MM":return b||d?e+(fe(a)?"mesiace":"mesiacov"):e+"mesiacmi";break;case"y":return b||d?"rok":"rokom";case"yy":return b||d?e+(fe(a)?"roky":"rokov"):e+"rokmi"}} +//! moment.js locale configuration +//! locale : Slovenian [sl] +//! author : Robert Sedovšek : https://github.com/sedovsek +function he(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":a<5?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":a<5?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":a<5?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":a<5?b||d?"leta":"leti":b||d?"let":"leti"}}function ie(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"leS":a.indexOf("jar")!==-1?b.slice(0,-3)+"waQ":a.indexOf("DIS")!==-1?b.slice(0,-3)+"nem":b+" pIq"}function je(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"Hu’":a.indexOf("jar")!==-1?b.slice(0,-3)+"wen":a.indexOf("DIS")!==-1?b.slice(0,-3)+"ben":b+" ret"}function ke(a,b,c,d){var e=le(a);switch(c){case"mm":return e+" tup";case"hh":return e+" rep";case"dd":return e+" jaj";case"MM":return e+" jar";case"yy":return e+" DIS"}}function le(a){var b=Math.floor(a%1e3/100),c=Math.floor(a%100/10),d=a%10,e="";return b>0&&(e+=Rh[b]+"vatlh"),c>0&&(e+=(""!==e?" ":"")+Rh[c]+"maH"),d>0&&(e+=(""!==e?" ":"")+Rh[d]),""===e?"pagh":e}function me(a,b,c,d){var e={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[a+" míuts",""+a+" míuts"],h:["'n þora","'iensa þora"],hh:[a+" þoras",""+a+" þoras"],d:["'n ziua","'iensa ziua"],dd:[a+" ziuas",""+a+" ziuas"],M:["'n mes","'iens mes"],MM:[a+" mesen",""+a+" mesen"],y:["'n ar","'iens ar"],yy:[a+" ars",""+a+" ars"]};return d?e[c][0]:b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : Ukrainian [uk] +//! author : zemlanin : https://github.com/zemlanin +//! Author : Menelion Elensúle : https://github.com/Oire +function ne(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function oe(a,b,c){var d={mm:b?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:b?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===c?b?"хвилина":"хвилину":"h"===c?b?"година":"годину":a+" "+ne(d[c],+a)}function pe(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};if(!a)return c.nominative;var d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function qe(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}var re,se;se=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;d68?1900:2e3)};var tf=O("FullYear",!0);U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),J("week","w"),J("isoWeek","W"),M("week",5),M("isoWeek",5),Z("w",Re),Z("ww",Re,Ne),Z("W",Re),Z("WW",Re,Ne),ca(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var uf={dow:0,doy:6};U("d",0,"do","day"),U("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),U("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),U("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),J("day","d"),J("weekday","e"),J("isoWeekday","E"),M("day",11),M("weekday",11),M("isoWeekday",11),Z("d",Re),Z("e",Re),Z("E",Re),Z("dd",function(a,b){return b.weekdaysMinRegex(a)}),Z("ddd",function(a,b){return b.weekdaysShortRegex(a)}),Z("dddd",function(a,b){return b.weekdaysRegex(a)}),ca(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:n(c).invalidWeekday=a}),ca(["d","e","E"],function(a,b,c,d){b[d]=u(a)});var vf="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),wf="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),xf="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),yf=af,zf=af,Af=af;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Ra),U("k",["kk",2],0,Sa),U("hmm",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ta("a",!0),Ta("A",!1),J("hour","h"),M("hour",13),Z("a",Ua),Z("A",Ua),Z("H",Re),Z("h",Re),Z("k",Re),Z("HH",Re,Ne),Z("hh",Re,Ne),Z("kk",Re,Ne),Z("hmm",Se),Z("hmmss",Te),Z("Hmm",Se),Z("Hmmss",Te),ba(["H","HH"],gf),ba(["k","kk"],function(a,b,c){var d=u(a);b[gf]=24===d?0:d}),ba(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),ba(["h","hh"],function(a,b,c){b[gf]=u(a),n(c).bigHour=!0}),ba("hmm",function(a,b,c){var d=a.length-2;b[gf]=u(a.substr(0,d)),b[hf]=u(a.substr(d)),n(c).bigHour=!0}),ba("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[gf]=u(a.substr(0,d)),b[hf]=u(a.substr(d,2)),b[jf]=u(a.substr(e)),n(c).bigHour=!0}),ba("Hmm",function(a,b,c){var d=a.length-2;b[gf]=u(a.substr(0,d)),b[hf]=u(a.substr(d))}),ba("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[gf]=u(a.substr(0,d)),b[hf]=u(a.substr(d,2)),b[jf]=u(a.substr(e))});var Bf,Cf=/[ap]\.?m?\.?/i,Df=O("Hours",!0),Ef={calendar:Ae,longDateFormat:Be,invalidDate:Ce,ordinal:De,dayOfMonthOrdinalParse:Ee,relativeTime:Fe,months:pf,monthsShort:qf,week:uf,weekdays:vf,weekdaysMin:xf,weekdaysShort:wf,meridiemParse:Cf},Ff={},Gf={},Hf=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,If=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Jf=/Z|[+-]\d\d(?::?\d\d)?/,Kf=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Lf=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Mf=/^\/?Date\((\-?\d+)/i,Nf=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;a.createFromInputFallback=x("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var Of=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=tb.apply(null,arguments);return this.isValid()&&a.isValid()?athis?this:a:p()}),Qf=function(){return Date.now?Date.now():+new Date},Rf=["year","quarter","month","week","day","hour","minute","second","millisecond"];Db("Z",":"),Db("ZZ",""),Z("Z",$e),Z("ZZ",$e),ba(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Eb($e,a)});var Sf=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var Tf=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Uf=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Sb.fn=Ab.prototype,Sb.invalid=zb;var Vf=Wb(1,"add"),Wf=Wb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Xf=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Dc("gggg","weekYear"),Dc("ggggg","weekYear"),Dc("GGGG","isoWeekYear"),Dc("GGGGG","isoWeekYear"),J("weekYear","gg"),J("isoWeekYear","GG"),M("weekYear",1),M("isoWeekYear",1),Z("G",Ye),Z("g",Ye),Z("GG",Re,Ne),Z("gg",Re,Ne),Z("GGGG",Ve,Pe),Z("gggg",Ve,Pe),Z("GGGGG",We,Qe),Z("ggggg",We,Qe),ca(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),ca(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),U("Q",0,"Qo","quarter"),J("quarter","Q"),M("quarter",7),Z("Q",Me),ba("Q",function(a,b){b[ef]=3*(u(a)-1)}),U("D",["DD",2],"Do","date"),J("date","D"),M("date",9),Z("D",Re),Z("DD",Re,Ne),Z("Do",function(a,b){return a?b._dayOfMonthOrdinalParse||b._ordinalParse:b._dayOfMonthOrdinalParseLenient}),ba(["D","DD"],ff),ba("Do",function(a,b){b[ff]=u(a.match(Re)[0],10)});var Yf=O("Date",!0);U("DDD",["DDDD",3],"DDDo","dayOfYear"),J("dayOfYear","DDD"),M("dayOfYear",4),Z("DDD",Ue),Z("DDDD",Oe),ba(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}),U("m",["mm",2],0,"minute"),J("minute","m"),M("minute",14),Z("m",Re),Z("mm",Re,Ne),ba(["m","mm"],hf);var Zf=O("Minutes",!1);U("s",["ss",2],0,"second"),J("second","s"),M("second",15),Z("s",Re),Z("ss",Re,Ne),ba(["s","ss"],jf);var $f=O("Seconds",!1);U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),J("millisecond","ms"),M("millisecond",16),Z("S",Ue,Me),Z("SS",Ue,Ne),Z("SSS",Ue,Oe);var _f;for(_f="SSSS";_f.length<=9;_f+="S")Z(_f,Xe);for(_f="S";_f.length<=9;_f+="S")ba(_f,Mc);var ag=O("Milliseconds",!1);U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var bg=r.prototype;bg.add=Vf,bg.calendar=Zb,bg.clone=$b,bg.diff=fc,bg.endOf=sc,bg.format=kc,bg.from=lc,bg.fromNow=mc,bg.to=nc,bg.toNow=oc,bg.get=R,bg.invalidAt=Bc,bg.isAfter=_b,bg.isBefore=ac,bg.isBetween=bc,bg.isSame=cc,bg.isSameOrAfter=dc,bg.isSameOrBefore=ec,bg.isValid=zc,bg.lang=Xf,bg.locale=pc,bg.localeData=qc,bg.max=Pf,bg.min=Of,bg.parsingFlags=Ac,bg.set=S,bg.startOf=rc,bg.subtract=Wf,bg.toArray=wc,bg.toObject=xc,bg.toDate=vc,bg.toISOString=ic,bg.inspect=jc,bg.toJSON=yc,bg.toString=hc,bg.unix=uc,bg.valueOf=tc,bg.creationData=Cc,bg.year=tf,bg.isLeapYear=ra,bg.weekYear=Ec,bg.isoWeekYear=Fc,bg.quarter=bg.quarters=Kc,bg.month=ka,bg.daysInMonth=la,bg.week=bg.weeks=Ba,bg.isoWeek=bg.isoWeeks=Ca,bg.weeksInYear=Hc,bg.isoWeeksInYear=Gc,bg.date=Yf,bg.day=bg.days=Ka,bg.weekday=La,bg.isoWeekday=Ma,bg.dayOfYear=Lc,bg.hour=bg.hours=Df,bg.minute=bg.minutes=Zf,bg.second=bg.seconds=$f,bg.millisecond=bg.milliseconds=ag,bg.utcOffset=Hb,bg.utc=Jb,bg.local=Kb,bg.parseZone=Lb,bg.hasAlignedHourOffset=Mb,bg.isDST=Nb,bg.isLocal=Pb,bg.isUtcOffset=Qb,bg.isUtc=Rb,bg.isUTC=Rb,bg.zoneAbbr=Nc,bg.zoneName=Oc,bg.dates=x("dates accessor is deprecated. Use date instead.",Yf),bg.months=x("months accessor is deprecated. Use month instead",ka),bg.years=x("years accessor is deprecated. Use year instead",tf),bg.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ib),bg.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ob);var cg=C.prototype;cg.calendar=D,cg.longDateFormat=E,cg.invalidDate=F,cg.ordinal=G,cg.preparse=Rc,cg.postformat=Rc,cg.relativeTime=H,cg.pastFuture=I,cg.set=A,cg.months=fa,cg.monthsShort=ga,cg.monthsParse=ia,cg.monthsRegex=na,cg.monthsShortRegex=ma,cg.week=ya,cg.firstDayOfYear=Aa,cg.firstDayOfWeek=za,cg.weekdays=Fa,cg.weekdaysMin=Ha,cg.weekdaysShort=Ga,cg.weekdaysParse=Ja,cg.weekdaysRegex=Na,cg.weekdaysShortRegex=Oa,cg.weekdaysMinRegex=Pa,cg.isPM=Va,cg.meridiem=Wa,$a("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=x("moment.lang is deprecated. Use moment.locale instead.",$a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",bb);var dg=Math.abs,eg=id("ms"),fg=id("s"),gg=id("m"),hg=id("h"),ig=id("d"),jg=id("w"),kg=id("M"),lg=id("y"),mg=kd("milliseconds"),ng=kd("seconds"),og=kd("minutes"),pg=kd("hours"),qg=kd("days"),rg=kd("months"),sg=kd("years"),tg=Math.round,ug={ss:44,s:45,m:45,h:22,d:26,M:11},vg=Math.abs,wg=Ab.prototype;wg.isValid=yb,wg.abs=$c,wg.add=ad,wg.subtract=bd,wg.as=gd,wg.asMilliseconds=eg,wg.asSeconds=fg,wg.asMinutes=gg,wg.asHours=hg,wg.asDays=ig,wg.asWeeks=jg,wg.asMonths=kg,wg.asYears=lg,wg.valueOf=hd,wg._bubble=dd,wg.get=jd,wg.milliseconds=mg,wg.seconds=ng,wg.minutes=og,wg.hours=pg,wg.days=qg,wg.weeks=ld,wg.months=rg,wg.years=sg,wg.humanize=qd,wg.toISOString=rd,wg.toString=rd,wg.toJSON=rd,wg.locale=pc,wg.localeData=qc,wg.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",rd),wg.lang=Xf,U("X",0,0,"unix"),U("x",0,0,"valueOf"),Z("x",Ye),Z("X",_e),ba("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),ba("x",function(a,b,c){c._d=new Date(u(a))}), +//! moment.js +//! version : 2.18.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +a.version="2.18.1",b(tb),a.fn=bg,a.min=vb,a.max=wb,a.now=Qf,a.utc=l,a.unix=Pc,a.months=Vc,a.isDate=h,a.locale=$a,a.invalid=p,a.duration=Sb,a.isMoment=s,a.weekdays=Xc,a.parseZone=Qc,a.localeData=bb,a.isDuration=Bb,a.monthsShort=Wc,a.weekdaysMin=Zc,a.defineLocale=_a,a.updateLocale=ab,a.locales=cb,a.weekdaysShort=Yc,a.normalizeUnits=K,a.relativeTimeRounding=od,a.relativeTimeThreshold=pd,a.calendarFormat=Yb,a.prototype=bg, +//! moment.js locale configuration +//! locale : Afrikaans [af] +//! author : Werner Mollentze : https://github.com/wernerm +a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(a){return/^nm$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Arabic (Algeria) [ar-dz] +//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme +a.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}}), +//! moment.js locale configuration +//! locale : Arabic (Kuwait) [ar-kw] +//! author : Nusret Parlak: https://github.com/nusretparlak +a.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}}); +//! moment.js locale configuration +//! locale : Arabic (Lybia) [ar-ly] +//! author : Ali Hmer: https://github.com/kikoanis +var xg={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},yg=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},zg={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},Ag=function(a){return function(b,c,d,e){var f=yg(b),g=zg[a][yg(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},Bg=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];a.defineLocale("ar-ly",{months:Bg,monthsShort:Bg,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:Ag("s"),m:Ag("m"),mm:Ag("m"),h:Ag("h"),hh:Ag("h"),d:Ag("d"),dd:Ag("d"),M:Ag("M"),MM:Ag("M"),y:Ag("y"),yy:Ag("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return xg[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}), +//! moment.js locale configuration +//! locale : Arabic (Morocco) [ar-ma] +//! author : ElFadili Yassine : https://github.com/ElFadiliY +//! author : Abdel Said : https://github.com/abdelsaid +a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}}); +//! moment.js locale configuration +//! locale : Arabic (Saudi Arabia) [ar-sa] +//! author : Suhail Alkowaileet : https://github.com/xsoh +var Cg={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},Dg={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return Dg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Cg[a]}).replace(/,/g,"،")},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Arabic (Tunisia) [ar-tn] +//! author : Nader Toukabri : https://github.com/naderio +a.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Arabic [ar] +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi +var Eg={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},Fg={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},Gg=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},Hg={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},Ig=function(a){return function(b,c,d,e){var f=Gg(b),g=Hg[a][Gg(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},Jg=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"];a.defineLocale("ar",{months:Jg,monthsShort:Jg,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:Ig("s"),m:Ig("m"),mm:Ig("m"),h:Ig("h"),hh:Ig("h"),d:Ig("d"),dd:Ig("d"),M:Ig("M"),MM:Ig("M"),y:Ig("y"),yy:Ig("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return Fg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Eg[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}}); +//! moment.js locale configuration +//! locale : Azerbaijani [az] +//! author : topchiyev : https://github.com/topchiyev +var Kg={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};a.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(a){return/^(gündüz|axşam)$/.test(a)},meridiem:function(a,b,c){return a<4?"gecə":a<12?"səhər":a<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(a){if(0===a)return a+"-ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Kg[b]||Kg[c]||Kg[d])},week:{dow:1,doy:7}}),a.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:td,mm:td,h:td,hh:td,d:"дзень",dd:td,M:"месяц",MM:td,y:"год",yy:td},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(a){return/^(дня|вечара)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночы":a<12?"раніцы":a<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Bulgarian [bg] +//! author : Krasen Borisov : https://github.com/kraz +a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Bengali [bn] +//! author : Kaushik Gandhi : https://github.com/kaushikgandhi +var Lg={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},Mg={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};a.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return Mg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Lg[a]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(a,b){return 12===a&&(a=0),"রাত"===b&&a>=4||"দুপুর"===b&&a<5||"বিকাল"===b?a+12:a},meridiem:function(a,b,c){return a<4?"রাত":a<10?"সকাল":a<17?"দুপুর":a<20?"বিকাল":"রাত"},week:{dow:0,doy:6}}); +//! moment.js locale configuration +//! locale : Tibetan [bo] +//! author : Thupten N. Chakrishar : https://github.com/vajradog +var Ng={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},Og={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};a.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return Og[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Ng[a]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(a,b){return 12===a&&(a=0),"མཚན་མོ"===b&&a>=4||"ཉིན་གུང"===b&&a<5||"དགོང་དག"===b?a+12:a},meridiem:function(a,b,c){return a<4?"མཚན་མོ":a<10?"ཞོགས་ཀས":a<17?"ཉིན་གུང":a<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}}),a.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:ud,h:"un eur",hh:"%d eur",d:"un devezh",dd:ud,M:"ur miz",MM:ud,y:"ur bloaz",yy:vd},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,doy:4}}),a.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:zd,mm:zd,h:zd,hh:zd,d:"dan",dd:zd,M:"mjesec",MM:zd,y:"godinu",yy:zd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Catalan [ca] +//! author : Juan G. Hurtado : https://github.com/juanghurtado +a.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"[el] D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"[el] D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"[el] dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return"w"!==b&&"W"!==b||(c="a"),a+c},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Czech [cs] +//! author : petrbela : https://github.com/petrbela +var Pg="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),Qg="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");a.defineLocale("cs",{months:Pg,monthsShort:Qg,monthsParse:function(a,b){var c,d=[];for(c=0;c<12;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(Pg,Qg),shortMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(Qg),longMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(Pg),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:Bd,m:Bd,mm:Bd,h:Bd,hh:Bd,d:Bd,dd:Bd,M:Bd,MM:Bd,y:Bd,yy:Bd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Chuvash [cv] +//! author : Anatoly Mironov : https://github.com/mirontoli +a.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/ҫул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Welsh [cy] +//! author : Robert Allen : https://github.com/robgallen +//! author : https://github.com/ryangreaves +a.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Danish [da] +//! author : Ulrik Nielsen : https://github.com/mrbase +a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:Cd,mm:"%d Minuten",h:Cd,hh:"%d Stunden",d:Cd,dd:Cd,M:Cd,MM:Cd,y:Cd,yy:Cd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH.mm",LLLL:"dddd, D. MMMM YYYY HH.mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:Dd,mm:"%d Minuten",h:Dd,hh:"%d Stunden",d:Dd,dd:Dd,M:Dd,MM:Dd,y:Dd,yy:Dd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:Ed,mm:"%d Minuten",h:Ed,hh:"%d Stunden",d:Ed,dd:Ed,M:Ed,MM:Ed,y:Ed,yy:Ed},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Maldivian [dv] +//! author : Jawish Hameed : https://github.com/jawish +var Rg=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],Sg=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];a.defineLocale("dv",{months:Rg,monthsShort:Rg,weekdays:Sg,weekdaysShort:Sg,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(a){return"މފ"===a},meridiem:function(a,b,c){return a<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:7,doy:12}}), +//! moment.js locale configuration +//! locale : Greek [el] +//! author : Aggelos Karalias : https://github.com/mehiel +a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return a?/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return z(c)&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : English (Australia) [en-au] +//! author : Jared Morse : https://github.com/jarcoal +a.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : English (Canada) [en-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca +a.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}), +//! moment.js locale configuration +//! locale : English (United Kingdom) [en-gb] +//! author : Chris Gedrim : https://github.com/chrisgedrim +a.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : English (Ireland) [en-ie] +//! author : Chris Cartlidge : https://github.com/chriscartlidge +a.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : English (New Zealand) [en-nz] +//! author : Luke McGregor : https://github.com/lukemcgregor +a.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Esperanto [eo] +//! author : Colin Dean : https://github.com/colindean +//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia +//! comment : miestasmia corrected the translation by colindean +a.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(a){return"p"===a.charAt(0).toLowerCase()},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Spanish (Dominican Republic) [es-do] +var Tg="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Ug="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?Ug[a.month()]:Tg[a.month()]:Tg},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Spanish [es] +//! author : Julio Napurí : https://github.com/julionc +var Vg="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Wg="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?Wg[a.month()]:Vg[a.month()]:Vg},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:Fd,m:Fd,mm:Fd,h:Fd,hh:Fd,d:Fd,dd:"%d päeva",M:Fd,MM:Fd,y:Fd,yy:Fd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Basque [eu] +//! author : Eneko Illarramendi : https://github.com/eillarra +a.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Persian [fa] +//! author : Ebrahim Byagowi : https://github.com/ebraminio +var Xg={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},Yg={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return a<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return Yg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Xg[a]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}}); +//! moment.js locale configuration +//! locale : Finnish [fi] +//! author : Tarmo Aidantausta : https://github.com/bleadof +var Zg="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),$g=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",Zg[7],Zg[8],Zg[9]];a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:Gd,m:Gd,mm:Gd,h:Gd,hh:Gd,d:Gd,dd:Gd,M:Gd,MM:Gd,y:Gd,yy:Gd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Faroese [fo] +//! author : Ragnar Johannesen : https://github.com/ragnar123 +a.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : French (Canada) [fr-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca +a.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(a,b){switch(b){default:case"M":case"Q":case"D":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}}}), +//! moment.js locale configuration +//! locale : French (Switzerland) [fr-ch] +//! author : Gaspard Bucher : https://github.com/gaspard +a.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(a,b){switch(b){default:case"M":case"Q":case"D":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : French [fr] +//! author : John Fischer : https://github.com/jfroffice +a.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(a,b){switch(b){case"D":return a+(1===a?"er":"");default:case"M":case"Q":case"DDD":case"d":return a+(1===a?"er":"e");case"w":case"W":return a+(1===a?"re":"e")}},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Frisian [fy] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +var _g="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),ah="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");a.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?ah[a.month()]:_g[a.month()]:_g},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Scottish Gaelic [gd] +//! author : Jon Ashdown : https://github.com/jonashdown +var bh=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],ch=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],dh=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],eh=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],fh=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];a.defineLocale("gd",{months:bh,monthsShort:ch,monthsParseExact:!0,weekdays:dh,weekdaysShort:eh,weekdaysMin:fh,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(a){var b=1===a?"d":a%10===2?"na":"mh";return a+b},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Galician [gl] +//! author : Juan G. Hurtado : https://github.com/juanghurtado +a.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return 0===a.indexOf("un")?"n"+a:"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:Id,m:Id,mm:Id,h:Id,hh:Id,d:Id,dd:Id,M:Id,MM:Id,y:Id,yy:Id},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(a,b){switch(b){case"D":return a+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return a}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(a,b){return 12===a&&(a=0),"rati"===b?a<4?a:a+12:"sokalli"===b?a:"donparam"===b?a>12?a:a+12:"sanje"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"rati":a<12?"sokalli":a<16?"donparam":a<20?"sanje":"rati"}}), +//! moment.js locale configuration +//! locale : Hebrew [he] +//! author : Tomer Cohen : https://github.com/tomer +//! author : Moshe Simantov : https://github.com/DevelopmentIL +//! author : Tal Ater : https://github.com/TalAter +a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(a){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(a)},meridiem:function(a,b,c){return a<5?"לפנות בוקר":a<10?"בבוקר":a<12?c?'לפנה"צ':"לפני הצהריים":a<18?c?'אחה"צ':"אחרי הצהריים":"בערב"}}); +//! moment.js locale configuration +//! locale : Hindi [hi] +//! author : Mayank Singhal : https://github.com/mayanksinghal +var gh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},hh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return hh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return gh[a]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?a<4?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात":a<10?"सुबह":a<17?"दोपहर":a<20?"शाम":"रात"},week:{dow:0,doy:6}}),a.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:Jd,mm:Jd,h:Jd,hh:Jd,d:"dan",dd:Jd,M:"mjesec",MM:Jd,y:"godinu",yy:Jd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Hungarian [hu] +//! author : Adam Brunner : https://github.com/adambrunner +var ih="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return a<12?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return Ld.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return Ld.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:Kd,m:Kd,mm:Kd,h:Kd,hh:Kd,d:Kd,dd:Kd,M:Kd,MM:Kd,y:Kd,yy:Kd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Armenian [hy-am] +//! author : Armendarabyan : https://github.com/armendarabyan +a.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(a){return/^(ցերեկվա|երեկոյան)$/.test(a)},meridiem:function(a){return a<4?"գիշերվա":a<12?"առավոտվա":a<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Indonesian [id] +//! author : Mohammad Satrio Utomo : https://github.com/tyok +//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan +a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"siang":a<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:Nd,m:Nd,mm:Nd,h:"klukkustund",hh:Nd,d:Nd,dd:Nd,M:Nd,MM:Nd,y:Nd,yy:Nd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Italian [it] +//! author : Lorenzo : https://github.com/aliem +//! author: Mattia Larentis: https://github.com/nostalgiaz +a.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Japanese [ja] +//! author : LI Long : https://github.com/baryon +a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return a<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";default:return a}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}}), +//! moment.js locale configuration +//! locale : Javanese [jv] +//! author : Rony Lantip : https://github.com/lantip +//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa +a.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(a,b){return 12===a&&(a=0),"enjing"===b?a:"siyang"===b?a>=11?a:a+12:"sonten"===b||"ndalu"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"enjing":a<15?"siyang":a<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Georgian [ka] +//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili +a.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის უკან"):/წელი/.test(a)?a.replace(/წელი$/,"წლის უკან"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(a){return 0===a?a:1===a?a+"-ლი":a<20||a<=100&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Kazakh [kk] +//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan +var jh={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};a.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(jh[a]||jh[b]||jh[c])},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Cambodian [km] +//! author : Kruy Vanna : https://github.com/kruyvanna +a.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Kannada [kn] +//! author : Rajeev Naik : https://github.com/rajeevnaikte +var kh={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},lh={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};a.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(a){return a.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(a){return lh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return kh[a]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ರಾತ್ರಿ"===b?a<4?a:a+12:"ಬೆಳಿಗ್ಗೆ"===b?a:"ಮಧ್ಯಾಹ್ನ"===b?a>=10?a:a+12:"ಸಂಜೆ"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"ರಾತ್ರಿ":a<10?"ಬೆಳಿಗ್ಗೆ":a<17?"ಮಧ್ಯಾಹ್ನ":a<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(a){return a+"ನೇ"},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Korean [ko] +//! author : Kyungwook, Park : https://github.com/kyungw00k +//! author : Jeeeyul Lee +a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return a<12?"오전":"오후"}}); +//! moment.js locale configuration +//! locale : Kyrgyz [ky] +//! author : Chyngyz Arystan uulu : https://github.com/chyngyz +var mh={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};a.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(mh[a]||mh[b]||mh[c])},week:{dow:1,doy:7}}),a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:Pd,past:Qd,s:"e puer Sekonnen",m:Od,mm:"%d Minutten",h:Od,hh:"%d Stonnen",d:Od,dd:"%d Deeg",M:Od,MM:"%d Méint",y:Od,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Lao [lo] +//! author : Ryan Hart : https://github.com/ryanhart2 +a.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(a){return"ຕອນແລງ"===a},meridiem:function(a,b,c){return a<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(a){return"ທີ່"+a}}); +//! moment.js locale configuration +//! locale : Lithuanian [lt] +//! author : Mindaugas Mozūras : https://github.com/mmozuras +var nh={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};a.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:Sd,m:Td,mm:Wd,h:Td,hh:Wd,d:Td,dd:Wd,M:Td,MM:Wd,y:Td,yy:Wd},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Latvian [lv] +//! author : Kristaps Karlsons : https://github.com/skakri +//! author : Jānis Elmeris : https://github.com/JanisE +var oh={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};a.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:$d,m:Zd,mm:Yd,h:Zd,hh:Yd,d:Zd,dd:Yd,M:Zd,MM:Yd,y:Zd,yy:Yd},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Montenegrin [me] +//! author : Miodrag Nikač : https://github.com/miodragnikac +var ph={words:{m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=ph.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+ph.correctGrammaticalCase(a,d)}};a.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:ph.translate,mm:ph.translate,h:ph.translate,hh:ph.translate,d:"dan",dd:ph.translate,M:"mjesec",MM:ph.translate,y:"godinu",yy:ph.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Maori [mi] +//! author : John Corrigan : https://github.com/johnideal +a.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Macedonian [mk] +//! author : Borislav Mickov : https://github.com/B0k0 +a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Malayalam [ml] +//! author : Floyd Pink : https://github.com/floydpink +a.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(a,b){return 12===a&&(a=0),"രാത്രി"===b&&a>=4||"ഉച്ച കഴിഞ്ഞ്"===b||"വൈകുന്നേരം"===b?a+12:a},meridiem:function(a,b,c){return a<4?"രാത്രി":a<12?"രാവിലെ":a<17?"ഉച്ച കഴിഞ്ഞ്":a<20?"വൈകുന്നേരം":"രാത്രി"}}); +//! moment.js locale configuration +//! locale : Marathi [mr] +//! author : Harshad Kale : https://github.com/kalehv +//! author : Vivek Athalye : https://github.com/vnathalye +var qh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},rh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:_d,m:_d,mm:_d,h:_d,hh:_d,d:_d,dd:_d,M:_d,MM:_d,y:_d,yy:_d},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return rh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return qh[a]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात्री"===b?a<4?a:a+12:"सकाळी"===b?a:"दुपारी"===b?a>=10?a:a+12:"सायंकाळी"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात्री":a<10?"सकाळी":a<17?"दुपारी":a<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Malay [ms-my] +//! note : DEPRECATED, the correct one is [ms] +//! author : Weldan Jamili : https://github.com/weldan +a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Malay [ms] +//! author : Weldan Jamili : https://github.com/weldan +a.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Burmese [my] +//! author : Squar team, mysquar.com +//! author : David Rossellat : https://github.com/gholadr +//! author : Tin Aung Lin : https://github.com/thanyawzinmin +var sh={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},th={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};a.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return th[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return sh[a]})},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Norwegian Bokmål [nb] +//! authors : Espen Hovlandsdal : https://github.com/rexxars +//! Sigurd Gartmann : https://github.com/sigurdga +a.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Nepalese [ne] +//! author : suvash : https://github.com/suvash +var uh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},vh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return vh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return uh[a]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(a,b){return 12===a&&(a=0),"राति"===b?a<4?a:a+12:"बिहान"===b?a:"दिउँसो"===b?a>=10?a:a+12:"साँझ"===b?a+12:void 0},meridiem:function(a,b,c){return a<3?"राति":a<12?"बिहान":a<16?"दिउँसो":a<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}}); +//! moment.js locale configuration +//! locale : Dutch (Belgium) [nl-be] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj +var wh="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),xh="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),yh=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],zh=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?xh[a.month()]:wh[a.month()]:wh},monthsRegex:zh,monthsShortRegex:zh,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:yh,longMonthsParse:yh,shortMonthsParse:yh,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Dutch [nl] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj +var Ah="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),Bh="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),Ch=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],Dh=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return a?/-MMM-/.test(b)?Bh[a.month()]:Ah[a.month()]:Ah},monthsRegex:Dh,monthsShortRegex:Dh,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:Ch,longMonthsParse:Ch,shortMonthsParse:Ch,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Nynorsk [nn] +//! author : https://github.com/mechuwind +a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Punjabi (India) [pa-in] +//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit +var Eh={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},Fh={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};a.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(a){return a.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(a){return Fh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Eh[a]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ਰਾਤ"===b?a<4?a:a+12:"ਸਵੇਰ"===b?a:"ਦੁਪਹਿਰ"===b?a>=10?a:a+12:"ਸ਼ਾਮ"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"ਰਾਤ":a<10?"ਸਵੇਰ":a<17?"ਦੁਪਹਿਰ":a<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}}); +//! moment.js locale configuration +//! locale : Polish [pl] +//! author : Rafal Hirsz : https://github.com/evoL +var Gh="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),Hh="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");a.defineLocale("pl",{months:function(a,b){return a?""===b?"("+Hh[a.month()]+"|"+Gh[a.month()]+")":/D MMMM/.test(b)?Hh[a.month()]:Gh[a.month()]:Gh},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:be,mm:be,h:be,hh:be,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:be,y:"rok",yy:be},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Portuguese (Brazil) [pt-br] +//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira +a.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"}), +//! moment.js locale configuration +//! locale : Portuguese [pt] +//! author : Jefferson : https://github.com/jalex79 +a.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}}),a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:ce,h:"o oră",hh:ce,d:"o zi",dd:ce,M:"o lună",MM:ce,y:"un an",yy:ce},week:{dow:1,doy:7}});var Ih=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];a.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:Ih,longMonthsParse:Ih,shortMonthsParse:Ih,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:ee,mm:ee,h:"час",hh:ee,d:"день",dd:ee,M:"месяц",MM:ee,y:"год",yy:ee},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночи":a<12?"утра":a<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Sindhi [sd] +//! author : Narain Sagar : https://github.com/narainsagar +var Jh=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],Kh=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];a.defineLocale("sd",{months:Jh,monthsShort:Jh,weekdays:Kh,weekdaysShort:Kh,weekdaysMin:Kh,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(a){return"شام"===a},meridiem:function(a,b,c){return a<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Northern Sami [se] +//! authors : Bård Rolstad Henriksen : https://github.com/karamell +a.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Sinhalese [si] +//! author : Sampath Sitinamaluwa : https://github.com/sampathsris +a.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(a){return a+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(a){return"ප.ව."===a||"පස් වරු"===a},meridiem:function(a,b,c){return a>11?c?"ප.ව.":"පස් වරු":c?"පෙ.ව.":"පෙර වරු"}}); +//! moment.js locale configuration +//! locale : Slovak [sk] +//! author : Martin Minka : https://github.com/k2s +//! based on work of petrbela : https://github.com/petrbela +var Lh="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),Mh="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");a.defineLocale("sk",{months:Lh,monthsShort:Mh,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:ge,m:ge,mm:ge,h:ge,hh:ge,d:ge,dd:ge,M:ge,MM:ge,y:ge,yy:ge},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:he,m:he,mm:he,h:he,hh:he,d:he,dd:he,M:he,MM:he,y:he,yy:he},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Albanian [sq] +//! author : Flakërim Ismani : https://github.com/flakerimi +//! author : Menelion Elensúle : https://github.com/Oire +//! author : Oerd Cukalla : https://github.com/oerd +a.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(a){return"M"===a.charAt(0)},meridiem:function(a,b,c){return a<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Serbian Cyrillic [sr-cyrl] +//! author : Milan Janačković : https://github.com/milan-j +var Nh={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=Nh.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Nh.correctGrammaticalCase(a,d)}};a.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:Nh.translate,mm:Nh.translate,h:Nh.translate,hh:Nh.translate,d:"дан",dd:Nh.translate,M:"месец",MM:Nh.translate,y:"годину",yy:Nh.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Serbian [sr] +//! author : Milan Janačković : https://github.com/milan-j +var Oh={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=Oh.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Oh.correctGrammaticalCase(a,d)}};a.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:Oh.translate,mm:Oh.translate,h:Oh.translate,hh:Oh.translate,d:"dan",dd:Oh.translate,M:"mesec",MM:Oh.translate,y:"godinu",yy:Oh.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : siSwati [ss] +//! author : Nicolai Davies : https://github.com/nicolaidavies +a.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(a,b,c){return a<11?"ekuseni":a<15?"emini":a<19?"entsambama":"ebusuku"},meridiemHour:function(a,b){return 12===a&&(a=0),"ekuseni"===b?a:"emini"===b?a>=11?a:a+12:"entsambama"===b||"ebusuku"===b?0===a?0:a+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Swedish [sv] +//! author : Jens Alm : https://github.com/ulmus +a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Swahili [sw] +//! author : Fahad Kassim : https://github.com/fadsel +a.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Tamil [ta] +//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 +var Ph={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},Qh={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};a.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(a){return a+"வது"},preparse:function(a){return a.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(a){return Qh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Ph[a]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(a,b,c){return a<2?" யாமம்":a<6?" வைகறை":a<10?" காலை":a<14?" நண்பகல்":a<18?" எற்பாடு":a<22?" மாலை":" யாமம்"},meridiemHour:function(a,b){return 12===a&&(a=0),"யாமம்"===b?a<2?a:a+12:"வைகறை"===b||"காலை"===b?a:"நண்பகல்"===b&&a>=10?a:a+12},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Telugu [te] +//! author : Krishna Chaitanya Thota : https://github.com/kcthota +a.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(a,b){return 12===a&&(a=0),"రాత్రి"===b?a<4?a:a+12:"ఉదయం"===b?a:"మధ్యాహ్నం"===b?a>=10?a:a+12:"సాయంత్రం"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"రాత్రి":a<10?"ఉదయం":a<17?"మధ్యాహ్నం":a<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}}), +//! moment.js locale configuration +//! locale : Tetun Dili (East Timor) [tet] +//! author : Joshua Brooks : https://github.com/joshbrooks +//! author : Onorio De J. Afonso : https://github.com/marobo +a.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Thai [th] +//! author : Kridsada Thanabulpong : https://github.com/sirn +a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return a<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}}), +//! moment.js locale configuration +//! locale : Tagalog (Philippines) [tl-ph] +//! author : Dan Hagman : https://github.com/hagmandan +a.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Klingon [tlh] +//! author : Dominika Kruk : https://github.com/amaranthrose +var Rh="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");a.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:ie,past:je,s:"puS lup",m:"wa’ tup",mm:ke,h:"wa’ rep",hh:ke,d:"wa’ jaj",dd:ke,M:"wa’ jar",MM:ke,y:"wa’ DIS",yy:ke},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}); +//! moment.js locale configuration +//! locale : Turkish [tr] +//! authors : Erhan Gundogan : https://github.com/erhangundogan, +//! Burak Yiğit Kaya: https://github.com/BYK +var Sh={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},dayOfMonthOrdinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)return a+"'ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Sh[b]||Sh[c]||Sh[d])},week:{dow:1,doy:7}}), +//! moment.js locale configuration +//! locale : Talossan [tzl] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +//! author : Iustì Canun +a.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(a){return"d'o"===a.toLowerCase()},meridiem:function(a,b,c){return a>11?c?"d'o":"D'O":c?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:me,m:me,mm:me,h:me,hh:me,d:me,dd:me,M:me,MM:me,y:me,yy:me},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}), +//! moment.js locale configuration +//! locale : Central Atlas Tamazight Latin [tzm-latn] +//! author : Abdel Said : https://github.com/abdelsaid +a.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}), +//! moment.js locale configuration +//! locale : Central Atlas Tamazight [tzm] +//! author : Abdel Said : https://github.com/abdelsaid +a.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}}),a.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:pe,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:qe("[Сьогодні "),nextDay:qe("[Завтра "),lastDay:qe("[Вчора "),nextWeek:qe("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return qe("[Минулої] dddd [").call(this);case 1:case 2:case 4:return qe("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:oe,mm:oe,h:"годину",hh:oe,d:"день",dd:oe,M:"місяць",MM:oe,y:"рік",yy:oe},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночі":a<12?"ранку":a<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Urdu [ur] +//! author : Sawood Alam : https://github.com/ibnesayeed +//! author : Zack : https://github.com/ZackVision +var Th=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],Uh=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"]; +//! moment.js locale configuration +//! locale : Uzbek Latin [uz-latn] +//! author : Rasulbek Mirzayev : github.com/Rasulbeeek +//! moment.js locale configuration +//! locale : Uzbek [uz] +//! author : Sardor Muminov : https://github.com/muminoff +//! moment.js locale configuration +//! locale : Vietnamese [vi] +//! author : Bang Nguyen : https://github.com/bangnk +//! moment.js locale configuration +//! locale : Pseudo [x-pseudo] +//! author : Andrew Hood : https://github.com/andrewhood125 +//! moment.js locale configuration +//! locale : Yoruba Nigeria [yo] +//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe +//! moment.js locale configuration +//! locale : Chinese (China) [zh-cn] +//! author : suupic : https://github.com/suupic +//! author : Zeno Zeng : https://github.com/zenozeng +//! moment.js locale configuration +//! locale : Chinese (Hong Kong) [zh-hk] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +//! author : Konstantin : https://github.com/skfd +//! moment.js locale configuration +//! locale : Chinese (Taiwan) [zh-tw] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +return a.defineLocale("ur",{months:Th,monthsShort:Th,weekdays:Uh,weekdaysShort:Uh,weekdaysMin:Uh,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(a){return"شام"===a},meridiem:function(a,b,c){return a<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:1,doy:4}}),a.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),a.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}}),a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),a.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),a.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}}),a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}}),a.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.locale("en"),a}); \ No newline at end of file diff --git a/node_modules/moment/min/moment.min.js b/node_modules/moment/min/moment.min.js new file mode 100644 index 0000000..770f8bc --- /dev/null +++ b/node_modules/moment/min/moment.min.js @@ -0,0 +1,7 @@ +//! moment.js +//! version : 2.18.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return sd.apply(null,arguments)}function b(a){sd=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a)return!1;return!0}function f(a){return void 0===a}function g(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function h(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function i(a,b){var c,d=[];for(c=0;c0)for(c=0;c0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Hd[c]=Hd[c+"s"]=Hd[b]=a}function K(a){return"string"==typeof a?Hd[a]||Hd[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)j(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){Id[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:Id[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Md[a]=e),b&&(Md[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Md[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Jd);for(b=0,c=d.length;b=0&&Kd.test(a);)a=a.replace(Kd,c),Kd.lastIndex=0,d-=1;return a}function Z(a,b,c){ce[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return j(ce,a)?ce[a](b._strict,b._locale):new RegExp(_(a))}function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),g(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments));return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function ua(a,b,c){var d=7+b-c,e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1}function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7}function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy}function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:c(this._weekdays)?this._weekdays:this._weekdays.standalone}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=l([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=ne.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=ne.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=ne.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=ne.call(this._weekdaysParse,g),e!==-1?e:(e=ne.call(this._shortWeekdaysParse,g),e!==-1?e:(e=ne.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=ne.call(this._shortWeekdaysParse,g),e!==-1?e:(e=ne.call(this._weekdaysParse,g),e!==-1?e:(e=ne.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=ne.call(this._minWeekdaysParse,g),e!==-1?e:(e=ne.call(this._weekdaysParse,g),e!==-1?e:(e=ne.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){if(e=l([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN;if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(j(this,"_weekdaysRegex")||(this._weekdaysRegex=ye),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(j(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ze),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(j(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ae),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++)c=l([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for(g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Ua(a,b){return b._meridiemParse}function Va(a){return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a}function Ya(a){for(var b,c,d,e,f=0;f0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function Za(a){var b=null;if(!Fe[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Be._abbr,require("./locale/"+a),$a(b)}catch(a){}return Fe[a]}function $a(a,b){var c;return a&&(c=f(b)?bb(a):_a(a,b),c&&(Be=c)),Be._abbr}function _a(a,b){if(null!==b){var c=Ee;if(b.abbr=a,null!=Fe[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=Fe[a]._config;else if(null!=b.parentLocale){if(null==Fe[b.parentLocale])return Ge[b.parentLocale]||(Ge[b.parentLocale]=[]),Ge[b.parentLocale].push({name:a,config:b}),null;c=Fe[b.parentLocale]._config}return Fe[a]=new C(B(c,b)),Ge[a]&&Ge[a].forEach(function(a){_a(a.name,a.config)}),$a(a),Fe[a]}return delete Fe[a],null}function ab(a,b){if(null!=b){var c,d=Ee;null!=Fe[a]&&(d=Fe[a]._config),b=B(d,b),c=new C(b),c.parentLocale=Fe[a],Fe[a]=c,$a(a)}else null!=Fe[a]&&(null!=Fe[a].parentLocale?Fe[a]=Fe[a].parentLocale:null!=Fe[a]&&delete Fe[a]);return Fe[a]}function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Be;if(!c(a)){if(b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return Ad(Fe)}function db(a){var b,c=a._a;return c&&n(a).overflow===-2&&(b=c[fe]<0||c[fe]>11?fe:c[ge]<1||c[ge]>ea(c[ee],c[fe])?ge:c[he]<0||c[he]>24||24===c[he]&&(0!==c[ie]||0!==c[je]||0!==c[ke])?he:c[ie]<0||c[ie]>59?ie:c[je]<0||c[je]>59?je:c[ke]<0||c[ke]>999?ke:-1,n(a)._overflowDayOfYear&&(bge)&&(b=ge),n(a)._overflowWeeks&&b===-1&&(b=le),n(a)._overflowWeekday&&b===-1&&(b=me),n(a).overflow=b),a}function eb(a){var b,c,d,e,f,g,h=a._i,i=He.exec(h)||Ie.exec(h);if(i){for(n(a).iso=!0,b=0,c=Ke.length;b10?"YYYY ":"YY "),f="HH:mm"+(c[4]?":ss":""),c[1]){var l=new Date(c[2]),m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][l.getDay()];if(c[1].substr(0,3)!==m)return n(a).weekdayMismatch=!0,void(a._isValid=!1)}switch(c[5].length){case 2:0===i?h=" +0000":(i=k.indexOf(c[5][1].toUpperCase())-12,h=(i<0?" -":" +")+(""+i).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:h=j[c[5]];break;default:h=j[" GMT"]}c[5]=h,a._i=c.splice(1).join(""),g=" ZZ",a._f=d+e+f+g,lb(a),n(a).rfc2822=!0}else a._isValid=!1}function gb(b){var c=Me.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(eb(b),void(b._isValid===!1&&(delete b._isValid,fb(b),b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b)))))}function hb(a,b,c){return null!=a?a:null!=b?b:c}function ib(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function jb(a){var b,c,d,e,f=[];if(!a._d){for(d=ib(a),a._w&&null==a._a[ge]&&null==a._a[fe]&&kb(a),null!=a._dayOfYear&&(e=hb(a._a[ee],d[ee]),(a._dayOfYear>pa(e)||0===a._dayOfYear)&&(n(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[fe]=c.getUTCMonth(),a._a[ge]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[he]&&0===a._a[ie]&&0===a._a[je]&&0===a._a[ke]&&(a._nextDay=!0,a._a[he]=0),a._d=(a._useUTC?ta:sa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[he]=24)}}function kb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4,c=hb(b.GG,a._a[ee],wa(tb(),1,4).year),d=hb(b.W,1),e=hb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(tb(),f,g);c=hb(b.gg,a._a[ee],j.year),d=hb(b.w,j.week),null!=b.d?(e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f}d<1||d>xa(c,f,g)?n(a)._overflowWeeks=!0:null!=i?n(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[ee]=h.year,a._dayOfYear=h.dayOfYear)}function lb(b){if(b._f===a.ISO_8601)return void eb(b);if(b._f===a.RFC_2822)return void fb(b);b._a=[],n(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Jd)||[],c=0;c0&&n(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),Md[f]?(d?n(b).empty=!1:n(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&n(b).unusedTokens.push(f);n(b).charsLeftOver=i-j,h.length>0&&n(b).unusedInput.push(h),b._a[he]<=12&&n(b).bigHour===!0&&b._a[he]>0&&(n(b).bigHour=void 0),n(b).parsedDateParts=b._a.slice(0),n(b).meridiem=b._meridiem,b._a[he]=mb(b._locale,b._a[he],b._meridiem),jb(b),db(b)}function mb(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b}function nb(a){var b,c,d,e,f;if(0===a._f.length)return n(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;ethis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ob(){if(!f(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=qb(a),a._a){var b=a._isUTC?l(a._a):tb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Pb(){return!!this.isValid()&&!this._isUTC}function Qb(){return!!this.isValid()&&this._isUTC}function Rb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Sb(a,b){var c,d,e,f=a,h=null;return Bb(a)?f={ms:a._milliseconds,d:a._days,M:a._months}:g(a)?(f={},b?f[b]=a:f.milliseconds=a):(h=Te.exec(a))?(c="-"===h[1]?-1:1,f={y:0,d:u(h[ge])*c,h:u(h[he])*c,m:u(h[ie])*c,s:u(h[je])*c,ms:u(Cb(1e3*h[ke]))*c}):(h=Ue.exec(a))?(c="-"===h[1]?-1:1,f={y:Tb(h[2],c),M:Tb(h[3],c),w:Tb(h[4],c),d:Tb(h[5],c),h:Tb(h[6],c),m:Tb(h[7],c),s:Tb(h[8],c)}):null==f?f={}:"object"==typeof f&&("from"in f||"to"in f)&&(e=Vb(tb(f.from),tb(f.to)),f={},f.ms=e.milliseconds,f.M=e.months),d=new Ab(f),Bb(a)&&j(a,"_locale")&&(d._locale=a._locale),d}function Tb(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function Ub(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Vb(a,b){var c;return a.isValid()&&b.isValid()?(b=Fb(b,a),a.isBefore(b)?c=Ub(a,b):(c=Ub(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function Wb(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Sb(c,d),Xb(this,e,a),this}}function Xb(b,c,d,e){var f=c._milliseconds,g=Cb(c._days),h=Cb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Yb(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Zb(b,c){var d=b||tb(),e=Fb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,tb(d)))}function $b(){return new r(this)}function _b(a,b){var c=s(a)?a:tb(a);return!(!this.isValid()||!c.isValid())&&(b=K(f(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()9999?X(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):z(Date.prototype.toISOString)?this.toDate().toISOString():X(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function jc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var a="moment",b="";this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",b="Z");var c="["+a+'("]',d=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",e="-MM-DD[T]HH:mm:ss.SSS",f=b+'[")]';return this.format(c+d+e+f)}function kc(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=X(this,b);return this.localeData().postformat(c)}function lc(a,b){return this.isValid()&&(s(a)&&a.isValid()||tb(a).isValid())?Sb({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function mc(a){return this.from(tb(),a)}function nc(a,b){return this.isValid()&&(s(a)&&a.isValid()||tb(a).isValid())?Sb({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function oc(a){return this.to(tb(),a)}function pc(a){var b;return void 0===a?this._locale._abbr:(b=bb(a),null!=b&&(this._locale=b),this)}function qc(){return this._locale}function rc(a){switch(a=K(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function sc(a){return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function tc(){return this._d.valueOf()-6e4*(this._offset||0)}function uc(){return Math.floor(this.valueOf()/1e3)}function vc(){return new Date(this.valueOf())}function wc(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function xc(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function yc(){return this.isValid()?this.toISOString():null}function zc(){return o(this)}function Ac(){ +return k({},n(this))}function Bc(){return n(this).overflow}function Cc(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Dc(a,b){U(0,[a,a.length],0,b)}function Ec(a){return Ic.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Fc(a){return Ic.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Gc(){return xa(this.year(),1,4)}function Hc(){var a=this.localeData()._week;return xa(this.year(),a.dow,a.doy)}function Ic(a,b,c,d,e){var f;return null==a?wa(this,d,e).year:(f=xa(a,d,e),b>f&&(b=f),Jc.call(this,a,b,c,d,e))}function Jc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Kc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Lc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Mc(a,b){b[ke]=u(1e3*("0."+a))}function Nc(){return this._isUTC?"UTC":""}function Oc(){return this._isUTC?"Coordinated Universal Time":""}function Pc(a){return tb(1e3*a)}function Qc(){return tb.apply(null,arguments).parseZone()}function Rc(a){return a}function Sc(a,b,c,d){var e=bb(),f=l().set(d,b);return e[c](f,a)}function Tc(a,b,c){if(g(a)&&(b=a,a=void 0),a=a||"",null!=b)return Sc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Sc(a,d,c,"month");return e}function Uc(a,b,c,d){"boolean"==typeof a?(g(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,g(b)&&(c=b,b=void 0),b=b||"");var e=bb(),f=a?e._week.dow:0;if(null!=c)return Sc(b,(c+f)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Sc(b,(h+f)%7,d,"day");return i}function Vc(a,b){return Tc(a,b,"months")}function Wc(a,b){return Tc(a,b,"monthsShort")}function Xc(a,b,c){return Uc(a,b,c,"weekdays")}function Yc(a,b,c){return Uc(a,b,c,"weekdaysShort")}function Zc(a,b,c){return Uc(a,b,c,"weekdaysMin")}function $c(){var a=this._data;return this._milliseconds=df(this._milliseconds),this._days=df(this._days),this._months=df(this._months),a.milliseconds=df(a.milliseconds),a.seconds=df(a.seconds),a.minutes=df(a.minutes),a.hours=df(a.hours),a.months=df(a.months),a.years=df(a.years),this}function _c(a,b,c,d){var e=Sb(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function ad(a,b){return _c(this,a,b,1)}function bd(a,b){return _c(this,a,b,-1)}function cd(a){return a<0?Math.floor(a):Math.ceil(a)}function dd(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*cd(fd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ed(g)),h+=e,g-=cd(fd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ed(a){return 4800*a/146097}function fd(a){return 146097*a/4800}function gd(a){if(!this.isValid())return NaN;var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ed(b),"month"===a?c:c/12;switch(b=this._days+Math.round(fd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function hd(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12):NaN}function id(a){return function(){return this.as(a)}}function jd(a){return a=K(a),this.isValid()?this[a+"s"]():NaN}function kd(a){return function(){return this.isValid()?this._data[a]:NaN}}function ld(){return t(this.days()/7)}function md(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function nd(a,b,c){var d=Sb(a).abs(),e=uf(d.as("s")),f=uf(d.as("m")),g=uf(d.as("h")),h=uf(d.as("d")),i=uf(d.as("M")),j=uf(d.as("y")),k=e<=vf.ss&&["s",e]||e0,k[4]=c,md.apply(null,k)}function od(a){return void 0===a?uf:"function"==typeof a&&(uf=a,!0)}function pd(a,b){return void 0!==vf[a]&&(void 0===b?vf[a]:(vf[a]=b,"s"===a&&(vf.ss=b-1),!0))}function qd(a){if(!this.isValid())return this.localeData().invalidDate();var b=this.localeData(),c=nd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function rd(){if(!this.isValid())return this.localeData().invalidDate();var a,b,c,d=wf(this._milliseconds)/1e3,e=wf(this._days),f=wf(this._months);a=t(d/60),b=t(a/60),d%=60,a%=60,c=t(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}var sd,td;td=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;d68?1900:2e3)};var te=O("FullYear",!0);U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),J("week","w"),J("isoWeek","W"),M("week",5),M("isoWeek",5),Z("w",Sd),Z("ww",Sd,Od),Z("W",Sd),Z("WW",Sd,Od),ca(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var ue={dow:0,doy:6};U("d",0,"do","day"),U("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),U("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),U("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),J("day","d"),J("weekday","e"),J("isoWeekday","E"),M("day",11),M("weekday",11),M("isoWeekday",11),Z("d",Sd),Z("e",Sd),Z("E",Sd),Z("dd",function(a,b){return b.weekdaysMinRegex(a)}),Z("ddd",function(a,b){return b.weekdaysShortRegex(a)}),Z("dddd",function(a,b){return b.weekdaysRegex(a)}),ca(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:n(c).invalidWeekday=a}),ca(["d","e","E"],function(a,b,c,d){b[d]=u(a)});var ve="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),we="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),xe="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ye=be,ze=be,Ae=be;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Ra),U("k",["kk",2],0,Sa),U("hmm",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ta("a",!0),Ta("A",!1),J("hour","h"),M("hour",13),Z("a",Ua),Z("A",Ua),Z("H",Sd),Z("h",Sd),Z("k",Sd),Z("HH",Sd,Od),Z("hh",Sd,Od),Z("kk",Sd,Od),Z("hmm",Td),Z("hmmss",Ud),Z("Hmm",Td),Z("Hmmss",Ud),ba(["H","HH"],he),ba(["k","kk"],function(a,b,c){var d=u(a);b[he]=24===d?0:d}),ba(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),ba(["h","hh"],function(a,b,c){b[he]=u(a),n(c).bigHour=!0}),ba("hmm",function(a,b,c){var d=a.length-2;b[he]=u(a.substr(0,d)),b[ie]=u(a.substr(d)),n(c).bigHour=!0}),ba("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[he]=u(a.substr(0,d)),b[ie]=u(a.substr(d,2)),b[je]=u(a.substr(e)),n(c).bigHour=!0}),ba("Hmm",function(a,b,c){var d=a.length-2;b[he]=u(a.substr(0,d)),b[ie]=u(a.substr(d))}),ba("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[he]=u(a.substr(0,d)),b[ie]=u(a.substr(d,2)),b[je]=u(a.substr(e))});var Be,Ce=/[ap]\.?m?\.?/i,De=O("Hours",!0),Ee={calendar:Bd,longDateFormat:Cd,invalidDate:Dd,ordinal:Ed,dayOfMonthOrdinalParse:Fd,relativeTime:Gd,months:pe,monthsShort:qe,week:ue,weekdays:ve,weekdaysMin:xe,weekdaysShort:we,meridiemParse:Ce},Fe={},Ge={},He=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ie=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Je=/Z|[+-]\d\d(?::?\d\d)?/,Ke=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Le=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Me=/^\/?Date\((\-?\d+)/i,Ne=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;a.createFromInputFallback=x("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var Oe=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=tb.apply(null,arguments);return this.isValid()&&a.isValid()?athis?this:a:p()}),Qe=function(){return Date.now?Date.now():+new Date},Re=["year","quarter","month","week","day","hour","minute","second","millisecond"];Db("Z",":"),Db("ZZ",""),Z("Z",_d),Z("ZZ",_d),ba(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Eb(_d,a)});var Se=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var Te=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ue=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Sb.fn=Ab.prototype,Sb.invalid=zb;var Ve=Wb(1,"add"),We=Wb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Xe=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Dc("gggg","weekYear"),Dc("ggggg","weekYear"),Dc("GGGG","isoWeekYear"),Dc("GGGGG","isoWeekYear"),J("weekYear","gg"),J("isoWeekYear","GG"),M("weekYear",1),M("isoWeekYear",1),Z("G",Zd),Z("g",Zd),Z("GG",Sd,Od),Z("gg",Sd,Od),Z("GGGG",Wd,Qd),Z("gggg",Wd,Qd),Z("GGGGG",Xd,Rd),Z("ggggg",Xd,Rd),ca(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),ca(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),U("Q",0,"Qo","quarter"),J("quarter","Q"),M("quarter",7),Z("Q",Nd),ba("Q",function(a,b){b[fe]=3*(u(a)-1)}),U("D",["DD",2],"Do","date"),J("date","D"),M("date",9),Z("D",Sd),Z("DD",Sd,Od),Z("Do",function(a,b){return a?b._dayOfMonthOrdinalParse||b._ordinalParse:b._dayOfMonthOrdinalParseLenient}),ba(["D","DD"],ge),ba("Do",function(a,b){b[ge]=u(a.match(Sd)[0],10)});var Ye=O("Date",!0);U("DDD",["DDDD",3],"DDDo","dayOfYear"),J("dayOfYear","DDD"),M("dayOfYear",4),Z("DDD",Vd),Z("DDDD",Pd),ba(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}),U("m",["mm",2],0,"minute"),J("minute","m"),M("minute",14),Z("m",Sd),Z("mm",Sd,Od),ba(["m","mm"],ie);var Ze=O("Minutes",!1);U("s",["ss",2],0,"second"),J("second","s"),M("second",15),Z("s",Sd),Z("ss",Sd,Od),ba(["s","ss"],je);var $e=O("Seconds",!1);U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),J("millisecond","ms"),M("millisecond",16),Z("S",Vd,Nd),Z("SS",Vd,Od),Z("SSS",Vd,Pd);var _e;for(_e="SSSS";_e.length<=9;_e+="S")Z(_e,Yd);for(_e="S";_e.length<=9;_e+="S")ba(_e,Mc);var af=O("Milliseconds",!1);U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var bf=r.prototype;bf.add=Ve,bf.calendar=Zb,bf.clone=$b,bf.diff=fc,bf.endOf=sc,bf.format=kc,bf.from=lc,bf.fromNow=mc,bf.to=nc,bf.toNow=oc,bf.get=R,bf.invalidAt=Bc,bf.isAfter=_b,bf.isBefore=ac,bf.isBetween=bc,bf.isSame=cc,bf.isSameOrAfter=dc,bf.isSameOrBefore=ec,bf.isValid=zc,bf.lang=Xe,bf.locale=pc,bf.localeData=qc,bf.max=Pe,bf.min=Oe,bf.parsingFlags=Ac,bf.set=S,bf.startOf=rc,bf.subtract=We,bf.toArray=wc,bf.toObject=xc,bf.toDate=vc,bf.toISOString=ic,bf.inspect=jc,bf.toJSON=yc,bf.toString=hc,bf.unix=uc,bf.valueOf=tc,bf.creationData=Cc,bf.year=te,bf.isLeapYear=ra,bf.weekYear=Ec,bf.isoWeekYear=Fc,bf.quarter=bf.quarters=Kc,bf.month=ka,bf.daysInMonth=la,bf.week=bf.weeks=Ba,bf.isoWeek=bf.isoWeeks=Ca,bf.weeksInYear=Hc,bf.isoWeeksInYear=Gc,bf.date=Ye,bf.day=bf.days=Ka,bf.weekday=La,bf.isoWeekday=Ma,bf.dayOfYear=Lc,bf.hour=bf.hours=De,bf.minute=bf.minutes=Ze,bf.second=bf.seconds=$e,bf.millisecond=bf.milliseconds=af,bf.utcOffset=Hb,bf.utc=Jb,bf.local=Kb,bf.parseZone=Lb,bf.hasAlignedHourOffset=Mb,bf.isDST=Nb,bf.isLocal=Pb,bf.isUtcOffset=Qb,bf.isUtc=Rb,bf.isUTC=Rb,bf.zoneAbbr=Nc,bf.zoneName=Oc,bf.dates=x("dates accessor is deprecated. Use date instead.",Ye),bf.months=x("months accessor is deprecated. Use month instead",ka),bf.years=x("years accessor is deprecated. Use year instead",te),bf.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ib),bf.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ob);var cf=C.prototype;cf.calendar=D,cf.longDateFormat=E,cf.invalidDate=F,cf.ordinal=G,cf.preparse=Rc,cf.postformat=Rc,cf.relativeTime=H,cf.pastFuture=I,cf.set=A,cf.months=fa,cf.monthsShort=ga,cf.monthsParse=ia,cf.monthsRegex=na,cf.monthsShortRegex=ma,cf.week=ya,cf.firstDayOfYear=Aa,cf.firstDayOfWeek=za,cf.weekdays=Fa,cf.weekdaysMin=Ha,cf.weekdaysShort=Ga,cf.weekdaysParse=Ja,cf.weekdaysRegex=Na,cf.weekdaysShortRegex=Oa,cf.weekdaysMinRegex=Pa,cf.isPM=Va,cf.meridiem=Wa,$a("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=x("moment.lang is deprecated. Use moment.locale instead.",$a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",bb);var df=Math.abs,ef=id("ms"),ff=id("s"),gf=id("m"),hf=id("h"),jf=id("d"),kf=id("w"),lf=id("M"),mf=id("y"),nf=kd("milliseconds"),of=kd("seconds"),pf=kd("minutes"),qf=kd("hours"),rf=kd("days"),sf=kd("months"),tf=kd("years"),uf=Math.round,vf={ss:44,s:45,m:45,h:22,d:26,M:11},wf=Math.abs,xf=Ab.prototype;return xf.isValid=yb,xf.abs=$c,xf.add=ad,xf.subtract=bd,xf.as=gd,xf.asMilliseconds=ef,xf.asSeconds=ff,xf.asMinutes=gf,xf.asHours=hf,xf.asDays=jf,xf.asWeeks=kf,xf.asMonths=lf,xf.asYears=mf,xf.valueOf=hd,xf._bubble=dd,xf.get=jd,xf.milliseconds=nf,xf.seconds=of,xf.minutes=pf,xf.hours=qf,xf.days=rf,xf.weeks=ld,xf.months=sf,xf.years=tf,xf.humanize=qd,xf.toISOString=rd,xf.toString=rd,xf.toJSON=rd,xf.locale=pc,xf.localeData=qc,xf.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",rd),xf.lang=Xe,U("X",0,0,"unix"),U("x",0,0,"valueOf"),Z("x",Zd),Z("X",ae),ba("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),ba("x",function(a,b,c){c._d=new Date(u(a))}),a.version="2.18.1",b(tb),a.fn=bf,a.min=vb,a.max=wb,a.now=Qe,a.utc=l,a.unix=Pc,a.months=Vc,a.isDate=h,a.locale=$a,a.invalid=p,a.duration=Sb,a.isMoment=s,a.weekdays=Xc,a.parseZone=Qc,a.localeData=bb,a.isDuration=Bb,a.monthsShort=Wc,a.weekdaysMin=Zc,a.defineLocale=_a,a.updateLocale=ab,a.locales=cb,a.weekdaysShort=Yc,a.normalizeUnits=K,a.relativeTimeRounding=od,a.relativeTimeThreshold=pd,a.calendarFormat=Yb,a.prototype=bf,a}); \ No newline at end of file diff --git a/node_modules/moment/moment.d.ts b/node_modules/moment/moment.d.ts new file mode 100644 index 0000000..96cafaa --- /dev/null +++ b/node_modules/moment/moment.d.ts @@ -0,0 +1,712 @@ +declare function moment(inp?: moment.MomentInput, format?: moment.MomentFormatSpecification, strict?: boolean): moment.Moment; +declare function moment(inp?: moment.MomentInput, format?: moment.MomentFormatSpecification, language?: string, strict?: boolean): moment.Moment; + +declare namespace moment { + type RelativeTimeKey = 's' | 'm' | 'mm' | 'h' | 'hh' | 'd' | 'dd' | 'M' | 'MM' | 'y' | 'yy'; + type CalendarKey = 'sameDay' | 'nextDay' | 'lastDay' | 'nextWeek' | 'lastWeek' | 'sameElse' | string; + type LongDateFormatKey = 'LTS' | 'LT' | 'L' | 'LL' | 'LLL' | 'LLLL' | 'lts' | 'lt' | 'l' | 'll' | 'lll' | 'llll'; + + interface Locale { + calendar(key?: CalendarKey, m?: Moment, now?: Moment): string; + + longDateFormat(key: LongDateFormatKey): string; + invalidDate(): string; + ordinal(n: number): string; + + preparse(inp: string): string; + postformat(inp: string): string; + relativeTime(n: number, withoutSuffix: boolean, + key: RelativeTimeKey, isFuture: boolean): string; + pastFuture(diff: number, absRelTime: string): string; + set(config: Object): void; + + months(): string[]; + months(m: Moment, format?: string): string; + monthsShort(): string[]; + monthsShort(m: Moment, format?: string): string; + monthsParse(monthName: string, format: string, strict: boolean): number; + monthsRegex(strict: boolean): RegExp; + monthsShortRegex(strict: boolean): RegExp; + + week(m: Moment): number; + firstDayOfYear(): number; + firstDayOfWeek(): number; + + weekdays(): string[]; + weekdays(m: Moment, format?: string): string; + weekdaysMin(): string[]; + weekdaysMin(m: Moment): string; + weekdaysShort(): string[]; + weekdaysShort(m: Moment): string; + weekdaysParse(weekdayName: string, format: string, strict: boolean): number; + weekdaysRegex(strict: boolean): RegExp; + weekdaysShortRegex(strict: boolean): RegExp; + weekdaysMinRegex(strict: boolean): RegExp; + + isPM(input: string): boolean; + meridiem(hour: number, minute: number, isLower: boolean): string; + } + + interface StandaloneFormatSpec { + format: string[]; + standalone: string[]; + isFormat?: RegExp; + } + + interface WeekSpec { + dow: number; + doy: number; + } + + type CalendarSpecVal = string | ((m?: MomentInput, now?: Moment) => string); + interface CalendarSpec { + sameDay?: CalendarSpecVal; + nextDay?: CalendarSpecVal; + lastDay?: CalendarSpecVal; + nextWeek?: CalendarSpecVal; + lastWeek?: CalendarSpecVal; + sameElse?: CalendarSpecVal; + + // any additional properties might be used with moment.calendarFormat + [x: string]: CalendarSpecVal | void; // undefined + } + + type RelativeTimeSpecVal = ( + string | + ((n: number, withoutSuffix: boolean, + key: RelativeTimeKey, isFuture: boolean) => string) + ); + type RelativeTimeFuturePastVal = string | ((relTime: string) => string); + + interface RelativeTimeSpec { + future: RelativeTimeFuturePastVal; + past: RelativeTimeFuturePastVal; + s: RelativeTimeSpecVal; + m: RelativeTimeSpecVal; + mm: RelativeTimeSpecVal; + h: RelativeTimeSpecVal; + hh: RelativeTimeSpecVal; + d: RelativeTimeSpecVal; + dd: RelativeTimeSpecVal; + M: RelativeTimeSpecVal; + MM: RelativeTimeSpecVal; + y: RelativeTimeSpecVal; + yy: RelativeTimeSpecVal; + } + + interface LongDateFormatSpec { + LTS: string; + LT: string; + L: string; + LL: string; + LLL: string; + LLLL: string; + + // lets forget for a sec that any upper/lower permutation will also work + lts?: string; + lt?: string; + l?: string; + ll?: string; + lll?: string; + llll?: string; + } + + type MonthWeekdayFn = (momentToFormat: Moment, format?: string) => string; + type WeekdaySimpleFn = (momentToFormat: Moment) => string; + + interface LocaleSpecification { + months?: string[] | StandaloneFormatSpec | MonthWeekdayFn; + monthsShort?: string[] | StandaloneFormatSpec | MonthWeekdayFn; + + weekdays?: string[] | StandaloneFormatSpec | MonthWeekdayFn; + weekdaysShort?: string[] | StandaloneFormatSpec | WeekdaySimpleFn; + weekdaysMin?: string[] | StandaloneFormatSpec | WeekdaySimpleFn; + + meridiemParse?: RegExp; + meridiem?: (hour: number, minute:number, isLower: boolean) => string; + + isPM?: (input: string) => boolean; + + longDateFormat?: LongDateFormatSpec; + calendar?: CalendarSpec; + relativeTime?: RelativeTimeSpec; + invalidDate?: string; + ordinal?: (n: number) => string; + ordinalParse?: RegExp; + + week?: WeekSpec; + + // Allow anything: in general any property that is passed as locale spec is + // put in the locale object so it can be used by locale functions + [x: string]: any; + } + + interface MomentObjectOutput { + years: number; + /* One digit */ + months: number; + /* Day of the month */ + date: number; + hours: number; + minutes: number; + seconds: number; + milliseconds: number; + } + + interface Duration { + humanize(withSuffix?: boolean): string; + + abs(): Duration; + + as(units: unitOfTime.Base): number; + get(units: unitOfTime.Base): number; + + milliseconds(): number; + asMilliseconds(): number; + + seconds(): number; + asSeconds(): number; + + minutes(): number; + asMinutes(): number; + + hours(): number; + asHours(): number; + + days(): number; + asDays(): number; + + weeks(): number; + asWeeks(): number; + + months(): number; + asMonths(): number; + + years(): number; + asYears(): number; + + add(inp?: DurationInputArg1, unit?: DurationInputArg2): Duration; + subtract(inp?: DurationInputArg1, unit?: DurationInputArg2): Duration; + + locale(): string; + locale(locale: LocaleSpecifier): Duration; + localeData(): Locale; + + toISOString(): string; + toJSON(): string; + + /** + * @deprecated since version 2.8.0 + */ + lang(locale: LocaleSpecifier): Moment; + /** + * @deprecated since version 2.8.0 + */ + lang(): Locale; + /** + * @deprecated + */ + toIsoString(): string; + } + + interface MomentRelativeTime { + future: any; + past: any; + s: any; + m: any; + mm: any; + h: any; + hh: any; + d: any; + dd: any; + M: any; + MM: any; + y: any; + yy: any; + } + + interface MomentLongDateFormat { + L: string; + LL: string; + LLL: string; + LLLL: string; + LT: string; + LTS: string; + + l?: string; + ll?: string; + lll?: string; + llll?: string; + lt?: string; + lts?: string; + } + + interface MomentParsingFlags { + empty: boolean; + unusedTokens: string[]; + unusedInput: string[]; + overflow: number; + charsLeftOver: number; + nullInput: boolean; + invalidMonth: string | void; // null + invalidFormat: boolean; + userInvalidated: boolean; + iso: boolean; + parsedDateParts: any[]; + meridiem: string | void; // null + } + + interface MomentParsingFlagsOpt { + empty?: boolean; + unusedTokens?: string[]; + unusedInput?: string[]; + overflow?: number; + charsLeftOver?: number; + nullInput?: boolean; + invalidMonth?: string; + invalidFormat?: boolean; + userInvalidated?: boolean; + iso?: boolean; + parsedDateParts?: any[]; + meridiem?: string; + } + + interface MomentBuiltinFormat { + __momentBuiltinFormatBrand: any; + } + + type MomentFormatSpecification = string | MomentBuiltinFormat | (string | MomentBuiltinFormat)[]; + + namespace unitOfTime { + type Base = ( + "year" | "years" | "y" | + "month" | "months" | "M" | + "week" | "weeks" | "w" | + "day" | "days" | "d" | + "hour" | "hours" | "h" | + "minute" | "minutes" | "m" | + "second" | "seconds" | "s" | + "millisecond" | "milliseconds" | "ms" + ); + + type _quarter = "quarter" | "quarters" | "Q"; + type _isoWeek = "isoWeek" | "isoWeeks" | "W"; + type _date = "date" | "dates" | "D"; + type DurationConstructor = Base | _quarter; + + type DurationAs = Base; + + type StartOf = Base | _quarter | _isoWeek | _date; + + type Diff = Base | _quarter; + + type MomentConstructor = Base | _date; + + type All = Base | _quarter | _isoWeek | _date | + "weekYear" | "weekYears" | "gg" | + "isoWeekYear" | "isoWeekYears" | "GG" | + "dayOfYear" | "dayOfYears" | "DDD" | + "weekday" | "weekdays" | "e" | + "isoWeekday" | "isoWeekdays" | "E"; + } + + interface MomentInputObject { + years?: number; + year?: number; + y?: number; + + months?: number; + month?: number; + M?: number; + + days?: number; + day?: number; + d?: number; + + dates?: number; + date?: number; + D?: number; + + hours?: number; + hour?: number; + h?: number; + + minutes?: number; + minute?: number; + m?: number; + + seconds?: number; + second?: number; + s?: number; + + milliseconds?: number; + millisecond?: number; + ms?: number; + } + + interface DurationInputObject extends MomentInputObject { + quarters?: number; + quarter?: number; + Q?: number; + + weeks?: number; + week?: number; + w?: number; + } + + interface MomentSetObject extends MomentInputObject { + weekYears?: number; + weekYear?: number; + gg?: number; + + isoWeekYears?: number; + isoWeekYear?: number; + GG?: number; + + quarters?: number; + quarter?: number; + Q?: number; + + weeks?: number; + week?: number; + w?: number; + + isoWeeks?: number; + isoWeek?: number; + W?: number; + + dayOfYears?: number; + dayOfYear?: number; + DDD?: number; + + weekdays?: number; + weekday?: number; + e?: number; + + isoWeekdays?: number; + isoWeekday?: number; + E?: number; + } + + interface FromTo { + from: MomentInput; + to: MomentInput; + } + + type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined + type DurationInputArg1 = Duration | number | string | FromTo | DurationInputObject | void; // null | undefined + type DurationInputArg2 = unitOfTime.DurationConstructor; + type LocaleSpecifier = string | Moment | Duration | string[] | boolean; + + interface MomentCreationData { + input: MomentInput; + format?: MomentFormatSpecification; + locale: Locale; + isUTC: boolean; + strict?: boolean; + } + + interface Moment extends Object{ + format(format?: string): string; + + startOf(unitOfTime: unitOfTime.StartOf): Moment; + endOf(unitOfTime: unitOfTime.StartOf): Moment; + + add(amount?: DurationInputArg1, unit?: DurationInputArg2): Moment; + /** + * @deprecated reverse syntax + */ + add(unit: unitOfTime.DurationConstructor, amount: number|string): Moment; + + subtract(amount?: DurationInputArg1, unit?: DurationInputArg2): Moment; + /** + * @deprecated reverse syntax + */ + subtract(unit: unitOfTime.DurationConstructor, amount: number|string): Moment; + + calendar(time?: MomentInput, formats?: CalendarSpec): string; + + clone(): Moment; + + /** + * @return Unix timestamp in milliseconds + */ + valueOf(): number; + + // current date/time in local mode + local(keepLocalTime?: boolean): Moment; + isLocal(): boolean; + + // current date/time in UTC mode + utc(keepLocalTime?: boolean): Moment; + isUTC(): boolean; + /** + * @deprecated use isUTC + */ + isUtc(): boolean; + + parseZone(): Moment; + isValid(): boolean; + invalidAt(): number; + + hasAlignedHourOffset(other?: MomentInput): boolean; + + creationData(): MomentCreationData; + parsingFlags(): MomentParsingFlags; + + year(y: number): Moment; + year(): number; + /** + * @deprecated use year(y) + */ + years(y: number): Moment; + /** + * @deprecated use year() + */ + years(): number; + quarter(): number; + quarter(q: number): Moment; + quarters(): number; + quarters(q: number): Moment; + month(M: number|string): Moment; + month(): number; + /** + * @deprecated use month(M) + */ + months(M: number|string): Moment; + /** + * @deprecated use month() + */ + months(): number; + day(d: number|string): Moment; + day(): number; + days(d: number|string): Moment; + days(): number; + date(d: number): Moment; + date(): number; + /** + * @deprecated use date(d) + */ + dates(d: number): Moment; + /** + * @deprecated use date() + */ + dates(): number; + hour(h: number): Moment; + hour(): number; + hours(h: number): Moment; + hours(): number; + minute(m: number): Moment; + minute(): number; + minutes(m: number): Moment; + minutes(): number; + second(s: number): Moment; + second(): number; + seconds(s: number): Moment; + seconds(): number; + millisecond(ms: number): Moment; + millisecond(): number; + milliseconds(ms: number): Moment; + milliseconds(): number; + weekday(): number; + weekday(d: number): Moment; + isoWeekday(): number; + isoWeekday(d: number|string): Moment; + weekYear(): number; + weekYear(d: number): Moment; + isoWeekYear(): number; + isoWeekYear(d: number): Moment; + week(): number; + week(d: number): Moment; + weeks(): number; + weeks(d: number): Moment; + isoWeek(): number; + isoWeek(d: number): Moment; + isoWeeks(): number; + isoWeeks(d: number): Moment; + weeksInYear(): number; + isoWeeksInYear(): number; + dayOfYear(): number; + dayOfYear(d: number): Moment; + + from(inp: MomentInput, suffix?: boolean): string; + to(inp: MomentInput, suffix?: boolean): string; + fromNow(withoutSuffix?: boolean): string; + toNow(withoutPrefix?: boolean): string; + + diff(b: MomentInput, unitOfTime?: unitOfTime.Diff, precise?: boolean): number; + + toArray(): number[]; + toDate(): Date; + toISOString(): string; + inspect(): string; + toJSON(): string; + unix(): number; + + isLeapYear(): boolean; + /** + * @deprecated in favor of utcOffset + */ + zone(): number; + zone(b: number|string): Moment; + utcOffset(): number; + utcOffset(b: number|string, keepLocalTime?: boolean): Moment; + isUtcOffset(): boolean; + daysInMonth(): number; + isDST(): boolean; + + zoneAbbr(): string; + zoneName(): string; + + isBefore(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean; + isAfter(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean; + isSame(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean; + isSameOrAfter(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean; + isSameOrBefore(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean; + isBetween(a: MomentInput, b: MomentInput, granularity?: unitOfTime.StartOf, inclusivity?: "()" | "[)" | "(]" | "[]"): boolean; + + /** + * @deprecated as of 2.8.0, use locale + */ + lang(language: LocaleSpecifier): Moment; + /** + * @deprecated as of 2.8.0, use locale + */ + lang(): Locale; + + locale(): string; + locale(locale: LocaleSpecifier): Moment; + + localeData(): Locale; + + /** + * @deprecated no reliable implementation + */ + isDSTShifted(): boolean; + + // NOTE(constructor): Same as moment constructor + /** + * @deprecated as of 2.7.0, use moment.min/max + */ + max(inp?: MomentInput, format?: MomentFormatSpecification, strict?: boolean): Moment; + /** + * @deprecated as of 2.7.0, use moment.min/max + */ + max(inp?: MomentInput, format?: MomentFormatSpecification, language?: string, strict?: boolean): Moment; + + // NOTE(constructor): Same as moment constructor + /** + * @deprecated as of 2.7.0, use moment.min/max + */ + min(inp?: MomentInput, format?: MomentFormatSpecification, strict?: boolean): Moment; + /** + * @deprecated as of 2.7.0, use moment.min/max + */ + min(inp?: MomentInput, format?: MomentFormatSpecification, language?: string, strict?: boolean): Moment; + + get(unit: unitOfTime.All): number; + set(unit: unitOfTime.All, value: number): Moment; + set(objectLiteral: MomentSetObject): Moment; + + toObject(): MomentObjectOutput; + } + + export var version: string; + export var fn: Moment; + + // NOTE(constructor): Same as moment constructor + export function utc(inp?: MomentInput, format?: MomentFormatSpecification, strict?: boolean): Moment; + export function utc(inp?: MomentInput, format?: MomentFormatSpecification, language?: string, strict?: boolean): Moment; + + export function unix(timestamp: number): Moment; + + export function invalid(flags?: MomentParsingFlagsOpt): Moment; + export function isMoment(m: any): m is Moment; + export function isDate(m: any): m is Date; + export function isDuration(d: any): d is Duration; + + /** + * @deprecated in 2.8.0 + */ + export function lang(language?: string): string; + /** + * @deprecated in 2.8.0 + */ + export function lang(language?: string, definition?: Locale): string; + + export function locale(language?: string): string; + export function locale(language?: string[]): string; + export function locale(language?: string, definition?: LocaleSpecification | void): string; // null | undefined + + export function localeData(key?: string | string[]): Locale; + + export function duration(inp?: DurationInputArg1, unit?: DurationInputArg2): Duration; + + // NOTE(constructor): Same as moment constructor + export function parseZone(inp?: MomentInput, format?: MomentFormatSpecification, strict?: boolean): Moment; + export function parseZone(inp?: MomentInput, format?: MomentFormatSpecification, language?: string, strict?: boolean): Moment; + + export function months(): string[]; + export function months(index: number): string; + export function months(format: string): string[]; + export function months(format: string, index: number): string; + export function monthsShort(): string[]; + export function monthsShort(index: number): string; + export function monthsShort(format: string): string[]; + export function monthsShort(format: string, index: number): string; + + export function weekdays(): string[]; + export function weekdays(index: number): string; + export function weekdays(format: string): string[]; + export function weekdays(format: string, index: number): string; + export function weekdays(localeSorted: boolean): string[]; + export function weekdays(localeSorted: boolean, index: number): string; + export function weekdays(localeSorted: boolean, format: string): string[]; + export function weekdays(localeSorted: boolean, format: string, index: number): string; + export function weekdaysShort(): string[]; + export function weekdaysShort(index: number): string; + export function weekdaysShort(format: string): string[]; + export function weekdaysShort(format: string, index: number): string; + export function weekdaysShort(localeSorted: boolean): string[]; + export function weekdaysShort(localeSorted: boolean, index: number): string; + export function weekdaysShort(localeSorted: boolean, format: string): string[]; + export function weekdaysShort(localeSorted: boolean, format: string, index: number): string; + export function weekdaysMin(): string[]; + export function weekdaysMin(index: number): string; + export function weekdaysMin(format: string): string[]; + export function weekdaysMin(format: string, index: number): string; + export function weekdaysMin(localeSorted: boolean): string[]; + export function weekdaysMin(localeSorted: boolean, index: number): string; + export function weekdaysMin(localeSorted: boolean, format: string): string[]; + export function weekdaysMin(localeSorted: boolean, format: string, index: number): string; + + export function min(...moments: MomentInput[]): Moment; + export function max(...moments: MomentInput[]): Moment; + + /** + * Returns unix time in milliseconds. Overwrite for profit. + */ + export function now(): number; + + export function defineLocale(language: string, localeSpec: LocaleSpecification | void): Locale; // null + export function updateLocale(language: string, localeSpec: LocaleSpecification | void): Locale; // null + + export function locales(): string[]; + + export function normalizeUnits(unit: unitOfTime.All): string; + export function relativeTimeThreshold(threshold: string): number | boolean; + export function relativeTimeThreshold(threshold: string, limit: number): boolean; + export function relativeTimeRounding(fn: (num: number) => number): boolean; + export function relativeTimeRounding(): (num: number) => number; + export function calendarFormat(m: Moment, now: Moment): string; + + /** + * Constant used to enable explicit ISO_8601 format parsing. + */ + export var ISO_8601: MomentBuiltinFormat; + + export var defaultFormat: string; + export var defaultFormatUtc: string; +} + +export = moment; diff --git a/node_modules/moment/moment.js b/node_modules/moment/moment.js new file mode 100644 index 0000000..a9947fb --- /dev/null +++ b/node_modules/moment/moment.js @@ -0,0 +1,4463 @@ +//! moment.js +//! version : 2.18.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, (function () { 'use strict'; + +var hookCallback; + +function hooks () { + return hookCallback.apply(null, arguments); +} + +// This is done to register the method called with moment() +// without creating circular dependencies. +function setHookCallback (callback) { + hookCallback = callback; +} + +function isArray(input) { + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; +} + +function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return input != null && Object.prototype.toString.call(input) === '[object Object]'; +} + +function isObjectEmpty(obj) { + var k; + for (k in obj) { + // even if its not own property I'd still call it non-empty + return false; + } + return true; +} + +function isUndefined(input) { + return input === void 0; +} + +function isNumber(input) { + return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; +} + +function isDate(input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; +} + +function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; +} + +function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); +} + +function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; +} + +function createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); +} + +function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false, + parsedDateParts : [], + meridiem : null, + rfc2822 : false, + weekdayMismatch : false + }; +} + +function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; +} + +var some; +if (Array.prototype.some) { + some = Array.prototype.some; +} else { + some = function (fun) { + var t = Object(this); + var len = t.length >>> 0; + + for (var i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; +} + +var some$1 = some; + +function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m); + var parsedParts = some$1.call(flags.parsedDateParts, function (i) { + return i != null; + }); + var isNowValid = !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } + else { + return isNowValid; + } + } + return m._isValid; +} + +function createInvalid (flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } + else { + getParsingFlags(m).userInvalidated = true; + } + + return m; +} + +// Plugins that add properties should also add the key here (null value), +// so we can properly clone ourselves. +var momentProperties = hooks.momentProperties = []; + +function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; +} + +var updateInProgress = false; + +// Moment prototype object +function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } +} + +function isMoment (obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); +} + +function absFloor (number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } +} + +function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; +} + +// compare two arrays, return the number of differences +function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; +} + +function warn(msg) { + if (hooks.suppressDeprecationWarnings === false && + (typeof console !== 'undefined') && console.warn) { + console.warn('Deprecation warning: ' + msg); + } +} + +function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = []; + var arg; + for (var i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (var key in arguments[0]) { + arg += key + ': ' + arguments[0][key] + ', '; + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); +} + +var deprecations = {}; + +function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } +} + +hooks.suppressDeprecationWarnings = false; +hooks.deprecationHandler = null; + +function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; +} + +function set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + (/\d{1,2}/).source); +} + +function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if (hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop])) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; +} + +function Locale(config) { + if (config != null) { + this.set(config); + } +} + +var keys; + +if (Object.keys) { + keys = Object.keys; +} else { + keys = function (obj) { + var i, res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; +} + +var keys$1 = keys; + +var defaultCalendar = { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' +}; + +function calendar (key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; +} + +var defaultLongDateFormat = { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' +}; + +function longDateFormat (key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + + return this._longDateFormat[key]; +} + +var defaultInvalidDate = 'Invalid date'; + +function invalidDate () { + return this._invalidDate; +} + +var defaultOrdinal = '%d'; +var defaultDayOfMonthOrdinalParse = /\d{1,2}/; + +function ordinal (number) { + return this._ordinal.replace('%d', number); +} + +var defaultRelativeTime = { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + ss : '%d seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' +}; + +function relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (isFunction(output)) ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); +} + +function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); +} + +var aliases = {}; + +function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; +} + +function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; +} + +function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; +} + +var priorities = {}; + +function addUnitPriority(unit, priority) { + priorities[unit] = priority; +} + +function getPrioritizedUnits(unitsObj) { + var units = []; + for (var u in unitsObj) { + units.push({unit: u, priority: priorities[u]}); + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; +} + +function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; +} + +function get (mom, unit) { + return mom.isValid() ? + mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; +} + +function set$1 (mom, unit, value) { + if (mom.isValid()) { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } +} + +// MOMENTS + +function stringGet (units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; +} + + +function stringSet (units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units); + for (var i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; +} + +function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; +} + +var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; + +var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + +var formatFunctions = {}; + +var formatTokenFunctions = {}; + +// token: 'M' +// padded: ['MM', 2] +// ordinal: 'Mo' +// callback: function () { this.month() + 1 } +function addFormatToken (token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; + } +} + +function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); +} + +function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) ? array[i].call(mom, format) : array[i]; + } + return output; + }; +} + +// format date using native date object +function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); +} + +function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; +} + +var match1 = /\d/; // 0 - 9 +var match2 = /\d\d/; // 00 - 99 +var match3 = /\d{3}/; // 000 - 999 +var match4 = /\d{4}/; // 0000 - 9999 +var match6 = /[+-]?\d{6}/; // -999999 - 999999 +var match1to2 = /\d\d?/; // 0 - 99 +var match3to4 = /\d\d\d\d?/; // 999 - 9999 +var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 +var match1to3 = /\d{1,3}/; // 0 - 999 +var match1to4 = /\d{1,4}/; // 0 - 9999 +var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + +var matchUnsigned = /\d+/; // 0 - inf +var matchSigned = /[+-]?\d+/; // -inf - inf + +var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z +var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z + +var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + +// any word (or two) characters or numbers including two/three word month in arabic. +// includes scottish gaelic two word and hyphenated months +var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + + +var regexes = {}; + +function addRegexToken (token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; +} + +function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); +} + +// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript +function unescapeFormat(s) { + return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + })); +} + +function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} + +var tokens = {}; + +function addParseToken (token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } +} + +function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); +} + +function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } +} + +var YEAR = 0; +var MONTH = 1; +var DATE = 2; +var HOUR = 3; +var MINUTE = 4; +var SECOND = 5; +var MILLISECOND = 6; +var WEEK = 7; +var WEEKDAY = 8; + +var indexOf; + +if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; +} else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; +} + +var indexOf$1 = indexOf; + +function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); +} + +// FORMATTING + +addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; +}); + +addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); +}); + +addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); +}); + +// ALIASES + +addUnitAlias('month', 'M'); + +// PRIORITY + +addUnitPriority('month', 8); + +// PARSING + +addRegexToken('M', match1to2); +addRegexToken('MM', match1to2, match2); +addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); +}); +addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); +}); + +addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; +}); + +addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } +}); + +// LOCALES + +var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; +var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); +function localeMonths (m, format) { + if (!m) { + return isArray(this._months) ? this._months : + this._months['standalone']; + } + return isArray(this._months) ? this._months[m.month()] : + this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; +} + +var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); +function localeMonthsShort (m, format) { + if (!m) { + return isArray(this._monthsShort) ? this._monthsShort : + this._monthsShort['standalone']; + } + return isArray(this._monthsShort) ? this._monthsShort[m.month()] : + this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; +} + +function handleStrictParse(monthName, format, strict) { + var i, ii, mom, llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf$1.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf$1.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +function localeMonthsParse (monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } +} + +// MOMENTS + +function setMonth (mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; +} + +function getSetMonth (value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } +} + +function getDaysInMonth () { + return daysInMonth(this.year(), this.month()); +} + +var defaultMonthsShortRegex = matchWord; +function monthsShortRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict ? + this._monthsShortStrictRegex : this._monthsShortRegex; + } +} + +var defaultMonthsRegex = matchWord; +function monthsRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict ? + this._monthsStrictRegex : this._monthsRegex; + } +} + +function computeMonthsParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], longPieces = [], mixedPieces = [], + i, mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); +} + +// FORMATTING + +addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? '' + y : '+' + y; +}); + +addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; +}); + +addFormatToken(0, ['YYYY', 4], 0, 'year'); +addFormatToken(0, ['YYYYY', 5], 0, 'year'); +addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + +// ALIASES + +addUnitAlias('year', 'y'); + +// PRIORITIES + +addUnitPriority('year', 1); + +// PARSING + +addRegexToken('Y', matchSigned); +addRegexToken('YY', match1to2, match2); +addRegexToken('YYYY', match1to4, match4); +addRegexToken('YYYYY', match1to6, match6); +addRegexToken('YYYYYY', match1to6, match6); + +addParseToken(['YYYYY', 'YYYYYY'], YEAR); +addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); +}); +addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); +}); +addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); +}); + +// HELPERS + +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} + +function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; +} + +// HOOKS + +hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); +}; + +// MOMENTS + +var getSetYear = makeGetSet('FullYear', true); + +function getIsLeapYear () { + return isLeapYear(this.year()); +} + +function createDate (y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date = new Date(y, m, d, h, M, s, ms); + + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { + date.setFullYear(y); + } + return date; +} + +function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)); + + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + return date; +} + +// start-of-first-week - start-of-year +function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; +} + +// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday +function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear + }; +} + +function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear + }; +} + +function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; +} + +// FORMATTING + +addFormatToken('w', ['ww', 2], 'wo', 'week'); +addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + +// ALIASES + +addUnitAlias('week', 'w'); +addUnitAlias('isoWeek', 'W'); + +// PRIORITIES + +addUnitPriority('week', 5); +addUnitPriority('isoWeek', 5); + +// PARSING + +addRegexToken('w', match1to2); +addRegexToken('ww', match1to2, match2); +addRegexToken('W', match1to2); +addRegexToken('WW', match1to2, match2); + +addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); +}); + +// HELPERS + +// LOCALES + +function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; +} + +var defaultLocaleWeek = { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. +}; + +function localeFirstDayOfWeek () { + return this._week.dow; +} + +function localeFirstDayOfYear () { + return this._week.doy; +} + +// MOMENTS + +function getSetWeek (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +// FORMATTING + +addFormatToken('d', 0, 'do', 'day'); + +addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); +}); + +addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); +}); + +addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); +}); + +addFormatToken('e', 0, 0, 'weekday'); +addFormatToken('E', 0, 0, 'isoWeekday'); + +// ALIASES + +addUnitAlias('day', 'd'); +addUnitAlias('weekday', 'e'); +addUnitAlias('isoWeekday', 'E'); + +// PRIORITY +addUnitPriority('day', 11); +addUnitPriority('weekday', 11); +addUnitPriority('isoWeekday', 11); + +// PARSING + +addRegexToken('d', match1to2); +addRegexToken('e', match1to2); +addRegexToken('E', match1to2); +addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); +}); +addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); +}); +addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); +}); + +addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } +}); + +addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); +}); + +// HELPERS + +function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; +} + +function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; +} + +// LOCALES + +var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); +function localeWeekdays (m, format) { + if (!m) { + return isArray(this._weekdays) ? this._weekdays : + this._weekdays['standalone']; + } + return isArray(this._weekdays) ? this._weekdays[m.day()] : + this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; +} + +var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); +function localeWeekdaysShort (m) { + return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; +} + +var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); +function localeWeekdaysMin (m) { + return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin; +} + +function handleStrictParse$1(weekdayName, format, strict) { + var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf$1.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +function localeWeekdaysParse (weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); + this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); + this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); + } + if (!this._weekdaysParse[i]) { + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } +} + +// MOMENTS + +function getSetDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } +} + +function getSetLocaleDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); +} + +function getSetISODayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } +} + +var defaultWeekdaysRegex = matchWord; +function weekdaysRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict ? + this._weekdaysStrictRegex : this._weekdaysRegex; + } +} + +var defaultWeekdaysShortRegex = matchWord; +function weekdaysShortRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict ? + this._weekdaysShortStrictRegex : this._weekdaysShortRegex; + } +} + +var defaultWeekdaysMinRegex = matchWord; +function weekdaysMinRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict ? + this._weekdaysMinStrictRegex : this._weekdaysMinRegex; + } +} + + +function computeWeekdaysParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], + i, mom, minp, shortp, longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = this.weekdaysMin(mom, ''); + shortp = this.weekdaysShort(mom, ''); + longp = this.weekdays(mom, ''); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 7; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); + this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); +} + +// FORMATTING + +function hFormat() { + return this.hours() % 12 || 12; +} + +function kFormat() { + return this.hours() || 24; +} + +addFormatToken('H', ['HH', 2], 0, 'hour'); +addFormatToken('h', ['hh', 2], 0, hFormat); +addFormatToken('k', ['kk', 2], 0, kFormat); + +addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); +}); + +addFormatToken('hmmss', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); +}); + +addFormatToken('Hmmss', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); +} + +meridiem('a', true); +meridiem('A', false); + +// ALIASES + +addUnitAlias('hour', 'h'); + +// PRIORITY +addUnitPriority('hour', 13); + +// PARSING + +function matchMeridiem (isStrict, locale) { + return locale._meridiemParse; +} + +addRegexToken('a', matchMeridiem); +addRegexToken('A', matchMeridiem); +addRegexToken('H', match1to2); +addRegexToken('h', match1to2); +addRegexToken('k', match1to2); +addRegexToken('HH', match1to2, match2); +addRegexToken('hh', match1to2, match2); +addRegexToken('kk', match1to2, match2); + +addRegexToken('hmm', match3to4); +addRegexToken('hmmss', match5to6); +addRegexToken('Hmm', match3to4); +addRegexToken('Hmmss', match5to6); + +addParseToken(['H', 'HH'], HOUR); +addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; +}); +addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; +}); +addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); +}); +addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); +}); + +// LOCALES + +function localeIsPM (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); +} + +var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; +function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } +} + + +// MOMENTS + +// Setting the hour should keep the time, because the user explicitly +// specified which hour he wants. So trying to maintain the same hour (in +// a new timezone) makes sense. Adding/subtracting hours does not follow +// this rule. +var getSetHour = makeGetSet('Hours', true); + +// months +// week +// weekdays +// meridiem +var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse +}; + +// internal storage for locale config files +var locales = {}; +var localeFamilies = {}; +var globalLocale; + +function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; +} + +// pick the locale from the array +// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each +// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root +function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; +} + +function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && (typeof module !== 'undefined') && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; +} + +// This function will load locale and then set the global locale. If +// no arguments are passed in, it will simply return the current global +// locale key. +function getSetGlobalLocale (key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } + else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; +} + +function defineLocale (name, config) { + if (config !== null) { + var parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple('defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config + }); + return null; + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } +} + +function updateLocale(name, config) { + if (config != null) { + var locale, parentConfig = baseConfig; + // MERGE + if (locales[name] != null) { + parentConfig = locales[name]._config; + } + config = mergeConfigs(parentConfig, config); + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; +} + +// returns locale data +function getLocale (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); +} + +function listLocales() { + return keys$1(locales); +} + +function checkOverflow (m) { + var overflow; + var a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; +} + +// iso 8601 regex +// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) +var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; +var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; + +var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; + +var isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + // YYYYMM is NOT allowed by the standard + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/] +]; + +// iso time formats and regexes +var isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/] +]; + +var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + +// date from iso format +function configFromISO(config) { + var i, l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, dateFormat, timeFormat, tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } +} + +// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 +var basicRfcRegex = /^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/; + +// date and time from ref 2822 format +function configFromRFC2822(config) { + var string, match, dayFormat, + dateFormat, timeFormat, tzFormat; + var timezones = { + ' GMT': ' +0000', + ' EDT': ' -0400', + ' EST': ' -0500', + ' CDT': ' -0500', + ' CST': ' -0600', + ' MDT': ' -0600', + ' MST': ' -0700', + ' PDT': ' -0700', + ' PST': ' -0800' + }; + var military = 'YXWVUTSRQPONZABCDEFGHIKLM'; + var timezone, timezoneIndex; + + string = config._i + .replace(/\([^\)]*\)|[\n\t]/g, ' ') // Remove comments and folding whitespace + .replace(/(\s\s+)/g, ' ') // Replace multiple-spaces with a single space + .replace(/^\s|\s$/g, ''); // Remove leading and trailing spaces + match = basicRfcRegex.exec(string); + + if (match) { + dayFormat = match[1] ? 'ddd' + ((match[1].length === 5) ? ', ' : ' ') : ''; + dateFormat = 'D MMM ' + ((match[2].length > 10) ? 'YYYY ' : 'YY '); + timeFormat = 'HH:mm' + (match[4] ? ':ss' : ''); + + // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check. + if (match[1]) { // day of week given + var momentDate = new Date(match[2]); + var momentDay = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()]; + + if (match[1].substr(0,3) !== momentDay) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return; + } + } + + switch (match[5].length) { + case 2: // military + if (timezoneIndex === 0) { + timezone = ' +0000'; + } else { + timezoneIndex = military.indexOf(match[5][1].toUpperCase()) - 12; + timezone = ((timezoneIndex < 0) ? ' -' : ' +') + + (('' + timezoneIndex).replace(/^-?/, '0')).match(/..$/)[0] + '00'; + } + break; + case 4: // Zone + timezone = timezones[match[5]]; + break; + default: // UT or +/-9999 + timezone = timezones[' GMT']; + } + match[5] = timezone; + config._i = match.splice(1).join(''); + tzFormat = ' ZZ'; + config._f = dayFormat + dateFormat + timeFormat + tzFormat; + configFromStringAndFormat(config); + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } +} + +// date from iso format or fallback +function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); +} + +hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } +); + +// Pick the first defined of two or three arguments. +function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; +} + +function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; +} + +// convert an array to a date. +// the array should mirror the parameters below +// note: all values past the year are optional and will default to the lowest possible value. +// [year, month, day , hour, minute, second, millisecond] +function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } +} + +function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + var curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to begining of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } +} + +// constant that refers to the ISO standard +hooks.ISO_8601 = function () {}; + +// constant that refers to the RFC 2822 form +hooks.RFC_2822 = function () {}; + +// date from string and format string +function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + // console.log('token', token, 'parsedInput', parsedInput, + // 'regex', getParseRegexForToken(token, config)); + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } + else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + + configFromArray(config); + checkOverflow(config); +} + + +function meridiemFixWrap (locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } +} + +// date from string and array of format strings +function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (!isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); +} + +function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i); + config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { + return obj && parseInt(obj, 10); + }); + + configFromArray(config); +} + +function createFromConfig (config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; +} + +function prepareConfig (config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; +} + +function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } +} + +function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {}; + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ((isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0)) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); +} + +function createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); +} + +var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } +); + +var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } +); + +// Pick a moment m from moments so that m[fn](other) is true for all +// other. This relies on the function fn to be transitive. +// +// moments should either be an array of moment objects or an array, whose +// first element is an array of moment objects. +function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; +} + +// TODO: Use [].sort instead? +function min () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); +} + +function max () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); +} + +var now = function () { + return Date.now ? Date.now() : +(new Date()); +}; + +var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; + +function isDurationValid(m) { + for (var key in m) { + if (!(ordering.indexOf(key) !== -1 && (m[key] == null || !isNaN(m[key])))) { + return false; + } + } + + var unitHasDecimal = false; + for (var i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; +} + +function isValid$1() { + return this._isValid; +} + +function createInvalid$1() { + return createDuration(NaN); +} + +function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); +} + +function isDuration (obj) { + return obj instanceof Duration; +} + +function absRound (number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } +} + +// FORMATTING + +function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); +} + +offset('Z', ':'); +offset('ZZ', ''); + +// PARSING + +addRegexToken('Z', matchShortOffset); +addRegexToken('ZZ', matchShortOffset); +addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); +}); + +// HELPERS + +// timezone chunker +// '+10:00' > ['10', '00'] +// '-1530' > ['-15', '30'] +var chunkOffset = /([\+\-]|\d\d)/gi; + +function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher); + + if (matches === null) { + return null; + } + + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? + 0 : + parts[0] === '+' ? minutes : -minutes; +} + +// Return a moment from input, that is local/utc/zone equivalent to model. +function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } +} + +function getDateOffset (m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; +} + +// HOOKS + +// This function will be called whenever a moment is mutated. +// It is intended to keep the offset in sync with the timezone. +hooks.updateOffset = function () {}; + +// MOMENTS + +// keepLocalTime = true means only change the timezone, without +// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> +// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset +// +0200, so we adjust the time as needed, to be valid. +// +// Keeping the time actually adds/subtracts (one hour) +// from the actual represented time. That is why we call updateOffset +// a second time. In case it wants us to change the offset again +// _changeInProgress == true case, then we have to adjust, because +// there is no such time in the given timezone. +function getSetOffset (input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract(this, createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } +} + +function getSetZone (input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } +} + +function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime); +} + +function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; +} + +function setOffsetToParsedOffset () { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } + else { + this.utcOffset(0, true); + } + } + return this; +} + +function hasAlignedHourOffset (input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; +} + +function isDaylightSavingTime () { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); +} + +function isDaylightSavingTimeShifted () { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + var other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = this.isValid() && + compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; +} + +function isLocal () { + return this.isValid() ? !this._isUTC : false; +} + +function isUtcOffset () { + return this.isValid() ? this._isUTC : false; +} + +function isUtc () { + return this.isValid() ? this._isUTC && this._offset === 0 : false; +} + +// ASP.NET json date format regex +var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; + +// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html +// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere +// and further modified to allow for strings containing both week and day +var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; + +function createDuration (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms : input._milliseconds, + d : input._days, + M : input._months + }; + } else if (isNumber(input)) { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : 0, + d : toInt(match[DATE]) * sign, + h : toInt(match[HOUR]) * sign, + m : toInt(match[MINUTE]) * sign, + s : toInt(match[SECOND]) * sign, + ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match + }; + } else if (!!(match = isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : parseIso(match[2], sign), + M : parseIso(match[3], sign), + w : parseIso(match[4], sign), + d : parseIso(match[5], sign), + h : parseIso(match[6], sign), + m : parseIso(match[7], sign), + s : parseIso(match[8], sign) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; +} + +createDuration.fn = Duration.prototype; +createDuration.invalid = createInvalid$1; + +function parseIso (inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; +} + +function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; +} + +function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return {milliseconds: 0, months: 0}; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; +} + +// TODO: remove 'name' arg after deprecation is removed +function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; +} + +function addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } +} + +var add = createAdder(1, 'add'); +var subtract = createAdder(-1, 'subtract'); + +function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; +} + +function calendar$1 (time, formats) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse'; + + var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); + + return this.format(output || this.localeData().calendar(format, this, createLocal(now))); +} + +function clone () { + return new Moment(this); +} + +function isAfter (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } +} + +function isBefore (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } +} + +function isBetween (from, to, units, inclusivity) { + inclusivity = inclusivity || '()'; + return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && + (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); +} + +function isSame (input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); + } +} + +function isSameOrAfter (input, units) { + return this.isSame(input, units) || this.isAfter(input,units); +} + +function isSameOrBefore (input, units) { + return this.isSame(input, units) || this.isBefore(input,units); +} + +function diff (input, units, asFloat) { + var that, + zoneDelta, + delta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; + } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; + } + return asFloat ? output : absFloor(output); +} + +function monthDiff (a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; +} + +hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; +hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + +function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); +} + +function toISOString() { + if (!this.isValid()) { + return null; + } + var m = this.clone().utc(); + if (m.year() < 0 || m.year() > 9999) { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); +} + +/** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ +function inspect () { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment'; + var zone = ''; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + var prefix = '[' + func + '("]'; + var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; + var datetime = '-MM-DD[T]HH:mm:ss.SSS'; + var suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); +} + +function format (inputString) { + if (!inputString) { + inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); +} + +function from (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +function fromNow (withoutSuffix) { + return this.from(createLocal(), withoutSuffix); +} + +function to (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +function toNow (withoutSuffix) { + return this.to(createLocal(), withoutSuffix); +} + +// If passed a locale key, it will set the locale for this +// instance. Otherwise, it will return the locale configuration +// variables for this instance. +function locale (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } +} + +var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } +); + +function localeData () { + return this._locale; +} + +function startOf (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + case 'date': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; +} + +function endOf (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + + // 'date' is an alias for 'day', so it should be considered as such. + if (units === 'date') { + units = 'day'; + } + + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); +} + +function valueOf () { + return this._d.valueOf() - ((this._offset || 0) * 60000); +} + +function unix () { + return Math.floor(this.valueOf() / 1000); +} + +function toDate () { + return new Date(this.valueOf()); +} + +function toArray () { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; +} + +function toObject () { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds() + }; +} + +function toJSON () { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; +} + +function isValid$2 () { + return isValid(this); +} + +function parsingFlags () { + return extend({}, getParsingFlags(this)); +} + +function invalidAt () { + return getParsingFlags(this).overflow; +} + +function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict + }; +} + +// FORMATTING + +addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; +}); + +addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; +}); + +function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter); +} + +addWeekYearFormatToken('gggg', 'weekYear'); +addWeekYearFormatToken('ggggg', 'weekYear'); +addWeekYearFormatToken('GGGG', 'isoWeekYear'); +addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + +// ALIASES + +addUnitAlias('weekYear', 'gg'); +addUnitAlias('isoWeekYear', 'GG'); + +// PRIORITY + +addUnitPriority('weekYear', 1); +addUnitPriority('isoWeekYear', 1); + + +// PARSING + +addRegexToken('G', matchSigned); +addRegexToken('g', matchSigned); +addRegexToken('GG', match1to2, match2); +addRegexToken('gg', match1to2, match2); +addRegexToken('GGGG', match1to4, match4); +addRegexToken('gggg', match1to4, match4); +addRegexToken('GGGGG', match1to6, match6); +addRegexToken('ggggg', match1to6, match6); + +addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); +}); + +addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); +}); + +// MOMENTS + +function getSetWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy); +} + +function getSetISOWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, this.isoWeek(), this.isoWeekday(), 1, 4); +} + +function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4); +} + +function getWeeksInYear () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); +} + +function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } +} + +function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; +} + +// FORMATTING + +addFormatToken('Q', 0, 'Qo', 'quarter'); + +// ALIASES + +addUnitAlias('quarter', 'Q'); + +// PRIORITY + +addUnitPriority('quarter', 7); + +// PARSING + +addRegexToken('Q', match1); +addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; +}); + +// MOMENTS + +function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); +} + +// FORMATTING + +addFormatToken('D', ['DD', 2], 'Do', 'date'); + +// ALIASES + +addUnitAlias('date', 'D'); + +// PRIOROITY +addUnitPriority('date', 9); + +// PARSING + +addRegexToken('D', match1to2); +addRegexToken('DD', match1to2, match2); +addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict ? + (locale._dayOfMonthOrdinalParse || locale._ordinalParse) : + locale._dayOfMonthOrdinalParseLenient; +}); + +addParseToken(['D', 'DD'], DATE); +addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); +}); + +// MOMENTS + +var getSetDayOfMonth = makeGetSet('Date', true); + +// FORMATTING + +addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + +// ALIASES + +addUnitAlias('dayOfYear', 'DDD'); + +// PRIORITY +addUnitPriority('dayOfYear', 4); + +// PARSING + +addRegexToken('DDD', match1to3); +addRegexToken('DDDD', match3); +addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); +}); + +// HELPERS + +// MOMENTS + +function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); +} + +// FORMATTING + +addFormatToken('m', ['mm', 2], 0, 'minute'); + +// ALIASES + +addUnitAlias('minute', 'm'); + +// PRIORITY + +addUnitPriority('minute', 14); + +// PARSING + +addRegexToken('m', match1to2); +addRegexToken('mm', match1to2, match2); +addParseToken(['m', 'mm'], MINUTE); + +// MOMENTS + +var getSetMinute = makeGetSet('Minutes', false); + +// FORMATTING + +addFormatToken('s', ['ss', 2], 0, 'second'); + +// ALIASES + +addUnitAlias('second', 's'); + +// PRIORITY + +addUnitPriority('second', 15); + +// PARSING + +addRegexToken('s', match1to2); +addRegexToken('ss', match1to2, match2); +addParseToken(['s', 'ss'], SECOND); + +// MOMENTS + +var getSetSecond = makeGetSet('Seconds', false); + +// FORMATTING + +addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); +}); + +addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); +}); + +addFormatToken(0, ['SSS', 3], 0, 'millisecond'); +addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; +}); +addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; +}); +addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; +}); +addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; +}); +addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; +}); +addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; +}); + + +// ALIASES + +addUnitAlias('millisecond', 'ms'); + +// PRIORITY + +addUnitPriority('millisecond', 16); + +// PARSING + +addRegexToken('S', match1to3, match1); +addRegexToken('SS', match1to3, match2); +addRegexToken('SSS', match1to3, match3); + +var token; +for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); +} + +function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); +} + +for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); +} +// MOMENTS + +var getSetMillisecond = makeGetSet('Milliseconds', false); + +// FORMATTING + +addFormatToken('z', 0, 0, 'zoneAbbr'); +addFormatToken('zz', 0, 0, 'zoneName'); + +// MOMENTS + +function getZoneAbbr () { + return this._isUTC ? 'UTC' : ''; +} + +function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : ''; +} + +var proto = Moment.prototype; + +proto.add = add; +proto.calendar = calendar$1; +proto.clone = clone; +proto.diff = diff; +proto.endOf = endOf; +proto.format = format; +proto.from = from; +proto.fromNow = fromNow; +proto.to = to; +proto.toNow = toNow; +proto.get = stringGet; +proto.invalidAt = invalidAt; +proto.isAfter = isAfter; +proto.isBefore = isBefore; +proto.isBetween = isBetween; +proto.isSame = isSame; +proto.isSameOrAfter = isSameOrAfter; +proto.isSameOrBefore = isSameOrBefore; +proto.isValid = isValid$2; +proto.lang = lang; +proto.locale = locale; +proto.localeData = localeData; +proto.max = prototypeMax; +proto.min = prototypeMin; +proto.parsingFlags = parsingFlags; +proto.set = stringSet; +proto.startOf = startOf; +proto.subtract = subtract; +proto.toArray = toArray; +proto.toObject = toObject; +proto.toDate = toDate; +proto.toISOString = toISOString; +proto.inspect = inspect; +proto.toJSON = toJSON; +proto.toString = toString; +proto.unix = unix; +proto.valueOf = valueOf; +proto.creationData = creationData; + +// Year +proto.year = getSetYear; +proto.isLeapYear = getIsLeapYear; + +// Week Year +proto.weekYear = getSetWeekYear; +proto.isoWeekYear = getSetISOWeekYear; + +// Quarter +proto.quarter = proto.quarters = getSetQuarter; + +// Month +proto.month = getSetMonth; +proto.daysInMonth = getDaysInMonth; + +// Week +proto.week = proto.weeks = getSetWeek; +proto.isoWeek = proto.isoWeeks = getSetISOWeek; +proto.weeksInYear = getWeeksInYear; +proto.isoWeeksInYear = getISOWeeksInYear; + +// Day +proto.date = getSetDayOfMonth; +proto.day = proto.days = getSetDayOfWeek; +proto.weekday = getSetLocaleDayOfWeek; +proto.isoWeekday = getSetISODayOfWeek; +proto.dayOfYear = getSetDayOfYear; + +// Hour +proto.hour = proto.hours = getSetHour; + +// Minute +proto.minute = proto.minutes = getSetMinute; + +// Second +proto.second = proto.seconds = getSetSecond; + +// Millisecond +proto.millisecond = proto.milliseconds = getSetMillisecond; + +// Offset +proto.utcOffset = getSetOffset; +proto.utc = setOffsetToUTC; +proto.local = setOffsetToLocal; +proto.parseZone = setOffsetToParsedOffset; +proto.hasAlignedHourOffset = hasAlignedHourOffset; +proto.isDST = isDaylightSavingTime; +proto.isLocal = isLocal; +proto.isUtcOffset = isUtcOffset; +proto.isUtc = isUtc; +proto.isUTC = isUtc; + +// Timezone +proto.zoneAbbr = getZoneAbbr; +proto.zoneName = getZoneName; + +// Deprecations +proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); +proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); +proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); +proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); +proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); + +function createUnix (input) { + return createLocal(input * 1000); +} + +function createInZone () { + return createLocal.apply(null, arguments).parseZone(); +} + +function preParsePostFormat (string) { + return string; +} + +var proto$1 = Locale.prototype; + +proto$1.calendar = calendar; +proto$1.longDateFormat = longDateFormat; +proto$1.invalidDate = invalidDate; +proto$1.ordinal = ordinal; +proto$1.preparse = preParsePostFormat; +proto$1.postformat = preParsePostFormat; +proto$1.relativeTime = relativeTime; +proto$1.pastFuture = pastFuture; +proto$1.set = set; + +// Month +proto$1.months = localeMonths; +proto$1.monthsShort = localeMonthsShort; +proto$1.monthsParse = localeMonthsParse; +proto$1.monthsRegex = monthsRegex; +proto$1.monthsShortRegex = monthsShortRegex; + +// Week +proto$1.week = localeWeek; +proto$1.firstDayOfYear = localeFirstDayOfYear; +proto$1.firstDayOfWeek = localeFirstDayOfWeek; + +// Day of Week +proto$1.weekdays = localeWeekdays; +proto$1.weekdaysMin = localeWeekdaysMin; +proto$1.weekdaysShort = localeWeekdaysShort; +proto$1.weekdaysParse = localeWeekdaysParse; + +proto$1.weekdaysRegex = weekdaysRegex; +proto$1.weekdaysShortRegex = weekdaysShortRegex; +proto$1.weekdaysMinRegex = weekdaysMinRegex; + +// Hours +proto$1.isPM = localeIsPM; +proto$1.meridiem = localeMeridiem; + +function get$1 (format, index, field, setter) { + var locale = getLocale(); + var utc = createUTC().set(setter, index); + return locale[field](utc, format); +} + +function listMonthsImpl (format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i; + var out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; +} + +// () +// (5) +// (fmt, 5) +// (fmt) +// (true) +// (true, 5) +// (true, fmt, 5) +// (true, fmt) +function listWeekdaysImpl (localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + var i; + var out = []; + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; +} + +function listMonths (format, index) { + return listMonthsImpl(format, index, 'months'); +} + +function listMonthsShort (format, index) { + return listMonthsImpl(format, index, 'monthsShort'); +} + +function listWeekdays (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); +} + +function listWeekdaysShort (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); +} + +function listWeekdaysMin (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); +} + +getSetGlobalLocale('en', { + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); + +// Side effect imports +hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale); +hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale); + +var mathAbs = Math.abs; + +function abs () { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; +} + +function addSubtract$1 (duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); +} + +// supports only 2.0-style add(1, 's') or add(duration) +function add$1 (input, value) { + return addSubtract$1(this, input, value, 1); +} + +// supports only 2.0-style subtract(1, 's') or subtract(duration) +function subtract$1 (input, value) { + return addSubtract$1(this, input, value, -1); +} + +function absCeil (number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } +} + +function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; +} + +function daysToMonths (days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; +} + +function monthsToDays (months) { + // the reverse of daysToMonths + return months * 146097 / 4800; +} + +function as (units) { + if (!this.isValid()) { + return NaN; + } + var days; + var months; + var milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 1440 + milliseconds / 6e4; + case 'second' : return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } +} + +// TODO: Use this.as('ms')? +function valueOf$1 () { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); +} + +function makeAs (alias) { + return function () { + return this.as(alias); + }; +} + +var asMilliseconds = makeAs('ms'); +var asSeconds = makeAs('s'); +var asMinutes = makeAs('m'); +var asHours = makeAs('h'); +var asDays = makeAs('d'); +var asWeeks = makeAs('w'); +var asMonths = makeAs('M'); +var asYears = makeAs('y'); + +function get$2 (units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; +} + +function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; +} + +var milliseconds = makeGetter('milliseconds'); +var seconds = makeGetter('seconds'); +var minutes = makeGetter('minutes'); +var hours = makeGetter('hours'); +var days = makeGetter('days'); +var months = makeGetter('months'); +var years = makeGetter('years'); + +function weeks () { + return absFloor(this.days() / 7); +} + +var round = Math.round; +var thresholds = { + ss: 44, // a few seconds to seconds + s : 45, // seconds to minute + m : 45, // minutes to hour + h : 22, // hours to day + d : 26, // days to month + M : 11 // months to year +}; + +// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize +function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); +} + +function relativeTime$1 (posNegDuration, withoutSuffix, locale) { + var duration = createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds <= thresholds.ss && ['s', seconds] || + seconds < thresholds.s && ['ss', seconds] || + minutes <= 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours <= 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days <= 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months <= 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years <= 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); +} + +// This function allows you to set the rounding function for relative time strings +function getSetRelativeTimeRounding (roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof(roundingFunction) === 'function') { + round = roundingFunction; + return true; + } + return false; +} + +// This function allows you to set a threshold for relative time strings +function getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; +} + +function humanize (withSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var locale = this.localeData(); + var output = relativeTime$1(this, !withSuffix, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); +} + +var abs$1 = Math.abs; + +function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs$1(this._milliseconds) / 1000; + var days = abs$1(this._days); + var months = abs$1(this._months); + var minutes, hours, years; + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); +} + +var proto$2 = Duration.prototype; + +proto$2.isValid = isValid$1; +proto$2.abs = abs; +proto$2.add = add$1; +proto$2.subtract = subtract$1; +proto$2.as = as; +proto$2.asMilliseconds = asMilliseconds; +proto$2.asSeconds = asSeconds; +proto$2.asMinutes = asMinutes; +proto$2.asHours = asHours; +proto$2.asDays = asDays; +proto$2.asWeeks = asWeeks; +proto$2.asMonths = asMonths; +proto$2.asYears = asYears; +proto$2.valueOf = valueOf$1; +proto$2._bubble = bubble; +proto$2.get = get$2; +proto$2.milliseconds = milliseconds; +proto$2.seconds = seconds; +proto$2.minutes = minutes; +proto$2.hours = hours; +proto$2.days = days; +proto$2.weeks = weeks; +proto$2.months = months; +proto$2.years = years; +proto$2.humanize = humanize; +proto$2.toISOString = toISOString$1; +proto$2.toString = toISOString$1; +proto$2.toJSON = toISOString$1; +proto$2.locale = locale; +proto$2.localeData = localeData; + +// Deprecations +proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1); +proto$2.lang = lang; + +// Side effect imports + +// FORMATTING + +addFormatToken('X', 0, 0, 'unix'); +addFormatToken('x', 0, 0, 'valueOf'); + +// PARSING + +addRegexToken('x', matchSigned); +addRegexToken('X', matchTimestamp); +addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); +}); +addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); +}); + +// Side effect imports + + +hooks.version = '2.18.1'; + +setHookCallback(createLocal); + +hooks.fn = proto; +hooks.min = min; +hooks.max = max; +hooks.now = now; +hooks.utc = createUTC; +hooks.unix = createUnix; +hooks.months = listMonths; +hooks.isDate = isDate; +hooks.locale = getSetGlobalLocale; +hooks.invalid = createInvalid; +hooks.duration = createDuration; +hooks.isMoment = isMoment; +hooks.weekdays = listWeekdays; +hooks.parseZone = createInZone; +hooks.localeData = getLocale; +hooks.isDuration = isDuration; +hooks.monthsShort = listMonthsShort; +hooks.weekdaysMin = listWeekdaysMin; +hooks.defineLocale = defineLocale; +hooks.updateLocale = updateLocale; +hooks.locales = listLocales; +hooks.weekdaysShort = listWeekdaysShort; +hooks.normalizeUnits = normalizeUnits; +hooks.relativeTimeRounding = getSetRelativeTimeRounding; +hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; +hooks.calendarFormat = getCalendarFormat; +hooks.prototype = proto; + +return hooks; + +}))); diff --git a/node_modules/moment/package.js b/node_modules/moment/package.js new file mode 100644 index 0000000..aba8d50 --- /dev/null +++ b/node_modules/moment/package.js @@ -0,0 +1,11 @@ +var profile = { + resourceTags: { + ignore: function(filename, mid){ + // only include moment/moment + return mid != "moment/moment"; + }, + amd: function(filename, mid){ + return /\.js$/.test(filename); + } + } +}; diff --git a/node_modules/moment/package.json b/node_modules/moment/package.json new file mode 100644 index 0000000..0204694 --- /dev/null +++ b/node_modules/moment/package.json @@ -0,0 +1,194 @@ +{ + "_args": [ + [ + { + "raw": "moment@>= 2.6.0", + "scope": null, + "escapedName": "moment", + "name": "moment", + "rawSpec": ">= 2.6.0", + "spec": ">=2.6.0", + "type": "range" + }, + "/home/burchettm/modbot/node_modules/moment-timezone" + ] + ], + "_from": "moment@>=2.6.0", + "_id": "moment@2.18.1", + "_inCache": true, + "_location": "/moment", + "_nodeVersion": "6.7.0", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/moment-2.18.1.tgz_1490137132553_0.33630239870399237" + }, + "_npmUser": { + "name": "ichernev", + "email": "iskren.chernev@gmail.com" + }, + "_npmVersion": "3.10.3", + "_phantomChildren": {}, + "_requested": { + "raw": "moment@>= 2.6.0", + "scope": null, + "escapedName": "moment", + "name": "moment", + "rawSpec": ">= 2.6.0", + "spec": ">=2.6.0", + "type": "range" + }, + "_requiredBy": [ + "/moment-timezone" + ], + "_resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "_shasum": "c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f", + "_shrinkwrap": null, + "_spec": "moment@>= 2.6.0", + "_where": "/home/burchettm/modbot/node_modules/moment-timezone", + "author": { + "name": "Iskren Ivov Chernev", + "email": "iskren.chernev@gmail.com", + "url": "https://github.com/ichernev" + }, + "bugs": { + "url": "https://github.com/moment/moment/issues" + }, + "contributors": [ + { + "name": "Tim Wood", + "email": "washwithcare@gmail.com", + "url": "http://timwoodcreates.com/" + }, + { + "name": "Rocky Meza", + "url": "http://rockymeza.com" + }, + { + "name": "Matt Johnson", + "email": "mj1856@hotmail.com", + "url": "http://codeofmatt.com" + }, + { + "name": "Isaac Cambron", + "email": "isaac@isaaccambron.com", + "url": "http://isaaccambron.com" + }, + { + "name": "Andre Polykanine", + "email": "andre@oire.org", + "url": "https://github.com/oire" + } + ], + "dependencies": {}, + "description": "Parse, validate, manipulate, and display dates", + "devDependencies": { + "benchmark": "latest", + "coveralls": "^2.11.2", + "es6-promise": "latest", + "grunt": "~0.4", + "grunt-benchmark": "latest", + "grunt-cli": "latest", + "grunt-contrib-clean": "latest", + "grunt-contrib-concat": "latest", + "grunt-contrib-copy": "latest", + "grunt-contrib-jshint": "latest", + "grunt-contrib-uglify": "latest", + "grunt-contrib-watch": "latest", + "grunt-env": "latest", + "grunt-exec": "latest", + "grunt-jscs": "latest", + "grunt-karma": "latest", + "grunt-nuget": "latest", + "grunt-string-replace": "latest", + "karma": "latest", + "karma-chrome-launcher": "latest", + "karma-firefox-launcher": "latest", + "karma-qunit": "latest", + "karma-sauce-launcher": "latest", + "load-grunt-tasks": "latest", + "nyc": "^2.1.4", + "qunit": "^0.7.5", + "qunit-cli": "^0.1.4", + "rollup": "latest", + "spacejam": "latest", + "typescript": "^1.8.10", + "uglify-js": "latest" + }, + "directories": {}, + "dist": { + "shasum": "c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f", + "tarball": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz" + }, + "dojoBuild": "package.js", + "ender": "./ender.js", + "engines": { + "node": "*" + }, + "homepage": "http://momentjs.com", + "jsnext:main": "./src/moment.js", + "jspm": { + "files": [ + "moment.js", + "moment.d.ts", + "locale" + ], + "map": { + "moment": "./moment" + }, + "buildConfig": { + "uglify": true + } + }, + "keywords": [ + "moment", + "date", + "time", + "parse", + "format", + "validate", + "i18n", + "l10n", + "ender" + ], + "license": "MIT", + "main": "./moment.js", + "maintainers": [ + { + "name": "ichernev", + "email": "iskren.chernev@gmail.com" + }, + { + "name": "maggiepint", + "email": "maggiepint@gmail.com" + }, + { + "name": "mj1856", + "email": "mj1856@hotmail.com" + }, + { + "name": "timrwood", + "email": "washwithcare@gmail.com" + } + ], + "name": "moment", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/moment/moment.git" + }, + "scripts": { + "coverage": "nyc npm test && nyc report", + "coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls", + "test": "grunt test", + "typescript-test": "tsc --project typing-tests" + }, + "spm": { + "main": "moment.js", + "output": [ + "locale/*.js" + ] + }, + "typings": "./moment.d.ts", + "version": "2.18.1" +} diff --git a/node_modules/moment/src/lib/create/check-overflow.js b/node_modules/moment/src/lib/create/check-overflow.js new file mode 100644 index 0000000..41b539f --- /dev/null +++ b/node_modules/moment/src/lib/create/check-overflow.js @@ -0,0 +1,34 @@ +import { daysInMonth } from '../units/month'; +import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND, WEEK, WEEKDAY } from '../units/constants'; +import getParsingFlags from '../create/parsing-flags'; + +export default function checkOverflow (m) { + var overflow; + var a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; +} + diff --git a/node_modules/moment/src/lib/create/date-from-array.js b/node_modules/moment/src/lib/create/date-from-array.js new file mode 100644 index 0000000..59b57b0 --- /dev/null +++ b/node_modules/moment/src/lib/create/date-from-array.js @@ -0,0 +1,21 @@ +export function createDate (y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date = new Date(y, m, d, h, M, s, ms); + + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { + date.setFullYear(y); + } + return date; +} + +export function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)); + + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + return date; +} diff --git a/node_modules/moment/src/lib/create/from-anything.js b/node_modules/moment/src/lib/create/from-anything.js new file mode 100644 index 0000000..e692679 --- /dev/null +++ b/node_modules/moment/src/lib/create/from-anything.js @@ -0,0 +1,110 @@ +import isArray from '../utils/is-array'; +import isObject from '../utils/is-object'; +import isObjectEmpty from '../utils/is-object-empty'; +import isUndefined from '../utils/is-undefined'; +import isNumber from '../utils/is-number'; +import isDate from '../utils/is-date'; +import map from '../utils/map'; +import { createInvalid } from './valid'; +import { Moment, isMoment } from '../moment/constructor'; +import { getLocale } from '../locale/locales'; +import { hooks } from '../utils/hooks'; +import checkOverflow from './check-overflow'; +import { isValid } from './valid'; + +import { configFromStringAndArray } from './from-string-and-array'; +import { configFromStringAndFormat } from './from-string-and-format'; +import { configFromString } from './from-string'; +import { configFromArray } from './from-array'; +import { configFromObject } from './from-object'; + +function createFromConfig (config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; +} + +export function prepareConfig (config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; +} + +function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } +} + +export function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {}; + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ((isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0)) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); +} diff --git a/node_modules/moment/src/lib/create/from-array.js b/node_modules/moment/src/lib/create/from-array.js new file mode 100644 index 0000000..0cdf474 --- /dev/null +++ b/node_modules/moment/src/lib/create/from-array.js @@ -0,0 +1,140 @@ +import { hooks } from '../utils/hooks'; +import { createDate, createUTCDate } from './date-from-array'; +import { daysInYear } from '../units/year'; +import { weekOfYear, weeksInYear, dayOfYearFromWeeks } from '../units/week-calendar-utils'; +import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND } from '../units/constants'; +import { createLocal } from './local'; +import defaults from '../utils/defaults'; +import getParsingFlags from './parsing-flags'; + +function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; +} + +// convert an array to a date. +// the array should mirror the parameters below +// note: all values past the year are optional and will default to the lowest possible value. +// [year, month, day , hour, minute, second, millisecond] +export function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } +} + +function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + var curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to begining of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } +} diff --git a/node_modules/moment/src/lib/create/from-object.js b/node_modules/moment/src/lib/create/from-object.js new file mode 100644 index 0000000..c0bfe9f --- /dev/null +++ b/node_modules/moment/src/lib/create/from-object.js @@ -0,0 +1,16 @@ +import { normalizeObjectUnits } from '../units/aliases'; +import { configFromArray } from './from-array'; +import map from '../utils/map'; + +export function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i); + config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { + return obj && parseInt(obj, 10); + }); + + configFromArray(config); +} diff --git a/node_modules/moment/src/lib/create/from-string-and-array.js b/node_modules/moment/src/lib/create/from-string-and-array.js new file mode 100644 index 0000000..1d8a7a8 --- /dev/null +++ b/node_modules/moment/src/lib/create/from-string-and-array.js @@ -0,0 +1,50 @@ +import { copyConfig } from '../moment/constructor'; +import { configFromStringAndFormat } from './from-string-and-format'; +import getParsingFlags from './parsing-flags'; +import { isValid } from './valid'; +import extend from '../utils/extend'; + +// date from string and array of format strings +export function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (!isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); +} diff --git a/node_modules/moment/src/lib/create/from-string-and-format.js b/node_modules/moment/src/lib/create/from-string-and-format.js new file mode 100644 index 0000000..ed921d5 --- /dev/null +++ b/node_modules/moment/src/lib/create/from-string-and-format.js @@ -0,0 +1,113 @@ +import { configFromISO, configFromRFC2822 } from './from-string'; +import { configFromArray } from './from-array'; +import { getParseRegexForToken } from '../parse/regex'; +import { addTimeToArrayFromToken } from '../parse/token'; +import { expandFormat, formatTokenFunctions, formattingTokens } from '../format/format'; +import checkOverflow from './check-overflow'; +import { HOUR } from '../units/constants'; +import { hooks } from '../utils/hooks'; +import getParsingFlags from './parsing-flags'; + +// constant that refers to the ISO standard +hooks.ISO_8601 = function () {}; + +// constant that refers to the RFC 2822 form +hooks.RFC_2822 = function () {}; + +// date from string and format string +export function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + // console.log('token', token, 'parsedInput', parsedInput, + // 'regex', getParseRegexForToken(token, config)); + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } + else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + + configFromArray(config); + checkOverflow(config); +} + + +function meridiemFixWrap (locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } +} diff --git a/node_modules/moment/src/lib/create/from-string.js b/node_modules/moment/src/lib/create/from-string.js new file mode 100644 index 0000000..7cae76d --- /dev/null +++ b/node_modules/moment/src/lib/create/from-string.js @@ -0,0 +1,202 @@ +import { configFromStringAndFormat } from './from-string-and-format'; +import { hooks } from '../utils/hooks'; +import { deprecate } from '../utils/deprecate'; +import getParsingFlags from './parsing-flags'; + +// iso 8601 regex +// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) +var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; +var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; + +var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; + +var isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + // YYYYMM is NOT allowed by the standard + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/] +]; + +// iso time formats and regexes +var isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/] +]; + +var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + +// date from iso format +export function configFromISO(config) { + var i, l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, dateFormat, timeFormat, tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } +} + +// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 +var basicRfcRegex = /^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/; + +// date and time from ref 2822 format +export function configFromRFC2822(config) { + var string, match, dayFormat, + dateFormat, timeFormat, tzFormat; + var timezones = { + ' GMT': ' +0000', + ' EDT': ' -0400', + ' EST': ' -0500', + ' CDT': ' -0500', + ' CST': ' -0600', + ' MDT': ' -0600', + ' MST': ' -0700', + ' PDT': ' -0700', + ' PST': ' -0800' + }; + var military = 'YXWVUTSRQPONZABCDEFGHIKLM'; + var timezone, timezoneIndex; + + string = config._i + .replace(/\([^\)]*\)|[\n\t]/g, ' ') // Remove comments and folding whitespace + .replace(/(\s\s+)/g, ' ') // Replace multiple-spaces with a single space + .replace(/^\s|\s$/g, ''); // Remove leading and trailing spaces + match = basicRfcRegex.exec(string); + + if (match) { + dayFormat = match[1] ? 'ddd' + ((match[1].length === 5) ? ', ' : ' ') : ''; + dateFormat = 'D MMM ' + ((match[2].length > 10) ? 'YYYY ' : 'YY '); + timeFormat = 'HH:mm' + (match[4] ? ':ss' : ''); + + // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check. + if (match[1]) { // day of week given + var momentDate = new Date(match[2]); + var momentDay = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()]; + + if (match[1].substr(0,3) !== momentDay) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return; + } + } + + switch (match[5].length) { + case 2: // military + if (timezoneIndex === 0) { + timezone = ' +0000'; + } else { + timezoneIndex = military.indexOf(match[5][1].toUpperCase()) - 12; + timezone = ((timezoneIndex < 0) ? ' -' : ' +') + + (('' + timezoneIndex).replace(/^-?/, '0')).match(/..$/)[0] + '00'; + } + break; + case 4: // Zone + timezone = timezones[match[5]]; + break; + default: // UT or +/-9999 + timezone = timezones[' GMT']; + } + match[5] = timezone; + config._i = match.splice(1).join(''); + tzFormat = ' ZZ'; + config._f = dayFormat + dateFormat + timeFormat + tzFormat; + configFromStringAndFormat(config); + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } +} + +// date from iso format or fallback +export function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); +} + +hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } +); diff --git a/node_modules/moment/src/lib/create/local.js b/node_modules/moment/src/lib/create/local.js new file mode 100644 index 0000000..88c1e26 --- /dev/null +++ b/node_modules/moment/src/lib/create/local.js @@ -0,0 +1,5 @@ +import { createLocalOrUTC } from './from-anything'; + +export function createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); +} diff --git a/node_modules/moment/src/lib/create/parsing-flags.js b/node_modules/moment/src/lib/create/parsing-flags.js new file mode 100644 index 0000000..c47173f --- /dev/null +++ b/node_modules/moment/src/lib/create/parsing-flags.js @@ -0,0 +1,26 @@ +function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false, + parsedDateParts : [], + meridiem : null, + rfc2822 : false, + weekdayMismatch : false + }; +} + +export default function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; +} diff --git a/node_modules/moment/src/lib/create/utc.js b/node_modules/moment/src/lib/create/utc.js new file mode 100644 index 0000000..9613953 --- /dev/null +++ b/node_modules/moment/src/lib/create/utc.js @@ -0,0 +1,5 @@ +import { createLocalOrUTC } from './from-anything'; + +export function createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); +} diff --git a/node_modules/moment/src/lib/create/valid.js b/node_modules/moment/src/lib/create/valid.js new file mode 100644 index 0000000..96b1cf6 --- /dev/null +++ b/node_modules/moment/src/lib/create/valid.js @@ -0,0 +1,49 @@ +import extend from '../utils/extend'; +import { createUTC } from './utc'; +import getParsingFlags from '../create/parsing-flags'; +import some from '../utils/some'; + +export function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m); + var parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }); + var isNowValid = !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } + else { + return isNowValid; + } + } + return m._isValid; +} + +export function createInvalid (flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } + else { + getParsingFlags(m).userInvalidated = true; + } + + return m; +} diff --git a/node_modules/moment/src/lib/duration/abs.js b/node_modules/moment/src/lib/duration/abs.js new file mode 100644 index 0000000..103a4cf --- /dev/null +++ b/node_modules/moment/src/lib/duration/abs.js @@ -0,0 +1,18 @@ +var mathAbs = Math.abs; + +export function abs () { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; +} diff --git a/node_modules/moment/src/lib/duration/add-subtract.js b/node_modules/moment/src/lib/duration/add-subtract.js new file mode 100644 index 0000000..3b44e18 --- /dev/null +++ b/node_modules/moment/src/lib/duration/add-subtract.js @@ -0,0 +1,21 @@ +import { createDuration } from './create'; + +function addSubtract (duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); +} + +// supports only 2.0-style add(1, 's') or add(duration) +export function add (input, value) { + return addSubtract(this, input, value, 1); +} + +// supports only 2.0-style subtract(1, 's') or subtract(duration) +export function subtract (input, value) { + return addSubtract(this, input, value, -1); +} diff --git a/node_modules/moment/src/lib/duration/as.js b/node_modules/moment/src/lib/duration/as.js new file mode 100644 index 0000000..122204a --- /dev/null +++ b/node_modules/moment/src/lib/duration/as.js @@ -0,0 +1,61 @@ +import { daysToMonths, monthsToDays } from './bubble'; +import { normalizeUnits } from '../units/aliases'; +import toInt from '../utils/to-int'; + +export function as (units) { + if (!this.isValid()) { + return NaN; + } + var days; + var months; + var milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 1440 + milliseconds / 6e4; + case 'second' : return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } +} + +// TODO: Use this.as('ms')? +export function valueOf () { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); +} + +function makeAs (alias) { + return function () { + return this.as(alias); + }; +} + +export var asMilliseconds = makeAs('ms'); +export var asSeconds = makeAs('s'); +export var asMinutes = makeAs('m'); +export var asHours = makeAs('h'); +export var asDays = makeAs('d'); +export var asWeeks = makeAs('w'); +export var asMonths = makeAs('M'); +export var asYears = makeAs('y'); diff --git a/node_modules/moment/src/lib/duration/bubble.js b/node_modules/moment/src/lib/duration/bubble.js new file mode 100644 index 0000000..0c4a336 --- /dev/null +++ b/node_modules/moment/src/lib/duration/bubble.js @@ -0,0 +1,61 @@ +import absFloor from '../utils/abs-floor'; +import absCeil from '../utils/abs-ceil'; +import { createUTCDate } from '../create/date-from-array'; + +export function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; +} + +export function daysToMonths (days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; +} + +export function monthsToDays (months) { + // the reverse of daysToMonths + return months * 146097 / 4800; +} diff --git a/node_modules/moment/src/lib/duration/constructor.js b/node_modules/moment/src/lib/duration/constructor.js new file mode 100644 index 0000000..5c97ef1 --- /dev/null +++ b/node_modules/moment/src/lib/duration/constructor.js @@ -0,0 +1,44 @@ +import { normalizeObjectUnits } from '../units/aliases'; +import { getLocale } from '../locale/locales'; +import isDurationValid from './valid.js'; + +export function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); +} + +export function isDuration (obj) { + return obj instanceof Duration; +} diff --git a/node_modules/moment/src/lib/duration/create.js b/node_modules/moment/src/lib/duration/create.js new file mode 100644 index 0000000..9b6d5a9 --- /dev/null +++ b/node_modules/moment/src/lib/duration/create.js @@ -0,0 +1,122 @@ +import { Duration, isDuration } from './constructor'; +import isNumber from '../utils/is-number'; +import toInt from '../utils/to-int'; +import absRound from '../utils/abs-round'; +import hasOwnProp from '../utils/has-own-prop'; +import { DATE, HOUR, MINUTE, SECOND, MILLISECOND } from '../units/constants'; +import { cloneWithOffset } from '../units/offset'; +import { createLocal } from '../create/local'; +import { createInvalid as invalid } from './valid'; + +// ASP.NET json date format regex +var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; + +// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html +// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere +// and further modified to allow for strings containing both week and day +var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; + +export function createDuration (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms : input._milliseconds, + d : input._days, + M : input._months + }; + } else if (isNumber(input)) { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : 0, + d : toInt(match[DATE]) * sign, + h : toInt(match[HOUR]) * sign, + m : toInt(match[MINUTE]) * sign, + s : toInt(match[SECOND]) * sign, + ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match + }; + } else if (!!(match = isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : parseIso(match[2], sign), + M : parseIso(match[3], sign), + w : parseIso(match[4], sign), + d : parseIso(match[5], sign), + h : parseIso(match[6], sign), + m : parseIso(match[7], sign), + s : parseIso(match[8], sign) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; +} + +createDuration.fn = Duration.prototype; +createDuration.invalid = invalid; + +function parseIso (inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; +} + +function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; +} + +function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return {milliseconds: 0, months: 0}; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; +} diff --git a/node_modules/moment/src/lib/duration/duration.js b/node_modules/moment/src/lib/duration/duration.js new file mode 100644 index 0000000..528b568 --- /dev/null +++ b/node_modules/moment/src/lib/duration/duration.js @@ -0,0 +1,16 @@ +// Side effect imports +import './prototype'; + +import { createDuration } from './create'; +import { isDuration } from './constructor'; +import { + getSetRelativeTimeRounding, + getSetRelativeTimeThreshold +} from './humanize'; + +export { + createDuration, + isDuration, + getSetRelativeTimeRounding, + getSetRelativeTimeThreshold +}; diff --git a/node_modules/moment/src/lib/duration/get.js b/node_modules/moment/src/lib/duration/get.js new file mode 100644 index 0000000..8993e07 --- /dev/null +++ b/node_modules/moment/src/lib/duration/get.js @@ -0,0 +1,25 @@ +import { normalizeUnits } from '../units/aliases'; +import absFloor from '../utils/abs-floor'; + +export function get (units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; +} + +function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; +} + +export var milliseconds = makeGetter('milliseconds'); +export var seconds = makeGetter('seconds'); +export var minutes = makeGetter('minutes'); +export var hours = makeGetter('hours'); +export var days = makeGetter('days'); +export var months = makeGetter('months'); +export var years = makeGetter('years'); + +export function weeks () { + return absFloor(this.days() / 7); +} diff --git a/node_modules/moment/src/lib/duration/humanize.js b/node_modules/moment/src/lib/duration/humanize.js new file mode 100644 index 0000000..454b01a --- /dev/null +++ b/node_modules/moment/src/lib/duration/humanize.js @@ -0,0 +1,85 @@ +import { createDuration } from './create'; + +var round = Math.round; +var thresholds = { + ss: 44, // a few seconds to seconds + s : 45, // seconds to minute + m : 45, // minutes to hour + h : 22, // hours to day + d : 26, // days to month + M : 11 // months to year +}; + +// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize +function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); +} + +function relativeTime (posNegDuration, withoutSuffix, locale) { + var duration = createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds <= thresholds.ss && ['s', seconds] || + seconds < thresholds.s && ['ss', seconds] || + minutes <= 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours <= 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days <= 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months <= 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years <= 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); +} + +// This function allows you to set the rounding function for relative time strings +export function getSetRelativeTimeRounding (roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof(roundingFunction) === 'function') { + round = roundingFunction; + return true; + } + return false; +} + +// This function allows you to set a threshold for relative time strings +export function getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; +} + +export function humanize (withSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var locale = this.localeData(); + var output = relativeTime(this, !withSuffix, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); +} diff --git a/node_modules/moment/src/lib/duration/iso-string.js b/node_modules/moment/src/lib/duration/iso-string.js new file mode 100644 index 0000000..7bb0228 --- /dev/null +++ b/node_modules/moment/src/lib/duration/iso-string.js @@ -0,0 +1,56 @@ +import absFloor from '../utils/abs-floor'; +var abs = Math.abs; + +export function toISOString() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs(this._milliseconds) / 1000; + var days = abs(this._days); + var months = abs(this._months); + var minutes, hours, years; + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); +} diff --git a/node_modules/moment/src/lib/duration/prototype.js b/node_modules/moment/src/lib/duration/prototype.js new file mode 100644 index 0000000..d923375 --- /dev/null +++ b/node_modules/moment/src/lib/duration/prototype.js @@ -0,0 +1,50 @@ +import { Duration } from './constructor'; + +var proto = Duration.prototype; + +import { abs } from './abs'; +import { add, subtract } from './add-subtract'; +import { as, asMilliseconds, asSeconds, asMinutes, asHours, asDays, asWeeks, asMonths, asYears, valueOf } from './as'; +import { bubble } from './bubble'; +import { get, milliseconds, seconds, minutes, hours, days, months, years, weeks } from './get'; +import { humanize } from './humanize'; +import { toISOString } from './iso-string'; +import { lang, locale, localeData } from '../moment/locale'; +import { isValid } from './valid'; + +proto.isValid = isValid; +proto.abs = abs; +proto.add = add; +proto.subtract = subtract; +proto.as = as; +proto.asMilliseconds = asMilliseconds; +proto.asSeconds = asSeconds; +proto.asMinutes = asMinutes; +proto.asHours = asHours; +proto.asDays = asDays; +proto.asWeeks = asWeeks; +proto.asMonths = asMonths; +proto.asYears = asYears; +proto.valueOf = valueOf; +proto._bubble = bubble; +proto.get = get; +proto.milliseconds = milliseconds; +proto.seconds = seconds; +proto.minutes = minutes; +proto.hours = hours; +proto.days = days; +proto.weeks = weeks; +proto.months = months; +proto.years = years; +proto.humanize = humanize; +proto.toISOString = toISOString; +proto.toString = toISOString; +proto.toJSON = toISOString; +proto.locale = locale; +proto.localeData = localeData; + +// Deprecations +import { deprecate } from '../utils/deprecate'; + +proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString); +proto.lang = lang; diff --git a/node_modules/moment/src/lib/duration/valid.js b/node_modules/moment/src/lib/duration/valid.js new file mode 100644 index 0000000..842585f --- /dev/null +++ b/node_modules/moment/src/lib/duration/valid.js @@ -0,0 +1,35 @@ +import toInt from '../utils/to-int'; +import {Duration} from './constructor'; +import {createDuration} from './create'; + +var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; + +export default function isDurationValid(m) { + for (var key in m) { + if (!(ordering.indexOf(key) !== -1 && (m[key] == null || !isNaN(m[key])))) { + return false; + } + } + + var unitHasDecimal = false; + for (var i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; +} + +export function isValid() { + return this._isValid; +} + +export function createInvalid() { + return createDuration(NaN); +} diff --git a/node_modules/moment/src/lib/format/format.js b/node_modules/moment/src/lib/format/format.js new file mode 100644 index 0000000..03f5c58 --- /dev/null +++ b/node_modules/moment/src/lib/format/format.js @@ -0,0 +1,92 @@ +import zeroFill from '../utils/zero-fill'; +import isFunction from '../utils/is-function'; + +export var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; + +var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + +var formatFunctions = {}; + +export var formatTokenFunctions = {}; + +// token: 'M' +// padded: ['MM', 2] +// ordinal: 'Mo' +// callback: function () { this.month() + 1 } +export function addFormatToken (token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; + } +} + +function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); +} + +function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) ? array[i].call(mom, format) : array[i]; + } + return output; + }; +} + +// format date using native date object +export function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); +} + +export function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; +} diff --git a/node_modules/moment/src/lib/locale/base-config.js b/node_modules/moment/src/lib/locale/base-config.js new file mode 100644 index 0000000..d7a7c66 --- /dev/null +++ b/node_modules/moment/src/lib/locale/base-config.js @@ -0,0 +1,44 @@ +import { defaultCalendar } from './calendar'; +import { defaultLongDateFormat } from './formats'; +import { defaultInvalidDate } from './invalid'; +import { defaultOrdinal, defaultDayOfMonthOrdinalParse } from './ordinal'; +import { defaultRelativeTime } from './relative'; + +// months +import { + defaultLocaleMonths, + defaultLocaleMonthsShort, +} from '../units/month'; + +// week +import { defaultLocaleWeek } from '../units/week'; + +// weekdays +import { + defaultLocaleWeekdays, + defaultLocaleWeekdaysMin, + defaultLocaleWeekdaysShort, +} from '../units/day-of-week'; + +// meridiem +import { defaultLocaleMeridiemParse } from '../units/hour'; + +export var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse +}; diff --git a/node_modules/moment/src/lib/locale/calendar.js b/node_modules/moment/src/lib/locale/calendar.js new file mode 100644 index 0000000..f12214b --- /dev/null +++ b/node_modules/moment/src/lib/locale/calendar.js @@ -0,0 +1,15 @@ +export var defaultCalendar = { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' +}; + +import isFunction from '../utils/is-function'; + +export function calendar (key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; +} diff --git a/node_modules/moment/src/lib/locale/constructor.js b/node_modules/moment/src/lib/locale/constructor.js new file mode 100644 index 0000000..c32b73e --- /dev/null +++ b/node_modules/moment/src/lib/locale/constructor.js @@ -0,0 +1,5 @@ +export function Locale(config) { + if (config != null) { + this.set(config); + } +} diff --git a/node_modules/moment/src/lib/locale/en.js b/node_modules/moment/src/lib/locale/en.js new file mode 100644 index 0000000..4a7d250 --- /dev/null +++ b/node_modules/moment/src/lib/locale/en.js @@ -0,0 +1,15 @@ +import './prototype'; +import { getSetGlobalLocale } from './locales'; +import toInt from '../utils/to-int'; + +getSetGlobalLocale('en', { + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); diff --git a/node_modules/moment/src/lib/locale/formats.js b/node_modules/moment/src/lib/locale/formats.js new file mode 100644 index 0000000..6d83b03 --- /dev/null +++ b/node_modules/moment/src/lib/locale/formats.js @@ -0,0 +1,23 @@ +export var defaultLongDateFormat = { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' +}; + +export function longDateFormat (key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + + return this._longDateFormat[key]; +} diff --git a/node_modules/moment/src/lib/locale/invalid.js b/node_modules/moment/src/lib/locale/invalid.js new file mode 100644 index 0000000..e909633 --- /dev/null +++ b/node_modules/moment/src/lib/locale/invalid.js @@ -0,0 +1,5 @@ +export var defaultInvalidDate = 'Invalid date'; + +export function invalidDate () { + return this._invalidDate; +} diff --git a/node_modules/moment/src/lib/locale/lists.js b/node_modules/moment/src/lib/locale/lists.js new file mode 100644 index 0000000..42f7572 --- /dev/null +++ b/node_modules/moment/src/lib/locale/lists.js @@ -0,0 +1,93 @@ +import isNumber from '../utils/is-number'; +import { getLocale } from './locales'; +import { createUTC } from '../create/utc'; + +function get (format, index, field, setter) { + var locale = getLocale(); + var utc = createUTC().set(setter, index); + return locale[field](utc, format); +} + +function listMonthsImpl (format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get(format, index, field, 'month'); + } + + var i; + var out = []; + for (i = 0; i < 12; i++) { + out[i] = get(format, i, field, 'month'); + } + return out; +} + +// () +// (5) +// (fmt, 5) +// (fmt) +// (true) +// (true, 5) +// (true, fmt, 5) +// (true, fmt) +function listWeekdaysImpl (localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0; + + if (index != null) { + return get(format, (index + shift) % 7, field, 'day'); + } + + var i; + var out = []; + for (i = 0; i < 7; i++) { + out[i] = get(format, (i + shift) % 7, field, 'day'); + } + return out; +} + +export function listMonths (format, index) { + return listMonthsImpl(format, index, 'months'); +} + +export function listMonthsShort (format, index) { + return listMonthsImpl(format, index, 'monthsShort'); +} + +export function listWeekdays (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); +} + +export function listWeekdaysShort (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); +} + +export function listWeekdaysMin (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); +} diff --git a/node_modules/moment/src/lib/locale/locale.js b/node_modules/moment/src/lib/locale/locale.js new file mode 100644 index 0000000..ac9cebf --- /dev/null +++ b/node_modules/moment/src/lib/locale/locale.js @@ -0,0 +1,39 @@ +// Side effect imports +import './prototype'; + +import { + getSetGlobalLocale, + defineLocale, + updateLocale, + getLocale, + listLocales +} from './locales'; + +import { + listMonths, + listMonthsShort, + listWeekdays, + listWeekdaysShort, + listWeekdaysMin +} from './lists'; + +export { + getSetGlobalLocale, + defineLocale, + updateLocale, + getLocale, + listLocales, + listMonths, + listMonthsShort, + listWeekdays, + listWeekdaysShort, + listWeekdaysMin +}; + +import { deprecate } from '../utils/deprecate'; +import { hooks } from '../utils/hooks'; + +hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale); +hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale); + +import './en'; diff --git a/node_modules/moment/src/lib/locale/locales.js b/node_modules/moment/src/lib/locale/locales.js new file mode 100644 index 0000000..99ee115 --- /dev/null +++ b/node_modules/moment/src/lib/locale/locales.js @@ -0,0 +1,186 @@ +import isArray from '../utils/is-array'; +import hasOwnProp from '../utils/has-own-prop'; +import isUndefined from '../utils/is-undefined'; +import compareArrays from '../utils/compare-arrays'; +import { deprecateSimple } from '../utils/deprecate'; +import { mergeConfigs } from './set'; +import { Locale } from './constructor'; +import keys from '../utils/keys'; + +import { baseConfig } from './base-config'; + +// internal storage for locale config files +var locales = {}; +var localeFamilies = {}; +var globalLocale; + +function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; +} + +// pick the locale from the array +// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each +// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root +function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; +} + +function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && (typeof module !== 'undefined') && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; +} + +// This function will load locale and then set the global locale. If +// no arguments are passed in, it will simply return the current global +// locale key. +export function getSetGlobalLocale (key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } + else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; +} + +export function defineLocale (name, config) { + if (config !== null) { + var parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple('defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config + }); + return null; + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } +} + +export function updateLocale(name, config) { + if (config != null) { + var locale, parentConfig = baseConfig; + // MERGE + if (locales[name] != null) { + parentConfig = locales[name]._config; + } + config = mergeConfigs(parentConfig, config); + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; +} + +// returns locale data +export function getLocale (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); +} + +export function listLocales() { + return keys(locales); +} diff --git a/node_modules/moment/src/lib/locale/ordinal.js b/node_modules/moment/src/lib/locale/ordinal.js new file mode 100644 index 0000000..e2efc05 --- /dev/null +++ b/node_modules/moment/src/lib/locale/ordinal.js @@ -0,0 +1,7 @@ +export var defaultOrdinal = '%d'; +export var defaultDayOfMonthOrdinalParse = /\d{1,2}/; + +export function ordinal (number) { + return this._ordinal.replace('%d', number); +} + diff --git a/node_modules/moment/src/lib/locale/pre-post-format.js b/node_modules/moment/src/lib/locale/pre-post-format.js new file mode 100644 index 0000000..10ed205 --- /dev/null +++ b/node_modules/moment/src/lib/locale/pre-post-format.js @@ -0,0 +1,3 @@ +export function preParsePostFormat (string) { + return string; +} diff --git a/node_modules/moment/src/lib/locale/prototype.js b/node_modules/moment/src/lib/locale/prototype.js new file mode 100644 index 0000000..24eef89 --- /dev/null +++ b/node_modules/moment/src/lib/locale/prototype.js @@ -0,0 +1,69 @@ +import { Locale } from './constructor'; + +var proto = Locale.prototype; + +import { calendar } from './calendar'; +import { longDateFormat } from './formats'; +import { invalidDate } from './invalid'; +import { ordinal } from './ordinal'; +import { preParsePostFormat } from './pre-post-format'; +import { relativeTime, pastFuture } from './relative'; +import { set } from './set'; + +proto.calendar = calendar; +proto.longDateFormat = longDateFormat; +proto.invalidDate = invalidDate; +proto.ordinal = ordinal; +proto.preparse = preParsePostFormat; +proto.postformat = preParsePostFormat; +proto.relativeTime = relativeTime; +proto.pastFuture = pastFuture; +proto.set = set; + +// Month +import { + localeMonthsParse, + localeMonths, + localeMonthsShort, + monthsRegex, + monthsShortRegex +} from '../units/month'; + +proto.months = localeMonths; +proto.monthsShort = localeMonthsShort; +proto.monthsParse = localeMonthsParse; +proto.monthsRegex = monthsRegex; +proto.monthsShortRegex = monthsShortRegex; + +// Week +import { localeWeek, localeFirstDayOfYear, localeFirstDayOfWeek } from '../units/week'; +proto.week = localeWeek; +proto.firstDayOfYear = localeFirstDayOfYear; +proto.firstDayOfWeek = localeFirstDayOfWeek; + +// Day of Week +import { + localeWeekdaysParse, + localeWeekdays, + localeWeekdaysMin, + localeWeekdaysShort, + + weekdaysRegex, + weekdaysShortRegex, + weekdaysMinRegex +} from '../units/day-of-week'; + +proto.weekdays = localeWeekdays; +proto.weekdaysMin = localeWeekdaysMin; +proto.weekdaysShort = localeWeekdaysShort; +proto.weekdaysParse = localeWeekdaysParse; + +proto.weekdaysRegex = weekdaysRegex; +proto.weekdaysShortRegex = weekdaysShortRegex; +proto.weekdaysMinRegex = weekdaysMinRegex; + +// Hours +import { localeIsPM, localeMeridiem } from '../units/hour'; + +proto.isPM = localeIsPM; +proto.meridiem = localeMeridiem; diff --git a/node_modules/moment/src/lib/locale/relative.js b/node_modules/moment/src/lib/locale/relative.js new file mode 100644 index 0000000..431466b --- /dev/null +++ b/node_modules/moment/src/lib/locale/relative.js @@ -0,0 +1,30 @@ +export var defaultRelativeTime = { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + ss : '%d seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' +}; + +import isFunction from '../utils/is-function'; + +export function relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (isFunction(output)) ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); +} + +export function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); +} diff --git a/node_modules/moment/src/lib/locale/set.js b/node_modules/moment/src/lib/locale/set.js new file mode 100644 index 0000000..c63d5ad --- /dev/null +++ b/node_modules/moment/src/lib/locale/set.js @@ -0,0 +1,49 @@ +import isFunction from '../utils/is-function'; +import extend from '../utils/extend'; +import isObject from '../utils/is-object'; +import hasOwnProp from '../utils/has-own-prop'; + +export function set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + (/\d{1,2}/).source); +} + +export function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if (hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop])) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; +} diff --git a/node_modules/moment/src/lib/moment/add-subtract.js b/node_modules/moment/src/lib/moment/add-subtract.js new file mode 100644 index 0000000..b9e86a6 --- /dev/null +++ b/node_modules/moment/src/lib/moment/add-subtract.js @@ -0,0 +1,55 @@ +import { get, set } from './get-set'; +import { setMonth } from '../units/month'; +import { createDuration } from '../duration/create'; +import { deprecateSimple } from '../utils/deprecate'; +import { hooks } from '../utils/hooks'; +import absRound from '../utils/abs-round'; + + +// TODO: remove 'name' arg after deprecation is removed +function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; +} + +export function addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (days) { + set(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } +} + +export var add = createAdder(1, 'add'); +export var subtract = createAdder(-1, 'subtract'); + diff --git a/node_modules/moment/src/lib/moment/calendar.js b/node_modules/moment/src/lib/moment/calendar.js new file mode 100644 index 0000000..4b5725c --- /dev/null +++ b/node_modules/moment/src/lib/moment/calendar.js @@ -0,0 +1,26 @@ +import { createLocal } from '../create/local'; +import { cloneWithOffset } from '../units/offset'; +import isFunction from '../utils/is-function'; +import { hooks } from '../utils/hooks'; + +export function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; +} + +export function calendar (time, formats) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse'; + + var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); + + return this.format(output || this.localeData().calendar(format, this, createLocal(now))); +} diff --git a/node_modules/moment/src/lib/moment/clone.js b/node_modules/moment/src/lib/moment/clone.js new file mode 100644 index 0000000..d96b328 --- /dev/null +++ b/node_modules/moment/src/lib/moment/clone.js @@ -0,0 +1,5 @@ +import { Moment } from './constructor'; + +export function clone () { + return new Moment(this); +} diff --git a/node_modules/moment/src/lib/moment/compare.js b/node_modules/moment/src/lib/moment/compare.js new file mode 100644 index 0000000..b26bac6 --- /dev/null +++ b/node_modules/moment/src/lib/moment/compare.js @@ -0,0 +1,59 @@ +import { isMoment } from './constructor'; +import { normalizeUnits } from '../units/aliases'; +import { createLocal } from '../create/local'; +import isUndefined from '../utils/is-undefined'; + +export function isAfter (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } +} + +export function isBefore (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } +} + +export function isBetween (from, to, units, inclusivity) { + inclusivity = inclusivity || '()'; + return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && + (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); +} + +export function isSame (input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); + } +} + +export function isSameOrAfter (input, units) { + return this.isSame(input, units) || this.isAfter(input,units); +} + +export function isSameOrBefore (input, units) { + return this.isSame(input, units) || this.isBefore(input,units); +} diff --git a/node_modules/moment/src/lib/moment/constructor.js b/node_modules/moment/src/lib/moment/constructor.js new file mode 100644 index 0000000..bc53f81 --- /dev/null +++ b/node_modules/moment/src/lib/moment/constructor.js @@ -0,0 +1,77 @@ +import { hooks } from '../utils/hooks'; +import hasOwnProp from '../utils/has-own-prop'; +import isUndefined from '../utils/is-undefined'; +import getParsingFlags from '../create/parsing-flags'; + +// Plugins that add properties should also add the key here (null value), +// so we can properly clone ourselves. +var momentProperties = hooks.momentProperties = []; + +export function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; +} + +var updateInProgress = false; + +// Moment prototype object +export function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } +} + +export function isMoment (obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); +} diff --git a/node_modules/moment/src/lib/moment/creation-data.js b/node_modules/moment/src/lib/moment/creation-data.js new file mode 100644 index 0000000..7e2d69a --- /dev/null +++ b/node_modules/moment/src/lib/moment/creation-data.js @@ -0,0 +1,9 @@ +export function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict + }; +} diff --git a/node_modules/moment/src/lib/moment/diff.js b/node_modules/moment/src/lib/moment/diff.js new file mode 100644 index 0000000..9f43908 --- /dev/null +++ b/node_modules/moment/src/lib/moment/diff.js @@ -0,0 +1,62 @@ +import absFloor from '../utils/abs-floor'; +import { cloneWithOffset } from '../units/offset'; +import { normalizeUnits } from '../units/aliases'; + +export function diff (input, units, asFloat) { + var that, + zoneDelta, + delta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; + } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; + } + return asFloat ? output : absFloor(output); +} + +function monthDiff (a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; +} diff --git a/node_modules/moment/src/lib/moment/format.js b/node_modules/moment/src/lib/moment/format.js new file mode 100644 index 0000000..d95042f --- /dev/null +++ b/node_modules/moment/src/lib/moment/format.js @@ -0,0 +1,57 @@ +import { formatMoment } from '../format/format'; +import { hooks } from '../utils/hooks'; +import isFunction from '../utils/is-function'; + +hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; +hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + +export function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); +} + +export function toISOString() { + if (!this.isValid()) { + return null; + } + var m = this.clone().utc(); + if (m.year() < 0 || m.year() > 9999) { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); +} + +/** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ +export function inspect () { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment'; + var zone = ''; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + var prefix = '[' + func + '("]'; + var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; + var datetime = '-MM-DD[T]HH:mm:ss.SSS'; + var suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); +} + +export function format (inputString) { + if (!inputString) { + inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); +} diff --git a/node_modules/moment/src/lib/moment/from.js b/node_modules/moment/src/lib/moment/from.js new file mode 100644 index 0000000..4fbd03e --- /dev/null +++ b/node_modules/moment/src/lib/moment/from.js @@ -0,0 +1,17 @@ +import { createDuration } from '../duration/create'; +import { createLocal } from '../create/local'; +import { isMoment } from '../moment/constructor'; + +export function from (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +export function fromNow (withoutSuffix) { + return this.from(createLocal(), withoutSuffix); +} diff --git a/node_modules/moment/src/lib/moment/get-set.js b/node_modules/moment/src/lib/moment/get-set.js new file mode 100644 index 0000000..0d9fe5d --- /dev/null +++ b/node_modules/moment/src/lib/moment/get-set.js @@ -0,0 +1,55 @@ +import { normalizeUnits, normalizeObjectUnits } from '../units/aliases'; +import { getPrioritizedUnits } from '../units/priorities'; +import { hooks } from '../utils/hooks'; +import isFunction from '../utils/is-function'; + + +export function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + set(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; +} + +export function get (mom, unit) { + return mom.isValid() ? + mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; +} + +export function set (mom, unit, value) { + if (mom.isValid()) { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } +} + +// MOMENTS + +export function stringGet (units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; +} + + +export function stringSet (units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units); + for (var i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; +} diff --git a/node_modules/moment/src/lib/moment/locale.js b/node_modules/moment/src/lib/moment/locale.js new file mode 100644 index 0000000..fb46e65 --- /dev/null +++ b/node_modules/moment/src/lib/moment/locale.js @@ -0,0 +1,34 @@ +import { getLocale } from '../locale/locales'; +import { deprecate } from '../utils/deprecate'; + +// If passed a locale key, it will set the locale for this +// instance. Otherwise, it will return the locale configuration +// variables for this instance. +export function locale (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } +} + +export var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } +); + +export function localeData () { + return this._locale; +} diff --git a/node_modules/moment/src/lib/moment/min-max.js b/node_modules/moment/src/lib/moment/min-max.js new file mode 100644 index 0000000..d76920a --- /dev/null +++ b/node_modules/moment/src/lib/moment/min-max.js @@ -0,0 +1,63 @@ +import { deprecate } from '../utils/deprecate'; +import isArray from '../utils/is-array'; +import { createLocal } from '../create/local'; +import { createInvalid } from '../create/valid'; + +export var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } +); + +export var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } +); + +// Pick a moment m from moments so that m[fn](other) is true for all +// other. This relies on the function fn to be transitive. +// +// moments should either be an array of moment objects or an array, whose +// first element is an array of moment objects. +function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; +} + +// TODO: Use [].sort instead? +export function min () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); +} + +export function max () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); +} diff --git a/node_modules/moment/src/lib/moment/moment.js b/node_modules/moment/src/lib/moment/moment.js new file mode 100644 index 0000000..12eb5f1 --- /dev/null +++ b/node_modules/moment/src/lib/moment/moment.js @@ -0,0 +1,28 @@ +import { createLocal } from '../create/local'; +import { createUTC } from '../create/utc'; +import { createInvalid } from '../create/valid'; +import { isMoment } from './constructor'; +import { min, max } from './min-max'; +import { now } from './now'; +import momentPrototype from './prototype'; + +function createUnix (input) { + return createLocal(input * 1000); +} + +function createInZone () { + return createLocal.apply(null, arguments).parseZone(); +} + +export { + now, + min, + max, + isMoment, + createUTC, + createUnix, + createLocal, + createInZone, + createInvalid, + momentPrototype +}; diff --git a/node_modules/moment/src/lib/moment/now.js b/node_modules/moment/src/lib/moment/now.js new file mode 100644 index 0000000..0f4d0ae --- /dev/null +++ b/node_modules/moment/src/lib/moment/now.js @@ -0,0 +1,3 @@ +export var now = function () { + return Date.now ? Date.now() : +(new Date()); +}; diff --git a/node_modules/moment/src/lib/moment/prototype.js b/node_modules/moment/src/lib/moment/prototype.js new file mode 100644 index 0000000..bd8fff7 --- /dev/null +++ b/node_modules/moment/src/lib/moment/prototype.js @@ -0,0 +1,150 @@ +import { Moment } from './constructor'; + +var proto = Moment.prototype; + +import { add, subtract } from './add-subtract'; +import { calendar, getCalendarFormat } from './calendar'; +import { clone } from './clone'; +import { isBefore, isBetween, isSame, isAfter, isSameOrAfter, isSameOrBefore } from './compare'; +import { diff } from './diff'; +import { format, toString, toISOString, inspect } from './format'; +import { from, fromNow } from './from'; +import { to, toNow } from './to'; +import { stringGet, stringSet } from './get-set'; +import { locale, localeData, lang } from './locale'; +import { prototypeMin, prototypeMax } from './min-max'; +import { startOf, endOf } from './start-end-of'; +import { valueOf, toDate, toArray, toObject, toJSON, unix } from './to-type'; +import { isValid, parsingFlags, invalidAt } from './valid'; +import { creationData } from './creation-data'; + +proto.add = add; +proto.calendar = calendar; +proto.clone = clone; +proto.diff = diff; +proto.endOf = endOf; +proto.format = format; +proto.from = from; +proto.fromNow = fromNow; +proto.to = to; +proto.toNow = toNow; +proto.get = stringGet; +proto.invalidAt = invalidAt; +proto.isAfter = isAfter; +proto.isBefore = isBefore; +proto.isBetween = isBetween; +proto.isSame = isSame; +proto.isSameOrAfter = isSameOrAfter; +proto.isSameOrBefore = isSameOrBefore; +proto.isValid = isValid; +proto.lang = lang; +proto.locale = locale; +proto.localeData = localeData; +proto.max = prototypeMax; +proto.min = prototypeMin; +proto.parsingFlags = parsingFlags; +proto.set = stringSet; +proto.startOf = startOf; +proto.subtract = subtract; +proto.toArray = toArray; +proto.toObject = toObject; +proto.toDate = toDate; +proto.toISOString = toISOString; +proto.inspect = inspect; +proto.toJSON = toJSON; +proto.toString = toString; +proto.unix = unix; +proto.valueOf = valueOf; +proto.creationData = creationData; + +// Year +import { getSetYear, getIsLeapYear } from '../units/year'; +proto.year = getSetYear; +proto.isLeapYear = getIsLeapYear; + +// Week Year +import { getSetWeekYear, getSetISOWeekYear, getWeeksInYear, getISOWeeksInYear } from '../units/week-year'; +proto.weekYear = getSetWeekYear; +proto.isoWeekYear = getSetISOWeekYear; + +// Quarter +import { getSetQuarter } from '../units/quarter'; +proto.quarter = proto.quarters = getSetQuarter; + +// Month +import { getSetMonth, getDaysInMonth } from '../units/month'; +proto.month = getSetMonth; +proto.daysInMonth = getDaysInMonth; + +// Week +import { getSetWeek, getSetISOWeek } from '../units/week'; +proto.week = proto.weeks = getSetWeek; +proto.isoWeek = proto.isoWeeks = getSetISOWeek; +proto.weeksInYear = getWeeksInYear; +proto.isoWeeksInYear = getISOWeeksInYear; + +// Day +import { getSetDayOfMonth } from '../units/day-of-month'; +import { getSetDayOfWeek, getSetISODayOfWeek, getSetLocaleDayOfWeek } from '../units/day-of-week'; +import { getSetDayOfYear } from '../units/day-of-year'; +proto.date = getSetDayOfMonth; +proto.day = proto.days = getSetDayOfWeek; +proto.weekday = getSetLocaleDayOfWeek; +proto.isoWeekday = getSetISODayOfWeek; +proto.dayOfYear = getSetDayOfYear; + +// Hour +import { getSetHour } from '../units/hour'; +proto.hour = proto.hours = getSetHour; + +// Minute +import { getSetMinute } from '../units/minute'; +proto.minute = proto.minutes = getSetMinute; + +// Second +import { getSetSecond } from '../units/second'; +proto.second = proto.seconds = getSetSecond; + +// Millisecond +import { getSetMillisecond } from '../units/millisecond'; +proto.millisecond = proto.milliseconds = getSetMillisecond; + +// Offset +import { + getSetOffset, + setOffsetToUTC, + setOffsetToLocal, + setOffsetToParsedOffset, + hasAlignedHourOffset, + isDaylightSavingTime, + isDaylightSavingTimeShifted, + getSetZone, + isLocal, + isUtcOffset, + isUtc +} from '../units/offset'; +proto.utcOffset = getSetOffset; +proto.utc = setOffsetToUTC; +proto.local = setOffsetToLocal; +proto.parseZone = setOffsetToParsedOffset; +proto.hasAlignedHourOffset = hasAlignedHourOffset; +proto.isDST = isDaylightSavingTime; +proto.isLocal = isLocal; +proto.isUtcOffset = isUtcOffset; +proto.isUtc = isUtc; +proto.isUTC = isUtc; + +// Timezone +import { getZoneAbbr, getZoneName } from '../units/timezone'; +proto.zoneAbbr = getZoneAbbr; +proto.zoneName = getZoneName; + +// Deprecations +import { deprecate } from '../utils/deprecate'; +proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); +proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); +proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); +proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); +proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); + +export default proto; diff --git a/node_modules/moment/src/lib/moment/start-end-of.js b/node_modules/moment/src/lib/moment/start-end-of.js new file mode 100644 index 0000000..02f9824 --- /dev/null +++ b/node_modules/moment/src/lib/moment/start-end-of.js @@ -0,0 +1,59 @@ +import { normalizeUnits } from '../units/aliases'; + +export function startOf (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + case 'date': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; +} + +export function endOf (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + + // 'date' is an alias for 'day', so it should be considered as such. + if (units === 'date') { + units = 'day'; + } + + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); +} diff --git a/node_modules/moment/src/lib/moment/to-type.js b/node_modules/moment/src/lib/moment/to-type.js new file mode 100644 index 0000000..a990dd2 --- /dev/null +++ b/node_modules/moment/src/lib/moment/to-type.js @@ -0,0 +1,34 @@ +export function valueOf () { + return this._d.valueOf() - ((this._offset || 0) * 60000); +} + +export function unix () { + return Math.floor(this.valueOf() / 1000); +} + +export function toDate () { + return new Date(this.valueOf()); +} + +export function toArray () { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; +} + +export function toObject () { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds() + }; +} + +export function toJSON () { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; +} diff --git a/node_modules/moment/src/lib/moment/to.js b/node_modules/moment/src/lib/moment/to.js new file mode 100644 index 0000000..7ad667e --- /dev/null +++ b/node_modules/moment/src/lib/moment/to.js @@ -0,0 +1,17 @@ +import { createDuration } from '../duration/create'; +import { createLocal } from '../create/local'; +import { isMoment } from '../moment/constructor'; + +export function to (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +export function toNow (withoutSuffix) { + return this.to(createLocal(), withoutSuffix); +} diff --git a/node_modules/moment/src/lib/moment/valid.js b/node_modules/moment/src/lib/moment/valid.js new file mode 100644 index 0000000..6c00742 --- /dev/null +++ b/node_modules/moment/src/lib/moment/valid.js @@ -0,0 +1,15 @@ +import { isValid as _isValid } from '../create/valid'; +import extend from '../utils/extend'; +import getParsingFlags from '../create/parsing-flags'; + +export function isValid () { + return _isValid(this); +} + +export function parsingFlags () { + return extend({}, getParsingFlags(this)); +} + +export function invalidAt () { + return getParsingFlags(this).overflow; +} diff --git a/node_modules/moment/src/lib/parse/regex.js b/node_modules/moment/src/lib/parse/regex.js new file mode 100644 index 0000000..b1dc752 --- /dev/null +++ b/node_modules/moment/src/lib/parse/regex.js @@ -0,0 +1,54 @@ +export var match1 = /\d/; // 0 - 9 +export var match2 = /\d\d/; // 00 - 99 +export var match3 = /\d{3}/; // 000 - 999 +export var match4 = /\d{4}/; // 0000 - 9999 +export var match6 = /[+-]?\d{6}/; // -999999 - 999999 +export var match1to2 = /\d\d?/; // 0 - 99 +export var match3to4 = /\d\d\d\d?/; // 999 - 9999 +export var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 +export var match1to3 = /\d{1,3}/; // 0 - 999 +export var match1to4 = /\d{1,4}/; // 0 - 9999 +export var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + +export var matchUnsigned = /\d+/; // 0 - inf +export var matchSigned = /[+-]?\d+/; // -inf - inf + +export var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z +export var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z + +export var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + +// any word (or two) characters or numbers including two/three word month in arabic. +// includes scottish gaelic two word and hyphenated months +export var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + + +import hasOwnProp from '../utils/has-own-prop'; +import isFunction from '../utils/is-function'; + +var regexes = {}; + +export function addRegexToken (token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; +} + +export function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); +} + +// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript +function unescapeFormat(s) { + return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + })); +} + +export function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} diff --git a/node_modules/moment/src/lib/parse/token.js b/node_modules/moment/src/lib/parse/token.js new file mode 100644 index 0000000..24b4474 --- /dev/null +++ b/node_modules/moment/src/lib/parse/token.js @@ -0,0 +1,33 @@ +import hasOwnProp from '../utils/has-own-prop'; +import isNumber from '../utils/is-number'; +import toInt from '../utils/to-int'; + +var tokens = {}; + +export function addParseToken (token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } +} + +export function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); +} + +export function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } +} diff --git a/node_modules/moment/src/lib/units/aliases.js b/node_modules/moment/src/lib/units/aliases.js new file mode 100644 index 0000000..0d8b88a --- /dev/null +++ b/node_modules/moment/src/lib/units/aliases.js @@ -0,0 +1,30 @@ +import hasOwnProp from '../utils/has-own-prop'; + +var aliases = {}; + +export function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; +} + +export function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; +} + +export function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; +} + diff --git a/node_modules/moment/src/lib/units/constants.js b/node_modules/moment/src/lib/units/constants.js new file mode 100644 index 0000000..70bf1b2 --- /dev/null +++ b/node_modules/moment/src/lib/units/constants.js @@ -0,0 +1,9 @@ +export var YEAR = 0; +export var MONTH = 1; +export var DATE = 2; +export var HOUR = 3; +export var MINUTE = 4; +export var SECOND = 5; +export var MILLISECOND = 6; +export var WEEK = 7; +export var WEEKDAY = 8; diff --git a/node_modules/moment/src/lib/units/day-of-month.js b/node_modules/moment/src/lib/units/day-of-month.js new file mode 100644 index 0000000..0253253 --- /dev/null +++ b/node_modules/moment/src/lib/units/day-of-month.js @@ -0,0 +1,39 @@ +import { makeGetSet } from '../moment/get-set'; +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, match2 } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { DATE } from './constants'; +import toInt from '../utils/to-int'; + +// FORMATTING + +addFormatToken('D', ['DD', 2], 'Do', 'date'); + +// ALIASES + +addUnitAlias('date', 'D'); + +// PRIOROITY +addUnitPriority('date', 9); + +// PARSING + +addRegexToken('D', match1to2); +addRegexToken('DD', match1to2, match2); +addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict ? + (locale._dayOfMonthOrdinalParse || locale._ordinalParse) : + locale._dayOfMonthOrdinalParseLenient; +}); + +addParseToken(['D', 'DD'], DATE); +addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); +}); + +// MOMENTS + +export var getSetDayOfMonth = makeGetSet('Date', true); diff --git a/node_modules/moment/src/lib/units/day-of-week.js b/node_modules/moment/src/lib/units/day-of-week.js new file mode 100644 index 0000000..5502760 --- /dev/null +++ b/node_modules/moment/src/lib/units/day-of-week.js @@ -0,0 +1,364 @@ +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, matchWord, regexEscape } from '../parse/regex'; +import { addWeekParseToken } from '../parse/token'; +import toInt from '../utils/to-int'; +import isArray from '../utils/is-array'; +import indexOf from '../utils/index-of'; +import hasOwnProp from '../utils/has-own-prop'; +import { createUTC } from '../create/utc'; +import getParsingFlags from '../create/parsing-flags'; + +// FORMATTING + +addFormatToken('d', 0, 'do', 'day'); + +addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); +}); + +addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); +}); + +addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); +}); + +addFormatToken('e', 0, 0, 'weekday'); +addFormatToken('E', 0, 0, 'isoWeekday'); + +// ALIASES + +addUnitAlias('day', 'd'); +addUnitAlias('weekday', 'e'); +addUnitAlias('isoWeekday', 'E'); + +// PRIORITY +addUnitPriority('day', 11); +addUnitPriority('weekday', 11); +addUnitPriority('isoWeekday', 11); + +// PARSING + +addRegexToken('d', match1to2); +addRegexToken('e', match1to2); +addRegexToken('E', match1to2); +addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); +}); +addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); +}); +addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); +}); + +addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } +}); + +addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); +}); + +// HELPERS + +function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; +} + +function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; +} + +// LOCALES + +export var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); +export function localeWeekdays (m, format) { + if (!m) { + return isArray(this._weekdays) ? this._weekdays : + this._weekdays['standalone']; + } + return isArray(this._weekdays) ? this._weekdays[m.day()] : + this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; +} + +export var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); +export function localeWeekdaysShort (m) { + return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; +} + +export var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); +export function localeWeekdaysMin (m) { + return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin; +} + +function handleStrictParse(weekdayName, format, strict) { + var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +export function localeWeekdaysParse (weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); + this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); + this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); + } + if (!this._weekdaysParse[i]) { + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } +} + +// MOMENTS + +export function getSetDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } +} + +export function getSetLocaleDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); +} + +export function getSetISODayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } +} + +var defaultWeekdaysRegex = matchWord; +export function weekdaysRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict ? + this._weekdaysStrictRegex : this._weekdaysRegex; + } +} + +var defaultWeekdaysShortRegex = matchWord; +export function weekdaysShortRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict ? + this._weekdaysShortStrictRegex : this._weekdaysShortRegex; + } +} + +var defaultWeekdaysMinRegex = matchWord; +export function weekdaysMinRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict ? + this._weekdaysMinStrictRegex : this._weekdaysMinRegex; + } +} + + +function computeWeekdaysParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], + i, mom, minp, shortp, longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = this.weekdaysMin(mom, ''); + shortp = this.weekdaysShort(mom, ''); + longp = this.weekdays(mom, ''); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 7; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); + this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); +} diff --git a/node_modules/moment/src/lib/units/day-of-year.js b/node_modules/moment/src/lib/units/day-of-year.js new file mode 100644 index 0000000..6fe931c --- /dev/null +++ b/node_modules/moment/src/lib/units/day-of-year.js @@ -0,0 +1,36 @@ +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match3, match1to3 } from '../parse/regex'; +import { daysInYear } from './year'; +import { createUTCDate } from '../create/date-from-array'; +import { addParseToken } from '../parse/token'; +import toInt from '../utils/to-int'; + +// FORMATTING + +addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + +// ALIASES + +addUnitAlias('dayOfYear', 'DDD'); + +// PRIORITY +addUnitPriority('dayOfYear', 4); + +// PARSING + +addRegexToken('DDD', match1to3); +addRegexToken('DDDD', match3); +addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); +}); + +// HELPERS + +// MOMENTS + +export function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); +} diff --git a/node_modules/moment/src/lib/units/hour.js b/node_modules/moment/src/lib/units/hour.js new file mode 100644 index 0000000..ef75868 --- /dev/null +++ b/node_modules/moment/src/lib/units/hour.js @@ -0,0 +1,144 @@ +import { makeGetSet } from '../moment/get-set'; +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, match2, match3to4, match5to6 } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { HOUR, MINUTE, SECOND } from './constants'; +import toInt from '../utils/to-int'; +import zeroFill from '../utils/zero-fill'; +import getParsingFlags from '../create/parsing-flags'; + +// FORMATTING + +function hFormat() { + return this.hours() % 12 || 12; +} + +function kFormat() { + return this.hours() || 24; +} + +addFormatToken('H', ['HH', 2], 0, 'hour'); +addFormatToken('h', ['hh', 2], 0, hFormat); +addFormatToken('k', ['kk', 2], 0, kFormat); + +addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); +}); + +addFormatToken('hmmss', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); +}); + +addFormatToken('Hmmss', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); +} + +meridiem('a', true); +meridiem('A', false); + +// ALIASES + +addUnitAlias('hour', 'h'); + +// PRIORITY +addUnitPriority('hour', 13); + +// PARSING + +function matchMeridiem (isStrict, locale) { + return locale._meridiemParse; +} + +addRegexToken('a', matchMeridiem); +addRegexToken('A', matchMeridiem); +addRegexToken('H', match1to2); +addRegexToken('h', match1to2); +addRegexToken('k', match1to2); +addRegexToken('HH', match1to2, match2); +addRegexToken('hh', match1to2, match2); +addRegexToken('kk', match1to2, match2); + +addRegexToken('hmm', match3to4); +addRegexToken('hmmss', match5to6); +addRegexToken('Hmm', match3to4); +addRegexToken('Hmmss', match5to6); + +addParseToken(['H', 'HH'], HOUR); +addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; +}); +addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; +}); +addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); +}); +addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); +}); + +// LOCALES + +export function localeIsPM (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); +} + +export var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; +export function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } +} + + +// MOMENTS + +// Setting the hour should keep the time, because the user explicitly +// specified which hour he wants. So trying to maintain the same hour (in +// a new timezone) makes sense. Adding/subtracting hours does not follow +// this rule. +export var getSetHour = makeGetSet('Hours', true); diff --git a/node_modules/moment/src/lib/units/millisecond.js b/node_modules/moment/src/lib/units/millisecond.js new file mode 100644 index 0000000..27c9512 --- /dev/null +++ b/node_modules/moment/src/lib/units/millisecond.js @@ -0,0 +1,69 @@ +import { makeGetSet } from '../moment/get-set'; +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1, match2, match3, match1to3, matchUnsigned } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { MILLISECOND } from './constants'; +import toInt from '../utils/to-int'; + +// FORMATTING + +addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); +}); + +addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); +}); + +addFormatToken(0, ['SSS', 3], 0, 'millisecond'); +addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; +}); +addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; +}); +addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; +}); +addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; +}); +addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; +}); +addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; +}); + + +// ALIASES + +addUnitAlias('millisecond', 'ms'); + +// PRIORITY + +addUnitPriority('millisecond', 16); + +// PARSING + +addRegexToken('S', match1to3, match1); +addRegexToken('SS', match1to3, match2); +addRegexToken('SSS', match1to3, match3); + +var token; +for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); +} + +function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); +} + +for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); +} +// MOMENTS + +export var getSetMillisecond = makeGetSet('Milliseconds', false); diff --git a/node_modules/moment/src/lib/units/minute.js b/node_modules/moment/src/lib/units/minute.js new file mode 100644 index 0000000..9f76032 --- /dev/null +++ b/node_modules/moment/src/lib/units/minute.js @@ -0,0 +1,29 @@ +import { makeGetSet } from '../moment/get-set'; +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, match2 } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { MINUTE } from './constants'; + +// FORMATTING + +addFormatToken('m', ['mm', 2], 0, 'minute'); + +// ALIASES + +addUnitAlias('minute', 'm'); + +// PRIORITY + +addUnitPriority('minute', 14); + +// PARSING + +addRegexToken('m', match1to2); +addRegexToken('mm', match1to2, match2); +addParseToken(['m', 'mm'], MINUTE); + +// MOMENTS + +export var getSetMinute = makeGetSet('Minutes', false); diff --git a/node_modules/moment/src/lib/units/month.js b/node_modules/moment/src/lib/units/month.js new file mode 100644 index 0000000..28b4a1b --- /dev/null +++ b/node_modules/moment/src/lib/units/month.js @@ -0,0 +1,283 @@ +import { get } from '../moment/get-set'; +import hasOwnProp from '../utils/has-own-prop'; +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, match2, matchWord, regexEscape } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { hooks } from '../utils/hooks'; +import { MONTH } from './constants'; +import toInt from '../utils/to-int'; +import isArray from '../utils/is-array'; +import isNumber from '../utils/is-number'; +import indexOf from '../utils/index-of'; +import { createUTC } from '../create/utc'; +import getParsingFlags from '../create/parsing-flags'; + +export function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); +} + +// FORMATTING + +addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; +}); + +addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); +}); + +addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); +}); + +// ALIASES + +addUnitAlias('month', 'M'); + +// PRIORITY + +addUnitPriority('month', 8); + +// PARSING + +addRegexToken('M', match1to2); +addRegexToken('MM', match1to2, match2); +addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); +}); +addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); +}); + +addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; +}); + +addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } +}); + +// LOCALES + +var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; +export var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); +export function localeMonths (m, format) { + if (!m) { + return isArray(this._months) ? this._months : + this._months['standalone']; + } + return isArray(this._months) ? this._months[m.month()] : + this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; +} + +export var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); +export function localeMonthsShort (m, format) { + if (!m) { + return isArray(this._monthsShort) ? this._monthsShort : + this._monthsShort['standalone']; + } + return isArray(this._monthsShort) ? this._monthsShort[m.month()] : + this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; +} + +function handleStrictParse(monthName, format, strict) { + var i, ii, mom, llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +export function localeMonthsParse (monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } +} + +// MOMENTS + +export function setMonth (mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; +} + +export function getSetMonth (value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } +} + +export function getDaysInMonth () { + return daysInMonth(this.year(), this.month()); +} + +var defaultMonthsShortRegex = matchWord; +export function monthsShortRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict ? + this._monthsShortStrictRegex : this._monthsShortRegex; + } +} + +var defaultMonthsRegex = matchWord; +export function monthsRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict ? + this._monthsStrictRegex : this._monthsRegex; + } +} + +function computeMonthsParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], longPieces = [], mixedPieces = [], + i, mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); +} diff --git a/node_modules/moment/src/lib/units/offset.js b/node_modules/moment/src/lib/units/offset.js new file mode 100644 index 0000000..752358f --- /dev/null +++ b/node_modules/moment/src/lib/units/offset.js @@ -0,0 +1,235 @@ +import zeroFill from '../utils/zero-fill'; +import { createDuration } from '../duration/create'; +import { addSubtract } from '../moment/add-subtract'; +import { isMoment, copyConfig } from '../moment/constructor'; +import { addFormatToken } from '../format/format'; +import { addRegexToken, matchOffset, matchShortOffset } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { createLocal } from '../create/local'; +import { prepareConfig } from '../create/from-anything'; +import { createUTC } from '../create/utc'; +import isDate from '../utils/is-date'; +import toInt from '../utils/to-int'; +import isUndefined from '../utils/is-undefined'; +import compareArrays from '../utils/compare-arrays'; +import { hooks } from '../utils/hooks'; + +// FORMATTING + +function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); +} + +offset('Z', ':'); +offset('ZZ', ''); + +// PARSING + +addRegexToken('Z', matchShortOffset); +addRegexToken('ZZ', matchShortOffset); +addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); +}); + +// HELPERS + +// timezone chunker +// '+10:00' > ['10', '00'] +// '-1530' > ['-15', '30'] +var chunkOffset = /([\+\-]|\d\d)/gi; + +function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher); + + if (matches === null) { + return null; + } + + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? + 0 : + parts[0] === '+' ? minutes : -minutes; +} + +// Return a moment from input, that is local/utc/zone equivalent to model. +export function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } +} + +function getDateOffset (m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; +} + +// HOOKS + +// This function will be called whenever a moment is mutated. +// It is intended to keep the offset in sync with the timezone. +hooks.updateOffset = function () {}; + +// MOMENTS + +// keepLocalTime = true means only change the timezone, without +// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> +// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset +// +0200, so we adjust the time as needed, to be valid. +// +// Keeping the time actually adds/subtracts (one hour) +// from the actual represented time. That is why we call updateOffset +// a second time. In case it wants us to change the offset again +// _changeInProgress == true case, then we have to adjust, because +// there is no such time in the given timezone. +export function getSetOffset (input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract(this, createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } +} + +export function getSetZone (input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } +} + +export function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime); +} + +export function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; +} + +export function setOffsetToParsedOffset () { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } + else { + this.utcOffset(0, true); + } + } + return this; +} + +export function hasAlignedHourOffset (input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; +} + +export function isDaylightSavingTime () { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); +} + +export function isDaylightSavingTimeShifted () { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + var other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = this.isValid() && + compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; +} + +export function isLocal () { + return this.isValid() ? !this._isUTC : false; +} + +export function isUtcOffset () { + return this.isValid() ? this._isUTC : false; +} + +export function isUtc () { + return this.isValid() ? this._isUTC && this._offset === 0 : false; +} diff --git a/node_modules/moment/src/lib/units/priorities.js b/node_modules/moment/src/lib/units/priorities.js new file mode 100644 index 0000000..699017c --- /dev/null +++ b/node_modules/moment/src/lib/units/priorities.js @@ -0,0 +1,16 @@ +var priorities = {}; + +export function addUnitPriority(unit, priority) { + priorities[unit] = priority; +} + +export function getPrioritizedUnits(unitsObj) { + var units = []; + for (var u in unitsObj) { + units.push({unit: u, priority: priorities[u]}); + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; +} diff --git a/node_modules/moment/src/lib/units/quarter.js b/node_modules/moment/src/lib/units/quarter.js new file mode 100644 index 0000000..a6d409a --- /dev/null +++ b/node_modules/moment/src/lib/units/quarter.js @@ -0,0 +1,32 @@ +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1 } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { MONTH } from './constants'; +import toInt from '../utils/to-int'; + +// FORMATTING + +addFormatToken('Q', 0, 'Qo', 'quarter'); + +// ALIASES + +addUnitAlias('quarter', 'Q'); + +// PRIORITY + +addUnitPriority('quarter', 7); + +// PARSING + +addRegexToken('Q', match1); +addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; +}); + +// MOMENTS + +export function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); +} diff --git a/node_modules/moment/src/lib/units/second.js b/node_modules/moment/src/lib/units/second.js new file mode 100644 index 0000000..1793711 --- /dev/null +++ b/node_modules/moment/src/lib/units/second.js @@ -0,0 +1,29 @@ +import { makeGetSet } from '../moment/get-set'; +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, match2 } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { SECOND } from './constants'; + +// FORMATTING + +addFormatToken('s', ['ss', 2], 0, 'second'); + +// ALIASES + +addUnitAlias('second', 's'); + +// PRIORITY + +addUnitPriority('second', 15); + +// PARSING + +addRegexToken('s', match1to2); +addRegexToken('ss', match1to2, match2); +addParseToken(['s', 'ss'], SECOND); + +// MOMENTS + +export var getSetSecond = makeGetSet('Seconds', false); diff --git a/node_modules/moment/src/lib/units/timestamp.js b/node_modules/moment/src/lib/units/timestamp.js new file mode 100644 index 0000000..a49e1e4 --- /dev/null +++ b/node_modules/moment/src/lib/units/timestamp.js @@ -0,0 +1,20 @@ +import { addFormatToken } from '../format/format'; +import { addRegexToken, matchTimestamp, matchSigned } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import toInt from '../utils/to-int'; + +// FORMATTING + +addFormatToken('X', 0, 0, 'unix'); +addFormatToken('x', 0, 0, 'valueOf'); + +// PARSING + +addRegexToken('x', matchSigned); +addRegexToken('X', matchTimestamp); +addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); +}); +addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); +}); diff --git a/node_modules/moment/src/lib/units/timezone.js b/node_modules/moment/src/lib/units/timezone.js new file mode 100644 index 0000000..20c81cd --- /dev/null +++ b/node_modules/moment/src/lib/units/timezone.js @@ -0,0 +1,16 @@ +import { addFormatToken } from '../format/format'; + +// FORMATTING + +addFormatToken('z', 0, 0, 'zoneAbbr'); +addFormatToken('zz', 0, 0, 'zoneName'); + +// MOMENTS + +export function getZoneAbbr () { + return this._isUTC ? 'UTC' : ''; +} + +export function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : ''; +} diff --git a/node_modules/moment/src/lib/units/units.js b/node_modules/moment/src/lib/units/units.js new file mode 100644 index 0000000..6f45f1c --- /dev/null +++ b/node_modules/moment/src/lib/units/units.js @@ -0,0 +1,20 @@ +// Side effect imports +import './day-of-month'; +import './day-of-week'; +import './day-of-year'; +import './hour'; +import './millisecond'; +import './minute'; +import './month'; +import './offset'; +import './quarter'; +import './second'; +import './timestamp'; +import './timezone'; +import './week-year'; +import './week'; +import './year'; + +import { normalizeUnits } from './aliases'; + +export { normalizeUnits }; diff --git a/node_modules/moment/src/lib/units/week-calendar-utils.js b/node_modules/moment/src/lib/units/week-calendar-utils.js new file mode 100644 index 0000000..5be8a5f --- /dev/null +++ b/node_modules/moment/src/lib/units/week-calendar-utils.js @@ -0,0 +1,65 @@ +import { daysInYear } from './year'; +import { createLocal } from '../create/local'; +import { createUTCDate } from '../create/date-from-array'; + +// start-of-first-week - start-of-year +function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; +} + +// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday +export function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear + }; +} + +export function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear + }; +} + +export function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; +} diff --git a/node_modules/moment/src/lib/units/week-year.js b/node_modules/moment/src/lib/units/week-year.js new file mode 100644 index 0000000..7fa5425 --- /dev/null +++ b/node_modules/moment/src/lib/units/week-year.js @@ -0,0 +1,107 @@ +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, match1to4, match1to6, match2, match4, match6, matchSigned } from '../parse/regex'; +import { addWeekParseToken } from '../parse/token'; +import { weekOfYear, weeksInYear, dayOfYearFromWeeks } from './week-calendar-utils'; +import toInt from '../utils/to-int'; +import { hooks } from '../utils/hooks'; +import { createLocal } from '../create/local'; +import { createUTCDate } from '../create/date-from-array'; + +// FORMATTING + +addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; +}); + +addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; +}); + +function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter); +} + +addWeekYearFormatToken('gggg', 'weekYear'); +addWeekYearFormatToken('ggggg', 'weekYear'); +addWeekYearFormatToken('GGGG', 'isoWeekYear'); +addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + +// ALIASES + +addUnitAlias('weekYear', 'gg'); +addUnitAlias('isoWeekYear', 'GG'); + +// PRIORITY + +addUnitPriority('weekYear', 1); +addUnitPriority('isoWeekYear', 1); + + +// PARSING + +addRegexToken('G', matchSigned); +addRegexToken('g', matchSigned); +addRegexToken('GG', match1to2, match2); +addRegexToken('gg', match1to2, match2); +addRegexToken('GGGG', match1to4, match4); +addRegexToken('gggg', match1to4, match4); +addRegexToken('GGGGG', match1to6, match6); +addRegexToken('ggggg', match1to6, match6); + +addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); +}); + +addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); +}); + +// MOMENTS + +export function getSetWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy); +} + +export function getSetISOWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, this.isoWeek(), this.isoWeekday(), 1, 4); +} + +export function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4); +} + +export function getWeeksInYear () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); +} + +function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } +} + +function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; +} diff --git a/node_modules/moment/src/lib/units/week.js b/node_modules/moment/src/lib/units/week.js new file mode 100644 index 0000000..da64ffe --- /dev/null +++ b/node_modules/moment/src/lib/units/week.js @@ -0,0 +1,67 @@ +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, match2 } from '../parse/regex'; +import { addWeekParseToken } from '../parse/token'; +import toInt from '../utils/to-int'; +import { createLocal } from '../create/local'; +import { weekOfYear } from './week-calendar-utils'; + +// FORMATTING + +addFormatToken('w', ['ww', 2], 'wo', 'week'); +addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + +// ALIASES + +addUnitAlias('week', 'w'); +addUnitAlias('isoWeek', 'W'); + +// PRIORITIES + +addUnitPriority('week', 5); +addUnitPriority('isoWeek', 5); + +// PARSING + +addRegexToken('w', match1to2); +addRegexToken('ww', match1to2, match2); +addRegexToken('W', match1to2); +addRegexToken('WW', match1to2, match2); + +addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); +}); + +// HELPERS + +// LOCALES + +export function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; +} + +export var defaultLocaleWeek = { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. +}; + +export function localeFirstDayOfWeek () { + return this._week.dow; +} + +export function localeFirstDayOfYear () { + return this._week.doy; +} + +// MOMENTS + +export function getSetWeek (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +export function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); +} diff --git a/node_modules/moment/src/lib/units/year.js b/node_modules/moment/src/lib/units/year.js new file mode 100644 index 0000000..a10e5b4 --- /dev/null +++ b/node_modules/moment/src/lib/units/year.js @@ -0,0 +1,75 @@ +import { makeGetSet } from '../moment/get-set'; +import { addFormatToken } from '../format/format'; +import { addUnitAlias } from './aliases'; +import { addUnitPriority } from './priorities'; +import { addRegexToken, match1to2, match1to4, match1to6, match2, match4, match6, matchSigned } from '../parse/regex'; +import { addParseToken } from '../parse/token'; +import { hooks } from '../utils/hooks'; +import { YEAR } from './constants'; +import toInt from '../utils/to-int'; + +// FORMATTING + +addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? '' + y : '+' + y; +}); + +addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; +}); + +addFormatToken(0, ['YYYY', 4], 0, 'year'); +addFormatToken(0, ['YYYYY', 5], 0, 'year'); +addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + +// ALIASES + +addUnitAlias('year', 'y'); + +// PRIORITIES + +addUnitPriority('year', 1); + +// PARSING + +addRegexToken('Y', matchSigned); +addRegexToken('YY', match1to2, match2); +addRegexToken('YYYY', match1to4, match4); +addRegexToken('YYYYY', match1to6, match6); +addRegexToken('YYYYYY', match1to6, match6); + +addParseToken(['YYYYY', 'YYYYYY'], YEAR); +addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); +}); +addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); +}); +addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); +}); + +// HELPERS + +export function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} + +function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; +} + +// HOOKS + +hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); +}; + +// MOMENTS + +export var getSetYear = makeGetSet('FullYear', true); + +export function getIsLeapYear () { + return isLeapYear(this.year()); +} diff --git a/node_modules/moment/src/lib/utils/abs-ceil.js b/node_modules/moment/src/lib/utils/abs-ceil.js new file mode 100644 index 0000000..7cf9329 --- /dev/null +++ b/node_modules/moment/src/lib/utils/abs-ceil.js @@ -0,0 +1,7 @@ +export default function absCeil (number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } +} diff --git a/node_modules/moment/src/lib/utils/abs-floor.js b/node_modules/moment/src/lib/utils/abs-floor.js new file mode 100644 index 0000000..401c7f0 --- /dev/null +++ b/node_modules/moment/src/lib/utils/abs-floor.js @@ -0,0 +1,8 @@ +export default function absFloor (number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } +} diff --git a/node_modules/moment/src/lib/utils/abs-round.js b/node_modules/moment/src/lib/utils/abs-round.js new file mode 100644 index 0000000..98f54bc --- /dev/null +++ b/node_modules/moment/src/lib/utils/abs-round.js @@ -0,0 +1,7 @@ +export default function absRound (number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } +} diff --git a/node_modules/moment/src/lib/utils/compare-arrays.js b/node_modules/moment/src/lib/utils/compare-arrays.js new file mode 100644 index 0000000..2eb274b --- /dev/null +++ b/node_modules/moment/src/lib/utils/compare-arrays.js @@ -0,0 +1,16 @@ +import toInt from './to-int'; + +// compare two arrays, return the number of differences +export default function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; +} diff --git a/node_modules/moment/src/lib/utils/defaults.js b/node_modules/moment/src/lib/utils/defaults.js new file mode 100644 index 0000000..45c5e87 --- /dev/null +++ b/node_modules/moment/src/lib/utils/defaults.js @@ -0,0 +1,10 @@ +// Pick the first defined of two or three arguments. +export default function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; +} diff --git a/node_modules/moment/src/lib/utils/deprecate.js b/node_modules/moment/src/lib/utils/deprecate.js new file mode 100644 index 0000000..8b4c87a --- /dev/null +++ b/node_modules/moment/src/lib/utils/deprecate.js @@ -0,0 +1,55 @@ +import extend from './extend'; +import { hooks } from './hooks'; +import isUndefined from './is-undefined'; + +function warn(msg) { + if (hooks.suppressDeprecationWarnings === false && + (typeof console !== 'undefined') && console.warn) { + console.warn('Deprecation warning: ' + msg); + } +} + +export function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = []; + var arg; + for (var i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (var key in arguments[0]) { + arg += key + ': ' + arguments[0][key] + ', '; + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); +} + +var deprecations = {}; + +export function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } +} + +hooks.suppressDeprecationWarnings = false; +hooks.deprecationHandler = null; diff --git a/node_modules/moment/src/lib/utils/extend.js b/node_modules/moment/src/lib/utils/extend.js new file mode 100644 index 0000000..ba74a0b --- /dev/null +++ b/node_modules/moment/src/lib/utils/extend.js @@ -0,0 +1,19 @@ +import hasOwnProp from './has-own-prop'; + +export default function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; +} diff --git a/node_modules/moment/src/lib/utils/has-own-prop.js b/node_modules/moment/src/lib/utils/has-own-prop.js new file mode 100644 index 0000000..4d2403c --- /dev/null +++ b/node_modules/moment/src/lib/utils/has-own-prop.js @@ -0,0 +1,3 @@ +export default function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); +} diff --git a/node_modules/moment/src/lib/utils/hooks.js b/node_modules/moment/src/lib/utils/hooks.js new file mode 100644 index 0000000..02a5bd3 --- /dev/null +++ b/node_modules/moment/src/lib/utils/hooks.js @@ -0,0 +1,13 @@ +export { hooks, setHookCallback }; + +var hookCallback; + +function hooks () { + return hookCallback.apply(null, arguments); +} + +// This is done to register the method called with moment() +// without creating circular dependencies. +function setHookCallback (callback) { + hookCallback = callback; +} diff --git a/node_modules/moment/src/lib/utils/index-of.js b/node_modules/moment/src/lib/utils/index-of.js new file mode 100644 index 0000000..92298cf --- /dev/null +++ b/node_modules/moment/src/lib/utils/index-of.js @@ -0,0 +1,18 @@ +var indexOf; + +if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; +} else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; +} + +export { indexOf as default }; diff --git a/node_modules/moment/src/lib/utils/is-array.js b/node_modules/moment/src/lib/utils/is-array.js new file mode 100644 index 0000000..2d0e0f3 --- /dev/null +++ b/node_modules/moment/src/lib/utils/is-array.js @@ -0,0 +1,3 @@ +export default function isArray(input) { + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; +} diff --git a/node_modules/moment/src/lib/utils/is-date.js b/node_modules/moment/src/lib/utils/is-date.js new file mode 100644 index 0000000..69c4d0e --- /dev/null +++ b/node_modules/moment/src/lib/utils/is-date.js @@ -0,0 +1,3 @@ +export default function isDate(input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; +} diff --git a/node_modules/moment/src/lib/utils/is-function.js b/node_modules/moment/src/lib/utils/is-function.js new file mode 100644 index 0000000..12304b1 --- /dev/null +++ b/node_modules/moment/src/lib/utils/is-function.js @@ -0,0 +1,3 @@ +export default function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; +} diff --git a/node_modules/moment/src/lib/utils/is-number.js b/node_modules/moment/src/lib/utils/is-number.js new file mode 100644 index 0000000..74d6137 --- /dev/null +++ b/node_modules/moment/src/lib/utils/is-number.js @@ -0,0 +1,3 @@ +export default function isNumber(input) { + return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; +} diff --git a/node_modules/moment/src/lib/utils/is-object-empty.js b/node_modules/moment/src/lib/utils/is-object-empty.js new file mode 100644 index 0000000..1f2d939 --- /dev/null +++ b/node_modules/moment/src/lib/utils/is-object-empty.js @@ -0,0 +1,8 @@ +export default function isObjectEmpty(obj) { + var k; + for (k in obj) { + // even if its not own property I'd still call it non-empty + return false; + } + return true; +} diff --git a/node_modules/moment/src/lib/utils/is-object.js b/node_modules/moment/src/lib/utils/is-object.js new file mode 100644 index 0000000..1113538 --- /dev/null +++ b/node_modules/moment/src/lib/utils/is-object.js @@ -0,0 +1,5 @@ +export default function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return input != null && Object.prototype.toString.call(input) === '[object Object]'; +} diff --git a/node_modules/moment/src/lib/utils/is-undefined.js b/node_modules/moment/src/lib/utils/is-undefined.js new file mode 100644 index 0000000..de57a8b --- /dev/null +++ b/node_modules/moment/src/lib/utils/is-undefined.js @@ -0,0 +1,3 @@ +export default function isUndefined(input) { + return input === void 0; +} diff --git a/node_modules/moment/src/lib/utils/keys.js b/node_modules/moment/src/lib/utils/keys.js new file mode 100644 index 0000000..2da4e32 --- /dev/null +++ b/node_modules/moment/src/lib/utils/keys.js @@ -0,0 +1,19 @@ +import hasOwnProp from './has-own-prop'; + +var keys; + +if (Object.keys) { + keys = Object.keys; +} else { + keys = function (obj) { + var i, res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; +} + +export { keys as default }; diff --git a/node_modules/moment/src/lib/utils/map.js b/node_modules/moment/src/lib/utils/map.js new file mode 100644 index 0000000..1cbc563 --- /dev/null +++ b/node_modules/moment/src/lib/utils/map.js @@ -0,0 +1,7 @@ +export default function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; +} diff --git a/node_modules/moment/src/lib/utils/some.js b/node_modules/moment/src/lib/utils/some.js new file mode 100644 index 0000000..1bd3186 --- /dev/null +++ b/node_modules/moment/src/lib/utils/some.js @@ -0,0 +1,19 @@ +var some; +if (Array.prototype.some) { + some = Array.prototype.some; +} else { + some = function (fun) { + var t = Object(this); + var len = t.length >>> 0; + + for (var i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; +} + +export { some as default }; diff --git a/node_modules/moment/src/lib/utils/to-int.js b/node_modules/moment/src/lib/utils/to-int.js new file mode 100644 index 0000000..fb48941 --- /dev/null +++ b/node_modules/moment/src/lib/utils/to-int.js @@ -0,0 +1,12 @@ +import absFloor from './abs-floor'; + +export default function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; +} diff --git a/node_modules/moment/src/lib/utils/zero-fill.js b/node_modules/moment/src/lib/utils/zero-fill.js new file mode 100644 index 0000000..7009ec9 --- /dev/null +++ b/node_modules/moment/src/lib/utils/zero-fill.js @@ -0,0 +1,7 @@ +export default function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; +} diff --git a/node_modules/moment/src/locale/af.js b/node_modules/moment/src/locale/af.js new file mode 100644 index 0000000..b6bdbab --- /dev/null +++ b/node_modules/moment/src/locale/af.js @@ -0,0 +1,63 @@ +//! moment.js locale configuration +//! locale : Afrikaans [af] +//! author : Werner Mollentze : https://github.com/wernerm + +import moment from '../moment'; + +export default moment.defineLocale('af', { + months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), + weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM : function (input) { + return /^nm$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Vandag om] LT', + nextDay : '[Môre om] LT', + nextWeek : 'dddd [om] LT', + lastDay : '[Gister om] LT', + lastWeek : '[Laas] dddd [om] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'oor %s', + past : '%s gelede', + s : '\'n paar sekondes', + m : '\'n minuut', + mm : '%d minute', + h : '\'n uur', + hh : '%d ure', + d : '\'n dag', + dd : '%d dae', + M : '\'n maand', + MM : '%d maande', + y : '\'n jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week : { + dow : 1, // Maandag is die eerste dag van die week. + doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + } +}); diff --git a/node_modules/moment/src/locale/ar-dz.js b/node_modules/moment/src/locale/ar-dz.js new file mode 100644 index 0000000..d14e0ff --- /dev/null +++ b/node_modules/moment/src/locale/ar-dz.js @@ -0,0 +1,50 @@ +//! moment.js locale configuration +//! locale : Arabic (Algeria) [ar-dz] +//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme + +import moment from '../moment'; + +export default moment.defineLocale('ar-dz', { + months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 4 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ar-kw.js b/node_modules/moment/src/locale/ar-kw.js new file mode 100644 index 0000000..5cdfd93 --- /dev/null +++ b/node_modules/moment/src/locale/ar-kw.js @@ -0,0 +1,49 @@ +//! moment.js locale configuration +//! locale : Arabic (Kuwait) [ar-kw] +//! author : Nusret Parlak: https://github.com/nusretparlak + +import moment from '../moment'; + +export default moment.defineLocale('ar-kw', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/ar-ly.js b/node_modules/moment/src/locale/ar-ly.js new file mode 100644 index 0000000..2dcba3f --- /dev/null +++ b/node_modules/moment/src/locale/ar-ly.js @@ -0,0 +1,112 @@ +//! moment.js locale configuration +//! locale : Arabic (Lybia) [ar-ly] +//! author : Ali Hmer: https://github.com/kikoanis + +import moment from '../moment'; + +var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0' +}, pluralForm = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}, plurals = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}, pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}, months = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر' +]; + +export default moment.defineLocale('ar-ly', { + months : months, + monthsShort : months, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize('s'), + m : pluralize('m'), + mm : pluralize('m'), + h : pluralize('h'), + hh : pluralize('h'), + d : pluralize('d'), + dd : pluralize('d'), + M : pluralize('M'), + MM : pluralize('M'), + y : pluralize('y'), + yy : pluralize('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/ar-ma.js b/node_modules/moment/src/locale/ar-ma.js new file mode 100644 index 0000000..03973d2 --- /dev/null +++ b/node_modules/moment/src/locale/ar-ma.js @@ -0,0 +1,51 @@ +//! moment.js locale configuration +//! locale : Arabic (Morocco) [ar-ma] +//! author : ElFadili Yassine : https://github.com/ElFadiliY +//! author : Abdel Said : https://github.com/abdelsaid + +import moment from '../moment'; + +export default moment.defineLocale('ar-ma', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ar-sa.js b/node_modules/moment/src/locale/ar-sa.js new file mode 100644 index 0000000..30a9968 --- /dev/null +++ b/node_modules/moment/src/locale/ar-sa.js @@ -0,0 +1,95 @@ +//! moment.js locale configuration +//! locale : Arabic (Saudi Arabia) [ar-sa] +//! author : Suhail Alkowaileet : https://github.com/xsoh + +import moment from '../moment'; + +var symbolMap = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' +}, numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; + +export default moment.defineLocale('ar-sa', { + months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + preparse: function (string) { + return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ar-tn.js b/node_modules/moment/src/locale/ar-tn.js new file mode 100644 index 0000000..8ab8945 --- /dev/null +++ b/node_modules/moment/src/locale/ar-tn.js @@ -0,0 +1,50 @@ +//! moment.js locale configuration +//! locale : Arabic (Tunisia) [ar-tn] +//! author : Nader Toukabri : https://github.com/naderio + +import moment from '../moment'; + +export default moment.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ar.js b/node_modules/moment/src/locale/ar.js new file mode 100644 index 0000000..619843a --- /dev/null +++ b/node_modules/moment/src/locale/ar.js @@ -0,0 +1,128 @@ +//! moment.js locale configuration +//! locale : Arabic [ar] +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi + +import moment from '../moment'; + +var symbolMap = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠' +}, numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}, pluralForm = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}, plurals = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}, pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}, months = [ + 'كانون الثاني يناير', + 'شباط فبراير', + 'آذار مارس', + 'نيسان أبريل', + 'أيار مايو', + 'حزيران يونيو', + 'تموز يوليو', + 'آب أغسطس', + 'أيلول سبتمبر', + 'تشرين الأول أكتوبر', + 'تشرين الثاني نوفمبر', + 'كانون الأول ديسمبر' +]; + +export default moment.defineLocale('ar', { + months : months, + monthsShort : months, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize('s'), + m : pluralize('m'), + mm : pluralize('m'), + h : pluralize('h'), + hh : pluralize('h'), + d : pluralize('d'), + dd : pluralize('d'), + M : pluralize('M'), + MM : pluralize('M'), + y : pluralize('y'), + yy : pluralize('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/az.js b/node_modules/moment/src/locale/az.js new file mode 100644 index 0000000..74a08bd --- /dev/null +++ b/node_modules/moment/src/locale/az.js @@ -0,0 +1,96 @@ +//! moment.js locale configuration +//! locale : Azerbaijani [az] +//! author : topchiyev : https://github.com/topchiyev + +import moment from '../moment'; + +var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı' +}; + +export default moment.defineLocale('az', { + months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), + monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), + weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[sabah saat] LT', + nextWeek : '[gələn həftə] dddd [saat] LT', + lastDay : '[dünən] LT', + lastWeek : '[keçən həftə] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s əvvəl', + s : 'birneçə saniyyə', + m : 'bir dəqiqə', + mm : '%d dəqiqə', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir il', + yy : '%d il' + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM : function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/be.js b/node_modules/moment/src/locale/be.js new file mode 100644 index 0000000..233972c --- /dev/null +++ b/node_modules/moment/src/locale/be.js @@ -0,0 +1,125 @@ +//! moment.js locale configuration +//! locale : Belarusian [be] +//! author : Dmitry Demidov : https://github.com/demidov91 +//! author: Praleska: http://praleska.pro/ +//! Author : Menelion Elensúle : https://github.com/Oire + +import moment from '../moment'; + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + 'dd': 'дзень_дні_дзён', + 'MM': 'месяц_месяцы_месяцаў', + 'yy': 'год_гады_гадоў' + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } + else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} + +export default moment.defineLocale('be', { + months : { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_') + }, + monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), + weekdays : { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'), + isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/ + }, + weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'праз %s', + past : '%s таму', + s : 'некалькі секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : relativeTimeWithPlural, + hh : relativeTimeWithPlural, + d : 'дзень', + dd : relativeTimeWithPlural, + M : 'месяц', + MM : relativeTimeWithPlural, + y : 'год', + yy : relativeTimeWithPlural + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM : function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/bg.js b/node_modules/moment/src/locale/bg.js new file mode 100644 index 0000000..a09df52 --- /dev/null +++ b/node_modules/moment/src/locale/bg.js @@ -0,0 +1,81 @@ +//! moment.js locale configuration +//! locale : Bulgarian [bg] +//! author : Krasen Borisov : https://github.com/kraz + +import moment from '../moment'; + +export default moment.defineLocale('bg', { + months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'), + weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Днес в] LT', + nextDay : '[Утре в] LT', + nextWeek : 'dddd [в] LT', + lastDay : '[Вчера в] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'след %s', + past : 'преди %s', + s : 'няколко секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дни', + M : 'месец', + MM : '%d месеца', + y : 'година', + yy : '%d години' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/bn.js b/node_modules/moment/src/locale/bn.js new file mode 100644 index 0000000..359a376 --- /dev/null +++ b/node_modules/moment/src/locale/bn.js @@ -0,0 +1,109 @@ +//! moment.js locale configuration +//! locale : Bengali [bn] +//! author : Kaushik Gandhi : https://github.com/kaushikgandhi + +import moment from '../moment'; + +var symbolMap = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০' +}, +numberMap = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' +}; + +export default moment.defineLocale('bn', { + months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), + monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'), + weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'), + weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'), + longDateFormat : { + LT : 'A h:mm সময়', + LTS : 'A h:mm:ss সময়', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm সময়', + LLLL : 'dddd, D MMMM YYYY, A h:mm সময়' + }, + calendar : { + sameDay : '[আজ] LT', + nextDay : '[আগামীকাল] LT', + nextWeek : 'dddd, LT', + lastDay : '[গতকাল] LT', + lastWeek : '[গত] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s পরে', + past : '%s আগে', + s : 'কয়েক সেকেন্ড', + m : 'এক মিনিট', + mm : '%d মিনিট', + h : 'এক ঘন্টা', + hh : '%d ঘন্টা', + d : 'এক দিন', + dd : '%d দিন', + M : 'এক মাস', + MM : '%d মাস', + y : 'এক বছর', + yy : '%d বছর' + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/bo.js b/node_modules/moment/src/locale/bo.js new file mode 100644 index 0000000..5d15d84 --- /dev/null +++ b/node_modules/moment/src/locale/bo.js @@ -0,0 +1,110 @@ +//! moment.js locale configuration +//! locale : Tibetan [bo] +//! author : Thupten N. Chakrishar : https://github.com/vajradog + +import moment from '../moment'; + +var symbolMap = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠' +}, +numberMap = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0' +}; + +export default moment.defineLocale('bo', { + months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'), + weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[དི་རིང] LT', + nextDay : '[སང་ཉིན] LT', + nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay : '[ཁ་སང] LT', + lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ལ་', + past : '%s སྔན་ལ', + s : 'ལམ་སང', + m : 'སྐར་མ་གཅིག', + mm : '%d སྐར་མ', + h : 'ཆུ་ཚོད་གཅིག', + hh : '%d ཆུ་ཚོད', + d : 'ཉིན་གཅིག', + dd : '%d ཉིན་', + M : 'ཟླ་བ་གཅིག', + MM : '%d ཟླ་བ', + y : 'ལོ་གཅིག', + yy : '%d ལོ' + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/br.js b/node_modules/moment/src/locale/br.js new file mode 100644 index 0000000..925d130 --- /dev/null +++ b/node_modules/moment/src/locale/br.js @@ -0,0 +1,99 @@ +//! moment.js locale configuration +//! locale : Breton [br] +//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou + +import moment from '../moment'; + +function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + 'mm': 'munutenn', + 'MM': 'miz', + 'dd': 'devezh' + }; + return number + ' ' + mutation(format[key], number); +} +function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } +} +function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; +} +function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; +} +function softMutation(text) { + var mutationTable = { + 'm': 'v', + 'b': 'v', + 'd': 'z' + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); +} + +export default moment.defineLocale('br', { + months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), + monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h[e]mm A', + LTS : 'h[e]mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [a viz] MMMM YYYY', + LLL : 'D [a viz] MMMM YYYY h[e]mm A', + LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A' + }, + calendar : { + sameDay : '[Hiziv da] LT', + nextDay : '[Warc\'hoazh da] LT', + nextWeek : 'dddd [da] LT', + lastDay : '[Dec\'h da] LT', + lastWeek : 'dddd [paset da] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'a-benn %s', + past : '%s \'zo', + s : 'un nebeud segondennoù', + m : 'ur vunutenn', + mm : relativeTimeWithMutation, + h : 'un eur', + hh : '%d eur', + d : 'un devezh', + dd : relativeTimeWithMutation, + M : 'ur miz', + MM : relativeTimeWithMutation, + y : 'ur bloaz', + yy : specialMutationForYears + }, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, + ordinal : function (number) { + var output = (number === 1) ? 'añ' : 'vet'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/bs.js b/node_modules/moment/src/locale/bs.js new file mode 100644 index 0000000..9700821 --- /dev/null +++ b/node_modules/moment/src/locale/bs.js @@ -0,0 +1,133 @@ +//! moment.js locale configuration +//! locale : Bosnian [bs] +//! author : Nedim Cholich : https://github.com/frontyard +//! based on (hr) translation by Bojan Marković + +import moment from '../moment'; + +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +export default moment.defineLocale('bs', { + months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : 'dan', + dd : translate, + M : 'mjesec', + MM : translate, + y : 'godinu', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/ca.js b/node_modules/moment/src/locale/ca.js new file mode 100644 index 0000000..fe80697 --- /dev/null +++ b/node_modules/moment/src/locale/ca.js @@ -0,0 +1,79 @@ +//! moment.js locale configuration +//! locale : Catalan [ca] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +import moment from '../moment'; + +export default moment.defineLocale('ca', { + months : { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), + format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'), + isFormat: /D[oD]?(\s)+MMMM/ + }, + monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), + weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : '[el] D MMMM [de] YYYY', + ll : 'D MMM YYYY', + LLL : '[el] D MMMM [de] YYYY [a les] H:mm', + lll : 'D MMM YYYY, H:mm', + LLLL : '[el] dddd D MMMM [de] YYYY [a les] H:mm', + llll : 'ddd D MMM YYYY, H:mm' + }, + calendar : { + sameDay : function () { + return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextDay : function () { + return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastDay : function () { + return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'd\'aquí %s', + past : 'fa %s', + s : 'uns segons', + m : 'un minut', + mm : '%d minuts', + h : 'una hora', + hh : '%d hores', + d : 'un dia', + dd : '%d dies', + M : 'un mes', + MM : '%d mesos', + y : 'un any', + yy : '%d anys' + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal : function (number, period) { + var output = (number === 1) ? 'r' : + (number === 2) ? 'n' : + (number === 3) ? 'r' : + (number === 4) ? 't' : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/cs.js b/node_modules/moment/src/locale/cs.js new file mode 100644 index 0000000..144bae0 --- /dev/null +++ b/node_modules/moment/src/locale/cs.js @@ -0,0 +1,163 @@ +//! moment.js locale configuration +//! locale : Czech [cs] +//! author : petrbela : https://github.com/petrbela + +import moment from '../moment'; + +var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'), + monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'); +function plural(n) { + return (n > 1) && (n < 5) && (~~(n / 10) !== 1); +} +function translate(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + break; + } +} + +export default moment.defineLocale('cs', { + months : months, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months, monthsShort)), + shortMonthsParse : (function (monthsShort) { + var i, _shortMonthsParse = []; + for (i = 0; i < 12; i++) { + _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i'); + } + return _shortMonthsParse; + }(monthsShort)), + longMonthsParse : (function (months) { + var i, _longMonthsParse = []; + for (i = 0; i < 12; i++) { + _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i'); + } + return _longMonthsParse; + }(months)), + weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm', + l : 'D. M. YYYY' + }, + calendar : { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'před %s', + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse : /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/cv.js b/node_modules/moment/src/locale/cv.js new file mode 100644 index 0000000..354ff66 --- /dev/null +++ b/node_modules/moment/src/locale/cv.js @@ -0,0 +1,53 @@ +//! moment.js locale configuration +//! locale : Chuvash [cv] +//! author : Anatoly Mironov : https://github.com/mirontoli + +import moment from '../moment'; + +export default moment.defineLocale('cv', { + months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'), + monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'), + weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm' + }, + calendar : { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L' + }, + relativeTime : { + future : function (output) { + var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран'; + return output + affix; + }, + past : '%s каялла', + s : 'пӗр-ик ҫеккунт', + m : 'пӗр минут', + mm : '%d минут', + h : 'пӗр сехет', + hh : '%d сехет', + d : 'пӗр кун', + dd : '%d кун', + M : 'пӗр уйӑх', + MM : '%d уйӑх', + y : 'пӗр ҫул', + yy : '%d ҫул' + }, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, + ordinal : '%d-мӗш', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/cy.js b/node_modules/moment/src/locale/cy.js new file mode 100644 index 0000000..615bac3 --- /dev/null +++ b/node_modules/moment/src/locale/cy.js @@ -0,0 +1,72 @@ +//! moment.js locale configuration +//! locale : Welsh [cy] +//! author : Robert Allen : https://github.com/robgallen +//! author : https://github.com/ryangreaves + +import moment from '../moment'; + +export default moment.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact : true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd' + }, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed + 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/da.js b/node_modules/moment/src/locale/da.js new file mode 100644 index 0000000..7e601e2 --- /dev/null +++ b/node_modules/moment/src/locale/da.js @@ -0,0 +1,50 @@ +//! moment.js locale configuration +//! locale : Danish [da] +//! author : Ulrik Nielsen : https://github.com/mrbase + +import moment from '../moment'; + +export default moment.defineLocale('da', { + months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay : '[i dag kl.] LT', + nextDay : '[i morgen kl.] LT', + nextWeek : 'på dddd [kl.] LT', + lastDay : '[i går kl.] LT', + lastWeek : '[i] dddd[s kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'få sekunder', + m : 'et minut', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dage', + M : 'en måned', + MM : '%d måneder', + y : 'et år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/de-at.js b/node_modules/moment/src/locale/de-at.js new file mode 100644 index 0000000..e002011 --- /dev/null +++ b/node_modules/moment/src/locale/de-at.js @@ -0,0 +1,69 @@ +//! moment.js locale configuration +//! locale : German (Austria) [de-at] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Martin Groller : https://github.com/MadMG +//! author : Mikolaj Dadela : https://github.com/mik01aj + +import moment from '../moment'; + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +export default moment.defineLocale('de-at', { + months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/de-ch.js b/node_modules/moment/src/locale/de-ch.js new file mode 100644 index 0000000..cdd28ec --- /dev/null +++ b/node_modules/moment/src/locale/de-ch.js @@ -0,0 +1,68 @@ +//! moment.js locale configuration +//! locale : German (Switzerland) [de-ch] +//! author : sschueller : https://github.com/sschueller + +// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de# + +import moment from '../moment'; + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +export default moment.defineLocale('de-ch', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH.mm', + LLLL : 'dddd, D. MMMM YYYY HH.mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/de.js b/node_modules/moment/src/locale/de.js new file mode 100644 index 0000000..c54f59c --- /dev/null +++ b/node_modules/moment/src/locale/de.js @@ -0,0 +1,68 @@ +//! moment.js locale configuration +//! locale : German [de] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Mikolaj Dadela : https://github.com/mik01aj + +import moment from '../moment'; + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +export default moment.defineLocale('de', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/dv.js b/node_modules/moment/src/locale/dv.js new file mode 100644 index 0000000..9490e3f --- /dev/null +++ b/node_modules/moment/src/locale/dv.js @@ -0,0 +1,89 @@ +//! moment.js locale configuration +//! locale : Maldivian [dv] +//! author : Jawish Hameed : https://github.com/jawish + +import moment from '../moment'; + +var months = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު' +], weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު' +]; + +export default moment.defineLocale('dv', { + months : months, + monthsShort : months, + weekdays : weekdays, + weekdaysShort : weekdays, + weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat : { + + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/M/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /މކ|މފ/, + isPM : function (input) { + return 'މފ' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar : { + sameDay : '[މިއަދު] LT', + nextDay : '[މާދަމާ] LT', + nextWeek : 'dddd LT', + lastDay : '[އިއްޔެ] LT', + lastWeek : '[ފާއިތުވި] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ތެރޭގައި %s', + past : 'ކުރިން %s', + s : 'ސިކުންތުކޮޅެއް', + m : 'މިނިޓެއް', + mm : 'މިނިޓު %d', + h : 'ގަޑިއިރެއް', + hh : 'ގަޑިއިރު %d', + d : 'ދުވަހެއް', + dd : 'ދުވަސް %d', + M : 'މަހެއް', + MM : 'މަސް %d', + y : 'އަހަރެއް', + yy : 'އަހަރު %d' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 7, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/el.js b/node_modules/moment/src/locale/el.js new file mode 100644 index 0000000..facd7f6 --- /dev/null +++ b/node_modules/moment/src/locale/el.js @@ -0,0 +1,88 @@ +//! moment.js locale configuration +//! locale : Greek [el] +//! author : Aggelos Karalias : https://github.com/mehiel + +import moment from '../moment'; +import isFunction from '../lib/utils/is-function'; + +export default moment.defineLocale('el', { + monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), + monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'), + months : function (momentToFormat, format) { + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), + weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM : function (input) { + return ((input + '').toLowerCase()[0] === 'μ'); + }, + meridiemParse : /[ΠΜ]\.?Μ?\.?/i, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendarEl : { + sameDay : '[Σήμερα {}] LT', + nextDay : '[Αύριο {}] LT', + nextWeek : 'dddd [{}] LT', + lastDay : '[Χθες {}] LT', + lastWeek : function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction(output)) { + output = output.apply(mom); + } + return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις')); + }, + relativeTime : { + future : 'σε %s', + past : '%s πριν', + s : 'λίγα δευτερόλεπτα', + m : 'ένα λεπτό', + mm : '%d λεπτά', + h : 'μία ώρα', + hh : '%d ώρες', + d : 'μία μέρα', + dd : '%d μέρες', + M : 'ένας μήνας', + MM : '%d μήνες', + y : 'ένας χρόνος', + yy : '%d χρόνια' + }, + dayOfMonthOrdinalParse: /\d{1,2}η/, + ordinal: '%dη', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/en-au.js b/node_modules/moment/src/locale/en-au.js new file mode 100644 index 0000000..4e3d5f4 --- /dev/null +++ b/node_modules/moment/src/locale/en-au.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : English (Australia) [en-au] +//! author : Jared Morse : https://github.com/jarcoal + +import moment from '../moment'; + +export default moment.defineLocale('en-au', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/en-ca.js b/node_modules/moment/src/locale/en-ca.js new file mode 100644 index 0000000..4783cfe --- /dev/null +++ b/node_modules/moment/src/locale/en-ca.js @@ -0,0 +1,53 @@ +//! moment.js locale configuration +//! locale : English (Canada) [en-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +import moment from '../moment'; + +export default moment.defineLocale('en-ca', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'YYYY-MM-DD', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); diff --git a/node_modules/moment/src/locale/en-gb.js b/node_modules/moment/src/locale/en-gb.js new file mode 100644 index 0000000..ccff366 --- /dev/null +++ b/node_modules/moment/src/locale/en-gb.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : English (United Kingdom) [en-gb] +//! author : Chris Gedrim : https://github.com/chrisgedrim + +import moment from '../moment'; + +export default moment.defineLocale('en-gb', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/en-ie.js b/node_modules/moment/src/locale/en-ie.js new file mode 100644 index 0000000..008b84e --- /dev/null +++ b/node_modules/moment/src/locale/en-ie.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : English (Ireland) [en-ie] +//! author : Chris Cartlidge : https://github.com/chriscartlidge + +import moment from '../moment'; + +export default moment.defineLocale('en-ie', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/en-nz.js b/node_modules/moment/src/locale/en-nz.js new file mode 100644 index 0000000..a974da7 --- /dev/null +++ b/node_modules/moment/src/locale/en-nz.js @@ -0,0 +1,57 @@ +//! moment.js locale configuration +//! locale : English (New Zealand) [en-nz] +//! author : Luke McGregor : https://github.com/lukemcgregor + +import moment from '../moment'; + +export default moment.defineLocale('en-nz', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/eo.js b/node_modules/moment/src/locale/eo.js new file mode 100644 index 0000000..66cb768 --- /dev/null +++ b/node_modules/moment/src/locale/eo.js @@ -0,0 +1,64 @@ +//! moment.js locale configuration +//! locale : Esperanto [eo] +//! author : Colin Dean : https://github.com/colindean +//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia +//! comment : miestasmia corrected the translation by colindean + +import moment from '../moment'; + +export default moment.defineLocale('eo', { + months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'), + weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D[-a de] MMMM, YYYY', + LLL : 'D[-a de] MMMM, YYYY HH:mm', + LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm' + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar : { + sameDay : '[Hodiaŭ je] LT', + nextDay : '[Morgaŭ je] LT', + nextWeek : 'dddd [je] LT', + lastDay : '[Hieraŭ je] LT', + lastWeek : '[pasinta] dddd [je] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'post %s', + past : 'antaŭ %s', + s : 'sekundoj', + m : 'minuto', + mm : '%d minutoj', + h : 'horo', + hh : '%d horoj', + d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo + dd : '%d tagoj', + M : 'monato', + MM : '%d monatoj', + y : 'jaro', + yy : '%d jaroj' + }, + dayOfMonthOrdinalParse: /\d{1,2}a/, + ordinal : '%da', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/es-do.js b/node_modules/moment/src/locale/es-do.js new file mode 100644 index 0000000..43a8614 --- /dev/null +++ b/node_modules/moment/src/locale/es-do.js @@ -0,0 +1,73 @@ +//! moment.js locale configuration +//! locale : Spanish (Dominican Republic) [es-do] + +import moment from '../moment'; + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), + monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +export default moment.defineLocale('es-do', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY h:mm A', + LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/es.js b/node_modules/moment/src/locale/es.js new file mode 100644 index 0000000..78607ea --- /dev/null +++ b/node_modules/moment/src/locale/es.js @@ -0,0 +1,74 @@ +//! moment.js locale configuration +//! locale : Spanish [es] +//! author : Julio Napurí : https://github.com/julionc + +import moment from '../moment'; + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), + monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +export default moment.defineLocale('es', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/et.js b/node_modules/moment/src/locale/et.js new file mode 100644 index 0000000..faa4585 --- /dev/null +++ b/node_modules/moment/src/locale/et.js @@ -0,0 +1,71 @@ +//! moment.js locale configuration +//! locale : Estonian [et] +//! author : Henry Kehlmann : https://github.com/madhenry +//! improvements : Illimar Tambek : https://github.com/ragulka + +import moment from '../moment'; + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + 'm' : ['ühe minuti', 'üks minut'], + 'mm': [number + ' minuti', number + ' minutit'], + 'h' : ['ühe tunni', 'tund aega', 'üks tund'], + 'hh': [number + ' tunni', number + ' tundi'], + 'd' : ['ühe päeva', 'üks päev'], + 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], + 'MM': [number + ' kuu', number + ' kuud'], + 'y' : ['ühe aasta', 'aasta', 'üks aasta'], + 'yy': [number + ' aasta', number + ' aastat'] + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; +} + +export default moment.defineLocale('et', { + months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), + monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), + weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), + weekdaysShort : 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin : 'P_E_T_K_N_R_L'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Täna,] LT', + nextDay : '[Homme,] LT', + nextWeek : '[Järgmine] dddd LT', + lastDay : '[Eile,] LT', + lastWeek : '[Eelmine] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s pärast', + past : '%s tagasi', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : '%d päeva', + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/eu.js b/node_modules/moment/src/locale/eu.js new file mode 100644 index 0000000..b73019e --- /dev/null +++ b/node_modules/moment/src/locale/eu.js @@ -0,0 +1,57 @@ +//! moment.js locale configuration +//! locale : Basque [eu] +//! author : Eneko Illarramendi : https://github.com/eillarra + +import moment from '../moment'; + +export default moment.defineLocale('eu', { + months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), + monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), + monthsParseExact : true, + weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), + weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY[ko] MMMM[ren] D[a]', + LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l : 'YYYY-M-D', + ll : 'YYYY[ko] MMM D[a]', + lll : 'YYYY[ko] MMM D[a] HH:mm', + llll : 'ddd, YYYY[ko] MMM D[a] HH:mm' + }, + calendar : { + sameDay : '[gaur] LT[etan]', + nextDay : '[bihar] LT[etan]', + nextWeek : 'dddd LT[etan]', + lastDay : '[atzo] LT[etan]', + lastWeek : '[aurreko] dddd LT[etan]', + sameElse : 'L' + }, + relativeTime : { + future : '%s barru', + past : 'duela %s', + s : 'segundo batzuk', + m : 'minutu bat', + mm : '%d minutu', + h : 'ordu bat', + hh : '%d ordu', + d : 'egun bat', + dd : '%d egun', + M : 'hilabete bat', + MM : '%d hilabete', + y : 'urte bat', + yy : '%d urte' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/fa.js b/node_modules/moment/src/locale/fa.js new file mode 100644 index 0000000..7daa53a --- /dev/null +++ b/node_modules/moment/src/locale/fa.js @@ -0,0 +1,97 @@ +//! moment.js locale configuration +//! locale : Persian [fa] +//! author : Ebrahim Byagowi : https://github.com/ebraminio + +import moment from '../moment'; + +var symbolMap = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰' +}, numberMap = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0' +}; + +export default moment.defineLocale('fa', { + months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar : { + sameDay : '[امروز ساعت] LT', + nextDay : '[فردا ساعت] LT', + nextWeek : 'dddd [ساعت] LT', + lastDay : '[دیروز ساعت] LT', + lastWeek : 'dddd [پیش] [ساعت] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'در %s', + past : '%s پیش', + s : 'چند ثانیه', + m : 'یک دقیقه', + mm : '%d دقیقه', + h : 'یک ساعت', + hh : '%d ساعت', + d : 'یک روز', + dd : '%d روز', + M : 'یک ماه', + MM : '%d ماه', + y : 'یک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/[۰-۹]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + dayOfMonthOrdinalParse: /\d{1,2}م/, + ordinal : '%dم', + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/fi.js b/node_modules/moment/src/locale/fi.js new file mode 100644 index 0000000..07ebb29 --- /dev/null +++ b/node_modules/moment/src/locale/fi.js @@ -0,0 +1,98 @@ +//! moment.js locale configuration +//! locale : Finnish [fi] +//! author : Tarmo Aidantausta : https://github.com/bleadof + +import moment from '../moment'; + +var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), + numbersFuture = [ + 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', + numbersPast[7], numbersPast[8], numbersPast[9] + ]; +function translate(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; +} +function verbalNumber(number, isFuture) { + return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; +} + +export default moment.defineLocale('fi', { + months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), + monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), + weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), + weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'Do MMMM[ta] YYYY', + LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l : 'D.M.YYYY', + ll : 'Do MMM YYYY', + lll : 'Do MMM YYYY, [klo] HH.mm', + llll : 'ddd, Do MMM YYYY, [klo] HH.mm' + }, + calendar : { + sameDay : '[tänään] [klo] LT', + nextDay : '[huomenna] [klo] LT', + nextWeek : 'dddd [klo] LT', + lastDay : '[eilen] [klo] LT', + lastWeek : '[viime] dddd[na] [klo] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s päästä', + past : '%s sitten', + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/fo.js b/node_modules/moment/src/locale/fo.js new file mode 100644 index 0000000..15749b7 --- /dev/null +++ b/node_modules/moment/src/locale/fo.js @@ -0,0 +1,51 @@ +//! moment.js locale configuration +//! locale : Faroese [fo] +//! author : Ragnar Johannesen : https://github.com/ragnar123 + +import moment from '../moment'; + +export default moment.defineLocale('fo', { + months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'), + weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D. MMMM, YYYY HH:mm' + }, + calendar : { + sameDay : '[Í dag kl.] LT', + nextDay : '[Í morgin kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[Í gjár kl.] LT', + lastWeek : '[síðstu] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'um %s', + past : '%s síðani', + s : 'fá sekund', + m : 'ein minutt', + mm : '%d minuttir', + h : 'ein tími', + hh : '%d tímar', + d : 'ein dagur', + dd : '%d dagar', + M : 'ein mánaði', + MM : '%d mánaðir', + y : 'eitt ár', + yy : '%d ár' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/fr-ca.js b/node_modules/moment/src/locale/fr-ca.js new file mode 100644 index 0000000..82d822c --- /dev/null +++ b/node_modules/moment/src/locale/fr-ca.js @@ -0,0 +1,65 @@ +//! moment.js locale configuration +//! locale : French (Canada) [fr-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +import moment from '../moment'; + +export default moment.defineLocale('fr-ca', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + } +}); + diff --git a/node_modules/moment/src/locale/fr-ch.js b/node_modules/moment/src/locale/fr-ch.js new file mode 100644 index 0000000..7bfe028 --- /dev/null +++ b/node_modules/moment/src/locale/fr-ch.js @@ -0,0 +1,69 @@ +//! moment.js locale configuration +//! locale : French (Switzerland) [fr-ch] +//! author : Gaspard Bucher : https://github.com/gaspard + +import moment from '../moment'; + +export default moment.defineLocale('fr-ch', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal : function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/fr.js b/node_modules/moment/src/locale/fr.js new file mode 100644 index 0000000..f2fac69 --- /dev/null +++ b/node_modules/moment/src/locale/fr.js @@ -0,0 +1,74 @@ +//! moment.js locale configuration +//! locale : French [fr] +//! author : John Fischer : https://github.com/jfroffice + +import moment from '../moment'; + +export default moment.defineLocale('fr', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Aujourd’hui à] LT', + nextDay : '[Demain à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[Hier à] LT', + lastWeek : 'dddd [dernier à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal : function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/fy.js b/node_modules/moment/src/locale/fy.js new file mode 100644 index 0000000..c0c58a3 --- /dev/null +++ b/node_modules/moment/src/locale/fy.js @@ -0,0 +1,66 @@ +//! moment.js locale configuration +//! locale : Frisian [fy] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v + +import moment from '../moment'; + +var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'), + monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); + +export default moment.defineLocale('fy', { + months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), + weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'oer %s', + past : '%s lyn', + s : 'in pear sekonden', + m : 'ien minút', + mm : '%d minuten', + h : 'ien oere', + hh : '%d oeren', + d : 'ien dei', + dd : '%d dagen', + M : 'ien moanne', + MM : '%d moannen', + y : 'ien jier', + yy : '%d jierren' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/gd.js b/node_modules/moment/src/locale/gd.js new file mode 100644 index 0000000..e088871 --- /dev/null +++ b/node_modules/moment/src/locale/gd.js @@ -0,0 +1,67 @@ +//! moment.js locale configuration +//! locale : Scottish Gaelic [gd] +//! author : Jon Ashdown : https://github.com/jonashdown + +import moment from '../moment'; + +var months = [ + 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd' +]; + +var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh']; + +var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; + +var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; + +var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + +export default moment.defineLocale('gd', { + months : months, + monthsShort : monthsShort, + monthsParseExact : true, + weekdays : weekdays, + weekdaysShort : weekdaysShort, + weekdaysMin : weekdaysMin, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[An-diugh aig] LT', + nextDay : '[A-màireach aig] LT', + nextWeek : 'dddd [aig] LT', + lastDay : '[An-dè aig] LT', + lastWeek : 'dddd [seo chaidh] [aig] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ann an %s', + past : 'bho chionn %s', + s : 'beagan diogan', + m : 'mionaid', + mm : '%d mionaidean', + h : 'uair', + hh : '%d uairean', + d : 'latha', + dd : '%d latha', + M : 'mìos', + MM : '%d mìosan', + y : 'bliadhna', + yy : '%d bliadhna' + }, + dayOfMonthOrdinalParse : /\d{1,2}(d|na|mh)/, + ordinal : function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/gl.js b/node_modules/moment/src/locale/gl.js new file mode 100644 index 0000000..6f53907 --- /dev/null +++ b/node_modules/moment/src/locale/gl.js @@ -0,0 +1,68 @@ +//! moment.js locale configuration +//! locale : Galician [gl] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +import moment from '../moment'; + +export default moment.defineLocale('gl', { + months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'), + monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextDay : function () { + return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextWeek : function () { + return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + lastDay : function () { + return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; + }, + lastWeek : function () { + return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past : 'hai %s', + s : 'uns segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'unha hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/gom-latn.js b/node_modules/moment/src/locale/gom-latn.js new file mode 100644 index 0000000..5530253 --- /dev/null +++ b/node_modules/moment/src/locale/gom-latn.js @@ -0,0 +1,112 @@ +//! moment.js locale configuration +//! locale : Konkani Latin script [gom-latn] +//! author : The Discoverer : https://github.com/WikiDiscoverer + +import moment from '../moment'; + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['thodde secondanim', 'thodde second'], + 'm': ['eka mintan', 'ek minute'], + 'mm': [number + ' mintanim', number + ' mintam'], + 'h': ['eka horan', 'ek hor'], + 'hh': [number + ' horanim', number + ' hor'], + 'd': ['eka disan', 'ek dis'], + 'dd': [number + ' disanim', number + ' dis'], + 'M': ['eka mhoinean', 'ek mhoino'], + 'MM': [number + ' mhoineanim', number + ' mhoine'], + 'y': ['eka vorsan', 'ek voros'], + 'yy': [number + ' vorsanim', number + ' vorsam'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +export default moment.defineLocale('gom-latn', { + months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), + monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'), + weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'A h:mm [vazta]', + LTS : 'A h:mm:ss [vazta]', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY A h:mm [vazta]', + LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]' + }, + calendar : { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Ieta to] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fatlo] dddd[,] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s', + past : '%s adim', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse : /\d{1,2}(er)/, + ordinal : function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /rati|sokalli|donparam|sanje/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokalli') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokalli'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + } +}); diff --git a/node_modules/moment/src/locale/he.js b/node_modules/moment/src/locale/he.js new file mode 100644 index 0000000..b6a1944 --- /dev/null +++ b/node_modules/moment/src/locale/he.js @@ -0,0 +1,90 @@ +//! moment.js locale configuration +//! locale : Hebrew [he] +//! author : Tomer Cohen : https://github.com/tomer +//! author : Moshe Simantov : https://github.com/DevelopmentIL +//! author : Tal Ater : https://github.com/TalAter + +import moment from '../moment'; + +export default moment.defineLocale('he', { + months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), + monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'), + weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [ב]MMMM YYYY', + LLL : 'D [ב]MMMM YYYY HH:mm', + LLLL : 'dddd, D [ב]MMMM YYYY HH:mm', + l : 'D/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay : '[היום ב־]LT', + nextDay : '[מחר ב־]LT', + nextWeek : 'dddd [בשעה] LT', + lastDay : '[אתמול ב־]LT', + lastWeek : '[ביום] dddd [האחרון בשעה] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'בעוד %s', + past : 'לפני %s', + s : 'מספר שניות', + m : 'דקה', + mm : '%d דקות', + h : 'שעה', + hh : function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d : 'יום', + dd : function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M : 'חודש', + MM : function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y : 'שנה', + yy : function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + } + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM : function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + } +}); + diff --git a/node_modules/moment/src/locale/hi.js b/node_modules/moment/src/locale/hi.js new file mode 100644 index 0000000..30a50e4 --- /dev/null +++ b/node_modules/moment/src/locale/hi.js @@ -0,0 +1,115 @@ +//! moment.js locale configuration +//! locale : Hindi [hi] +//! author : Mayank Singhal : https://github.com/mayanksinghal + +import moment from '../moment'; + +var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}, +numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +export default moment.defineLocale('hi', { + months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'), + monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), + monthsParseExact: true, + weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm बजे', + LTS : 'A h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, A h:mm बजे' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[कल] LT', + nextWeek : 'dddd, LT', + lastDay : '[कल] LT', + lastWeek : '[पिछले] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s में', + past : '%s पहले', + s : 'कुछ ही क्षण', + m : 'एक मिनट', + mm : '%d मिनट', + h : 'एक घंटा', + hh : '%d घंटे', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महीने', + MM : '%d महीने', + y : 'एक वर्ष', + yy : '%d वर्ष' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/hr.js b/node_modules/moment/src/locale/hr.js new file mode 100644 index 0000000..59d060c --- /dev/null +++ b/node_modules/moment/src/locale/hr.js @@ -0,0 +1,135 @@ +//! moment.js locale configuration +//! locale : Croatian [hr] +//! author : Bojan Marković : https://github.com/bmarkovic + +import moment from '../moment'; + +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +export default moment.defineLocale('hr', { + months : { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_') + }, + monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : 'dan', + dd : translate, + M : 'mjesec', + MM : translate, + y : 'godinu', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/hu.js b/node_modules/moment/src/locale/hu.js new file mode 100644 index 0000000..6f63611 --- /dev/null +++ b/node_modules/moment/src/locale/hu.js @@ -0,0 +1,100 @@ +//! moment.js locale configuration +//! locale : Hungarian [hu] +//! author : Adam Brunner : https://github.com/adambrunner + +import moment from '../moment'; + +var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); +function translate(number, withoutSuffix, key, isFuture) { + var num = number, + suffix; + switch (key) { + case 's': + return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; +} +function week(isFuture) { + return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; +} + +export default moment.defineLocale('hu', { + months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), + monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), + weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'YYYY.MM.DD.', + LL : 'YYYY. MMMM D.', + LLL : 'YYYY. MMMM D. H:mm', + LLLL : 'YYYY. MMMM D., dddd H:mm' + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar : { + sameDay : '[ma] LT[-kor]', + nextDay : '[holnap] LT[-kor]', + nextWeek : function () { + return week.call(this, true); + }, + lastDay : '[tegnap] LT[-kor]', + lastWeek : function () { + return week.call(this, false); + }, + sameElse : 'L' + }, + relativeTime : { + future : '%s múlva', + past : '%s', + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/hy-am.js b/node_modules/moment/src/locale/hy-am.js new file mode 100644 index 0000000..8cd904a --- /dev/null +++ b/node_modules/moment/src/locale/hy-am.js @@ -0,0 +1,86 @@ +//! moment.js locale configuration +//! locale : Armenian [hy-am] +//! author : Armendarabyan : https://github.com/armendarabyan + +import moment from '../moment'; + +export default moment.defineLocale('hy-am', { + months : { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_') + }, + monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'), + weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY թ.', + LLL : 'D MMMM YYYY թ., HH:mm', + LLLL : 'dddd, D MMMM YYYY թ., HH:mm' + }, + calendar : { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L' + }, + relativeTime : { + future : '%s հետո', + past : '%s առաջ', + s : 'մի քանի վայրկյան', + m : 'րոպե', + mm : '%d րոպե', + h : 'ժամ', + hh : '%d ժամ', + d : 'օր', + dd : '%d օր', + M : 'ամիս', + MM : '%d ամիս', + y : 'տարի', + yy : '%d տարի' + }, + meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem : function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'առավոտվա'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/id.js b/node_modules/moment/src/locale/id.js new file mode 100644 index 0000000..ab4204e --- /dev/null +++ b/node_modules/moment/src/locale/id.js @@ -0,0 +1,74 @@ +//! moment.js locale configuration +//! locale : Indonesian [id] +//! author : Mohammad Satrio Utomo : https://github.com/tyok +//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan + +import moment from '../moment'; + +export default moment.defineLocale('id', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Besok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kemarin pukul] LT', + lastWeek : 'dddd [lalu pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lalu', + s : 'beberapa detik', + m : 'semenit', + mm : '%d menit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/is.js b/node_modules/moment/src/locale/is.js new file mode 100644 index 0000000..d1c90cd --- /dev/null +++ b/node_modules/moment/src/locale/is.js @@ -0,0 +1,118 @@ +//! moment.js locale configuration +//! locale : Icelandic [is] +//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik + +import moment from '../moment'; + +function plural(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; +} +function translate(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } +} + +export default moment.defineLocale('is', { + months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'), + weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm' + }, + calendar : { + sameDay : '[í dag kl.] LT', + nextDay : '[á morgun kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[í gær kl.] LT', + lastWeek : '[síðasta] dddd [kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'eftir %s', + past : 'fyrir %s síðan', + s : translate, + m : translate, + mm : translate, + h : 'klukkustund', + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/it.js b/node_modules/moment/src/locale/it.js new file mode 100644 index 0000000..1edd3c7 --- /dev/null +++ b/node_modules/moment/src/locale/it.js @@ -0,0 +1,61 @@ +//! moment.js locale configuration +//! locale : Italian [it] +//! author : Lorenzo : https://github.com/aliem +//! author: Mattia Larentis: https://github.com/nostalgiaz + +import moment from '../moment'; + +export default moment.defineLocale('it', { + months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), + monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), + weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : function (s) { + return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s; + }, + past : '%s fa', + s : 'alcuni secondi', + m : 'un minuto', + mm : '%d minuti', + h : 'un\'ora', + hh : '%d ore', + d : 'un giorno', + dd : '%d giorni', + M : 'un mese', + MM : '%d mesi', + y : 'un anno', + yy : '%d anni' + }, + dayOfMonthOrdinalParse : /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ja.js b/node_modules/moment/src/locale/ja.js new file mode 100644 index 0000000..5fffc83 --- /dev/null +++ b/node_modules/moment/src/locale/ja.js @@ -0,0 +1,71 @@ +//! moment.js locale configuration +//! locale : Japanese [ja] +//! author : LI Long : https://github.com/baryon + +import moment from '../moment'; + +export default moment.defineLocale('ja', { + months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort : '日_月_火_水_木_金_土'.split('_'), + weekdaysMin : '日_月_火_水_木_金_土'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY年M月D日', + LLL : 'YYYY年M月D日 HH:mm', + LLLL : 'YYYY年M月D日 HH:mm dddd', + l : 'YYYY/MM/DD', + ll : 'YYYY年M月D日', + lll : 'YYYY年M月D日 HH:mm', + llll : 'YYYY年M月D日 HH:mm dddd' + }, + meridiemParse: /午前|午後/i, + isPM : function (input) { + return input === '午後'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar : { + sameDay : '[今日] LT', + nextDay : '[明日] LT', + nextWeek : '[来週]dddd LT', + lastDay : '[昨日] LT', + lastWeek : '[前週]dddd LT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse : /\d{1,2}日/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime : { + future : '%s後', + past : '%s前', + s : '数秒', + m : '1分', + mm : '%d分', + h : '1時間', + hh : '%d時間', + d : '1日', + dd : '%d日', + M : '1ヶ月', + MM : '%dヶ月', + y : '1年', + yy : '%d年' + } +}); + diff --git a/node_modules/moment/src/locale/jv.js b/node_modules/moment/src/locale/jv.js new file mode 100644 index 0000000..e5e25f9 --- /dev/null +++ b/node_modules/moment/src/locale/jv.js @@ -0,0 +1,73 @@ +//! moment.js locale configuration +//! locale : Javanese [jv] +//! author : Rony Lantip : https://github.com/lantip +//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa + +import moment from '../moment'; + +export default moment.defineLocale('jv', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar : { + sameDay : '[Dinten puniko pukul] LT', + nextDay : '[Mbenjang pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kala wingi pukul] LT', + lastWeek : 'dddd [kepengker pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'wonten ing %s', + past : '%s ingkang kepengker', + s : 'sawetawis detik', + m : 'setunggal menit', + mm : '%d menit', + h : 'setunggal jam', + hh : '%d jam', + d : 'sedinten', + dd : '%d dinten', + M : 'sewulan', + MM : '%d wulan', + y : 'setaun', + yy : '%d taun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/ka.js b/node_modules/moment/src/locale/ka.js new file mode 100644 index 0000000..6bae6a0 --- /dev/null +++ b/node_modules/moment/src/locale/ka.js @@ -0,0 +1,80 @@ +//! moment.js locale configuration +//! locale : Georgian [ka] +//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili + +import moment from '../moment'; + +export default moment.defineLocale('ka', { + months : { + standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), + format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') + }, + monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays : { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'), + isFormat: /(წინა|შემდეგ)/ + }, + weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[დღეს] LT[-ზე]', + nextDay : '[ხვალ] LT[-ზე]', + lastDay : '[გუშინ] LT[-ზე]', + nextWeek : '[შემდეგ] dddd LT[-ზე]', + lastWeek : '[წინა] dddd LT-ზე', + sameElse : 'L' + }, + relativeTime : { + future : function (s) { + return (/(წამი|წუთი|საათი|წელი)/).test(s) ? + s.replace(/ი$/, 'ში') : + s + 'ში'; + }, + past : function (s) { + if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { + return s.replace(/(ი|ე)$/, 'ის უკან'); + } + if ((/წელი/).test(s)) { + return s.replace(/წელი$/, 'წლის უკან'); + } + }, + s : 'რამდენიმე წამი', + m : 'წუთი', + mm : '%d წუთი', + h : 'საათი', + hh : '%d საათი', + d : 'დღე', + dd : '%d დღე', + M : 'თვე', + MM : '%d თვე', + y : 'წელი', + yy : '%d წელი' + }, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal : function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week : { + dow : 1, + doy : 7 + } +}); + diff --git a/node_modules/moment/src/locale/kk.js b/node_modules/moment/src/locale/kk.js new file mode 100644 index 0000000..95b81fb --- /dev/null +++ b/node_modules/moment/src/locale/kk.js @@ -0,0 +1,77 @@ +//! moment.js locale configuration +//! locale : Kazakh [kk] +//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan + +import moment from '../moment'; + +var suffixes = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші' +}; + +export default moment.defineLocale('kk', { + months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'), + monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'), + weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгін сағат] LT', + nextDay : '[Ертең сағат] LT', + nextWeek : 'dddd [сағат] LT', + lastDay : '[Кеше сағат] LT', + lastWeek : '[Өткен аптаның] dddd [сағат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ішінде', + past : '%s бұрын', + s : 'бірнеше секунд', + m : 'бір минут', + mm : '%d минут', + h : 'бір сағат', + hh : '%d сағат', + d : 'бір күн', + dd : '%d күн', + M : 'бір ай', + MM : '%d ай', + y : 'бір жыл', + yy : '%d жыл' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes[number] || suffixes[a] || suffixes[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/km.js b/node_modules/moment/src/locale/km.js new file mode 100644 index 0000000..8ae00be --- /dev/null +++ b/node_modules/moment/src/locale/km.js @@ -0,0 +1,49 @@ +//! moment.js locale configuration +//! locale : Cambodian [km] +//! author : Kruy Vanna : https://github.com/kruyvanna + +import moment from '../moment'; + +export default moment.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L' + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/kn.js b/node_modules/moment/src/locale/kn.js new file mode 100644 index 0000000..b3bd49b --- /dev/null +++ b/node_modules/moment/src/locale/kn.js @@ -0,0 +1,116 @@ +//! moment.js locale configuration +//! locale : Kannada [kn] +//! author : Rajeev Naik : https://github.com/rajeevnaikte + +import moment from '../moment'; + +var symbolMap = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦' +}, +numberMap = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0' +}; + +export default moment.defineLocale('kn', { + months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'), + monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'), + monthsParseExact: true, + weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'), + weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[ಇಂದು] LT', + nextDay : '[ನಾಳೆ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ನಿನ್ನೆ] LT', + lastWeek : '[ಕೊನೆಯ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ನಂತರ', + past : '%s ಹಿಂದೆ', + s : 'ಕೆಲವು ಕ್ಷಣಗಳು', + m : 'ಒಂದು ನಿಮಿಷ', + mm : '%d ನಿಮಿಷ', + h : 'ಒಂದು ಗಂಟೆ', + hh : '%d ಗಂಟೆ', + d : 'ಒಂದು ದಿನ', + dd : '%d ದಿನ', + M : 'ಒಂದು ತಿಂಗಳು', + MM : '%d ತಿಂಗಳು', + y : 'ಒಂದು ವರ್ಷ', + yy : '%d ವರ್ಷ' + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal : function (number) { + return number + 'ನೇ'; + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/ko.js b/node_modules/moment/src/locale/ko.js new file mode 100644 index 0000000..7018e73 --- /dev/null +++ b/node_modules/moment/src/locale/ko.js @@ -0,0 +1,60 @@ +//! moment.js locale configuration +//! locale : Korean [ko] +//! author : Kyungwook, Park : https://github.com/kyungw00k +//! author : Jeeeyul Lee + +import moment from '../moment'; + +export default moment.defineLocale('ko', { + months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort : '일_월_화_수_목_금_토'.split('_'), + weekdaysMin : '일_월_화_수_목_금_토'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'YYYY.MM.DD', + LL : 'YYYY년 MMMM D일', + LLL : 'YYYY년 MMMM D일 A h:mm', + LLLL : 'YYYY년 MMMM D일 dddd A h:mm', + l : 'YYYY.MM.DD', + ll : 'YYYY년 MMMM D일', + lll : 'YYYY년 MMMM D일 A h:mm', + llll : 'YYYY년 MMMM D일 dddd A h:mm' + }, + calendar : { + sameDay : '오늘 LT', + nextDay : '내일 LT', + nextWeek : 'dddd LT', + lastDay : '어제 LT', + lastWeek : '지난주 dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s 후', + past : '%s 전', + s : '몇 초', + ss : '%d초', + m : '1분', + mm : '%d분', + h : '한 시간', + hh : '%d시간', + d : '하루', + dd : '%d일', + M : '한 달', + MM : '%d달', + y : '일 년', + yy : '%d년' + }, + dayOfMonthOrdinalParse : /\d{1,2}일/, + ordinal : '%d일', + meridiemParse : /오전|오후/, + isPM : function (token) { + return token === '오후'; + }, + meridiem : function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + } +}); + diff --git a/node_modules/moment/src/locale/ky.js b/node_modules/moment/src/locale/ky.js new file mode 100644 index 0000000..3aeaa24 --- /dev/null +++ b/node_modules/moment/src/locale/ky.js @@ -0,0 +1,78 @@ +//! moment.js locale configuration +//! locale : Kyrgyz [ky] +//! author : Chyngyz Arystan uulu : https://github.com/chyngyz + + +import moment from '../moment'; + +var suffixes = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү' +}; + +export default moment.defineLocale('ky', { + months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'), + weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгүн саат] LT', + nextDay : '[Эртең саат] LT', + nextWeek : 'dddd [саат] LT', + lastDay : '[Кече саат] LT', + lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ичинде', + past : '%s мурун', + s : 'бирнече секунд', + m : 'бир мүнөт', + mm : '%d мүнөт', + h : 'бир саат', + hh : '%d саат', + d : 'бир күн', + dd : '%d күн', + M : 'бир ай', + MM : '%d ай', + y : 'бир жыл', + yy : '%d жыл' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes[number] || suffixes[a] || suffixes[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/lb.js b/node_modules/moment/src/locale/lb.js new file mode 100644 index 0000000..adaf04b --- /dev/null +++ b/node_modules/moment/src/locale/lb.js @@ -0,0 +1,128 @@ +//! moment.js locale configuration +//! locale : Luxembourgish [lb] +//! author : mweimerskirch : https://github.com/mweimerskirch +//! author : David Raison : https://github.com/kwisatz + +import moment from '../moment'; + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eng Minutt', 'enger Minutt'], + 'h': ['eng Stonn', 'enger Stonn'], + 'd': ['een Dag', 'engem Dag'], + 'M': ['ee Mount', 'engem Mount'], + 'y': ['ee Joer', 'engem Joer'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} +function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; +} +function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; +} +/** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ +function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } +} + +export default moment.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]' + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + } + }, + relativeTime : { + future : processFutureTime, + past : processPastTime, + s : 'e puer Sekonnen', + m : processRelativeTime, + mm : '%d Minutten', + h : processRelativeTime, + hh : '%d Stonnen', + d : processRelativeTime, + dd : '%d Deeg', + M : processRelativeTime, + MM : '%d Méint', + y : processRelativeTime, + yy : '%d Joer' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/lo.js b/node_modules/moment/src/locale/lo.js new file mode 100644 index 0000000..c049693 --- /dev/null +++ b/node_modules/moment/src/locale/lo.js @@ -0,0 +1,61 @@ +//! moment.js locale configuration +//! locale : Lao [lo] +//! author : Ryan Hart : https://github.com/ryanhart2 + +import moment from '../moment'; + +export default moment.defineLocale('lo', { + months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'ວັນdddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar : { + sameDay : '[ມື້ນີ້ເວລາ] LT', + nextDay : '[ມື້ອື່ນເວລາ] LT', + nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay : '[ມື້ວານນີ້ເວລາ] LT', + lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ອີກ %s', + past : '%sຜ່ານມາ', + s : 'ບໍ່ເທົ່າໃດວິນາທີ', + m : '1 ນາທີ', + mm : '%d ນາທີ', + h : '1 ຊົ່ວໂມງ', + hh : '%d ຊົ່ວໂມງ', + d : '1 ມື້', + dd : '%d ມື້', + M : '1 ເດືອນ', + MM : '%d ເດືອນ', + y : '1 ປີ', + yy : '%d ປີ' + }, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, + ordinal : function (number) { + return 'ທີ່' + number; + } +}); + diff --git a/node_modules/moment/src/locale/lt.js b/node_modules/moment/src/locale/lt.js new file mode 100644 index 0000000..1043cd3 --- /dev/null +++ b/node_modules/moment/src/locale/lt.js @@ -0,0 +1,108 @@ +//! moment.js locale configuration +//! locale : Lithuanian [lt] +//! author : Mindaugas Mozūras : https://github.com/mmozuras + +import moment from '../moment'; + +var units = { + 'm' : 'minutė_minutės_minutę', + 'mm': 'minutės_minučių_minutes', + 'h' : 'valanda_valandos_valandą', + 'hh': 'valandos_valandų_valandas', + 'd' : 'diena_dienos_dieną', + 'dd': 'dienos_dienų_dienas', + 'M' : 'mėnuo_mėnesio_mėnesį', + 'MM': 'mėnesiai_mėnesių_mėnesius', + 'y' : 'metai_metų_metus', + 'yy': 'metai_metų_metus' +}; +function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } +} +function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); +} +function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); +} +function forms(key) { + return units[key].split('_'); +} +function translate(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return result + translateSingular(number, withoutSuffix, key[0], isFuture); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } +} +export default moment.defineLocale('lt', { + months : { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/ + }, + monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays : { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'), + isFormat: /dddd HH:mm/ + }, + weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), + weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY [m.] MMMM D [d.]', + LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l : 'YYYY-MM-DD', + ll : 'YYYY [m.] MMMM D [d.]', + lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' + }, + calendar : { + sameDay : '[Šiandien] LT', + nextDay : '[Rytoj] LT', + nextWeek : 'dddd LT', + lastDay : '[Vakar] LT', + lastWeek : '[Praėjusį] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'po %s', + past : 'prieš %s', + s : translateSeconds, + m : translateSingular, + mm : translate, + h : translateSingular, + hh : translate, + d : translateSingular, + dd : translate, + M : translateSingular, + MM : translate, + y : translateSingular, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, + ordinal : function (number) { + return number + '-oji'; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/lv.js b/node_modules/moment/src/locale/lv.js new file mode 100644 index 0000000..4a07b2c --- /dev/null +++ b/node_modules/moment/src/locale/lv.js @@ -0,0 +1,88 @@ +//! moment.js locale configuration +//! locale : Latvian [lv] +//! author : Kristaps Karlsons : https://github.com/skakri +//! author : Jānis Elmeris : https://github.com/JanisE + +import moment from '../moment'; + +var units = { + 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), + 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), + 'h': 'stundas_stundām_stunda_stundas'.split('_'), + 'hh': 'stundas_stundām_stunda_stundas'.split('_'), + 'd': 'dienas_dienām_diena_dienas'.split('_'), + 'dd': 'dienas_dienām_diena_dienas'.split('_'), + 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + 'y': 'gada_gadiem_gads_gadi'.split('_'), + 'yy': 'gada_gadiem_gads_gadi'.split('_') +}; +/** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ +function format(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minūte", "3 minūtes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minūtes" as in "pēc 21 minūtes". + // E.g. "3 minūtēm" as in "pēc 3 minūtēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + return number + ' ' + format(units[key], number, withoutSuffix); +} +function relativeTimeWithSingular(number, withoutSuffix, key) { + return format(units[key], number, withoutSuffix); +} +function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; +} + +export default moment.defineLocale('lv', { + months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'), + weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY.', + LL : 'YYYY. [gada] D. MMMM', + LLL : 'YYYY. [gada] D. MMMM, HH:mm', + LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm' + }, + calendar : { + sameDay : '[Šodien pulksten] LT', + nextDay : '[Rīt pulksten] LT', + nextWeek : 'dddd [pulksten] LT', + lastDay : '[Vakar pulksten] LT', + lastWeek : '[Pagājušā] dddd [pulksten] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'pēc %s', + past : 'pirms %s', + s : relativeSeconds, + m : relativeTimeWithSingular, + mm : relativeTimeWithPlural, + h : relativeTimeWithSingular, + hh : relativeTimeWithPlural, + d : relativeTimeWithSingular, + dd : relativeTimeWithPlural, + M : relativeTimeWithSingular, + MM : relativeTimeWithPlural, + y : relativeTimeWithSingular, + yy : relativeTimeWithPlural + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/me.js b/node_modules/moment/src/locale/me.js new file mode 100644 index 0000000..77d32b5 --- /dev/null +++ b/node_modules/moment/src/locale/me.js @@ -0,0 +1,101 @@ +//! moment.js locale configuration +//! locale : Montenegrin [me] +//! author : Miodrag Nikač : https://github.com/miodragnikac + +import moment from '../moment'; + +var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +export default moment.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact : true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedjelje] [u] LT', + '[prošlog] [ponedjeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srijede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'nekoliko sekundi', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'dan', + dd : translator.translate, + M : 'mjesec', + MM : translator.translate, + y : 'godinu', + yy : translator.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/mi.js b/node_modules/moment/src/locale/mi.js new file mode 100644 index 0000000..cb77ad9 --- /dev/null +++ b/node_modules/moment/src/locale/mi.js @@ -0,0 +1,54 @@ +//! moment.js locale configuration +//! locale : Maori [mi] +//! author : John Corrigan : https://github.com/johnideal + +import moment from '../moment'; + +export default moment.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm' + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/mk.js b/node_modules/moment/src/locale/mk.js new file mode 100644 index 0000000..27424a7 --- /dev/null +++ b/node_modules/moment/src/locale/mk.js @@ -0,0 +1,81 @@ +//! moment.js locale configuration +//! locale : Macedonian [mk] +//! author : Borislav Mickov : https://github.com/B0k0 + +import moment from '../moment'; + +export default moment.defineLocale('mk', { + months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'), + weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Денес во] LT', + nextDay : '[Утре во] LT', + nextWeek : '[Во] dddd [во] LT', + lastDay : '[Вчера во] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'после %s', + past : 'пред %s', + s : 'неколку секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дена', + M : 'месец', + MM : '%d месеци', + y : 'година', + yy : '%d години' + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ml.js b/node_modules/moment/src/locale/ml.js new file mode 100644 index 0000000..c3df988 --- /dev/null +++ b/node_modules/moment/src/locale/ml.js @@ -0,0 +1,72 @@ +//! moment.js locale configuration +//! locale : Malayalam [ml] +//! author : Floyd Pink : https://github.com/floydpink + +import moment from '../moment'; + +export default moment.defineLocale('ml', { + months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'), + monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'), + monthsParseExact : true, + weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'), + weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + longDateFormat : { + LT : 'A h:mm -നു', + LTS : 'A h:mm:ss -നു', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm -നു', + LLLL : 'dddd, D MMMM YYYY, A h:mm -നു' + }, + calendar : { + sameDay : '[ഇന്ന്] LT', + nextDay : '[നാളെ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ഇന്നലെ] LT', + lastWeek : '[കഴിഞ്ഞ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s കഴിഞ്ഞ്', + past : '%s മുൻപ്', + s : 'അൽപ നിമിഷങ്ങൾ', + m : 'ഒരു മിനിറ്റ്', + mm : '%d മിനിറ്റ്', + h : 'ഒരു മണിക്കൂർ', + hh : '%d മണിക്കൂർ', + d : 'ഒരു ദിവസം', + dd : '%d ദിവസം', + M : 'ഒരു മാസം', + MM : '%d മാസം', + y : 'ഒരു വർഷം', + yy : '%d വർഷം' + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + } +}); + diff --git a/node_modules/moment/src/locale/mr.js b/node_modules/moment/src/locale/mr.js new file mode 100644 index 0000000..08cc3e0 --- /dev/null +++ b/node_modules/moment/src/locale/mr.js @@ -0,0 +1,150 @@ +//! moment.js locale configuration +//! locale : Marathi [mr] +//! author : Harshad Kale : https://github.com/kalehv +//! author : Vivek Athalye : https://github.com/vnathalye + +import moment from '../moment'; + +var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}, +numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +function relativeTimeMr(number, withoutSuffix, string, isFuture) +{ + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': output = 'काही सेकंद'; break; + case 'm': output = 'एक मिनिट'; break; + case 'mm': output = '%d मिनिटे'; break; + case 'h': output = 'एक तास'; break; + case 'hh': output = '%d तास'; break; + case 'd': output = 'एक दिवस'; break; + case 'dd': output = '%d दिवस'; break; + case 'M': output = 'एक महिना'; break; + case 'MM': output = '%d महिने'; break; + case 'y': output = 'एक वर्ष'; break; + case 'yy': output = '%d वर्षे'; break; + } + } + else { + switch (string) { + case 's': output = 'काही सेकंदां'; break; + case 'm': output = 'एका मिनिटा'; break; + case 'mm': output = '%d मिनिटां'; break; + case 'h': output = 'एका तासा'; break; + case 'hh': output = '%d तासां'; break; + case 'd': output = 'एका दिवसा'; break; + case 'dd': output = '%d दिवसां'; break; + case 'M': output = 'एका महिन्या'; break; + case 'MM': output = '%d महिन्यां'; break; + case 'y': output = 'एका वर्षा'; break; + case 'yy': output = '%d वर्षां'; break; + } + } + return output.replace(/%d/i, number); +} + +export default moment.defineLocale('mr', { + months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'), + monthsParseExact : true, + weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm वाजता', + LTS : 'A h:mm:ss वाजता', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm वाजता', + LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[उद्या] LT', + nextWeek : 'dddd, LT', + lastDay : '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात्री') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळी') { + return hour; + } else if (meridiem === 'दुपारी') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'सायंकाळी') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात्री'; + } else if (hour < 10) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ms-my.js b/node_modules/moment/src/locale/ms-my.js new file mode 100644 index 0000000..f5ea96f --- /dev/null +++ b/node_modules/moment/src/locale/ms-my.js @@ -0,0 +1,74 @@ +//! moment.js locale configuration +//! locale : Malay [ms-my] +//! note : DEPRECATED, the correct one is [ms] +//! author : Weldan Jamili : https://github.com/weldan + +import moment from '../moment'; + +export default moment.defineLocale('ms-my', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ms.js b/node_modules/moment/src/locale/ms.js new file mode 100644 index 0000000..44c3e37 --- /dev/null +++ b/node_modules/moment/src/locale/ms.js @@ -0,0 +1,73 @@ +//! moment.js locale configuration +//! locale : Malay [ms] +//! author : Weldan Jamili : https://github.com/weldan + +import moment from '../moment'; + +export default moment.defineLocale('ms', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/my.js b/node_modules/moment/src/locale/my.js new file mode 100644 index 0000000..401d06e --- /dev/null +++ b/node_modules/moment/src/locale/my.js @@ -0,0 +1,86 @@ +//! moment.js locale configuration +//! locale : Burmese [my] +//! author : Squar team, mysquar.com +//! author : David Rossellat : https://github.com/gholadr +//! author : Tin Aung Lin : https://github.com/thanyawzinmin + +import moment from '../moment'; + +var symbolMap = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀' +}, numberMap = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0' +}; + +export default moment.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L' + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်' + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/nb.js b/node_modules/moment/src/locale/nb.js new file mode 100644 index 0000000..d528acc --- /dev/null +++ b/node_modules/moment/src/locale/nb.js @@ -0,0 +1,54 @@ +//! moment.js locale configuration +//! locale : Norwegian Bokmål [nb] +//! authors : Espen Hovlandsdal : https://github.com/rexxars +//! Sigurd Gartmann : https://github.com/sigurdga + +import moment from '../moment'; + +export default moment.defineLocale('nb', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'noen sekunder', + m : 'ett minutt', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dager', + M : 'en måned', + MM : '%d måneder', + y : 'ett år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ne.js b/node_modules/moment/src/locale/ne.js new file mode 100644 index 0000000..a82cb95 --- /dev/null +++ b/node_modules/moment/src/locale/ne.js @@ -0,0 +1,114 @@ +//! moment.js locale configuration +//! locale : Nepalese [ne] +//! author : suvash : https://github.com/suvash + +import moment from '../moment'; + +var symbolMap = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}, +numberMap = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +export default moment.defineLocale('ne', { + months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'), + monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'), + monthsParseExact : true, + weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'), + weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'Aको h:mm बजे', + LTS : 'Aको h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, Aको h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[भोलि] LT', + nextWeek : '[आउँदो] dddd[,] LT', + lastDay : '[हिजो] LT', + lastWeek : '[गएको] dddd[,] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%sमा', + past : '%s अगाडि', + s : 'केही क्षण', + m : 'एक मिनेट', + mm : '%d मिनेट', + h : 'एक घण्टा', + hh : '%d घण्टा', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महिना', + MM : '%d महिना', + y : 'एक बर्ष', + yy : '%d बर्ष' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/nl-be.js b/node_modules/moment/src/locale/nl-be.js new file mode 100644 index 0000000..1e4a089 --- /dev/null +++ b/node_modules/moment/src/locale/nl-be.js @@ -0,0 +1,79 @@ +//! moment.js locale configuration +//! locale : Dutch (Belgium) [nl-be] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +import moment from '../moment'; + +var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +export default moment.defineLocale('nl-be', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/nl.js b/node_modules/moment/src/locale/nl.js new file mode 100644 index 0000000..816fd5a --- /dev/null +++ b/node_modules/moment/src/locale/nl.js @@ -0,0 +1,79 @@ +//! moment.js locale configuration +//! locale : Dutch [nl] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +import moment from '../moment'; + +var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +export default moment.defineLocale('nl', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/nn.js b/node_modules/moment/src/locale/nn.js new file mode 100644 index 0000000..4bdccce --- /dev/null +++ b/node_modules/moment/src/locale/nn.js @@ -0,0 +1,51 @@ +//! moment.js locale configuration +//! locale : Nynorsk [nn] +//! author : https://github.com/mechuwind + +import moment from '../moment'; + +export default moment.defineLocale('nn', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'), + weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s sidan', + s : 'nokre sekund', + m : 'eit minutt', + mm : '%d minutt', + h : 'ein time', + hh : '%d timar', + d : 'ein dag', + dd : '%d dagar', + M : 'ein månad', + MM : '%d månader', + y : 'eit år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/pa-in.js b/node_modules/moment/src/locale/pa-in.js new file mode 100644 index 0000000..78da521 --- /dev/null +++ b/node_modules/moment/src/locale/pa-in.js @@ -0,0 +1,115 @@ +//! moment.js locale configuration +//! locale : Punjabi (India) [pa-in] +//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit + +import moment from '../moment'; + +var symbolMap = { + '1': '੧', + '2': '੨', + '3': '੩', + '4': '੪', + '5': '੫', + '6': '੬', + '7': '੭', + '8': '੮', + '9': '੯', + '0': '੦' +}, +numberMap = { + '੧': '1', + '੨': '2', + '੩': '3', + '੪': '4', + '੫': '5', + '੬': '6', + '੭': '7', + '੮': '8', + '੯': '9', + '੦': '0' +}; + +export default moment.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi. + months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'), + weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat : { + LT : 'A h:mm ਵਜੇ', + LTS : 'A h:mm:ss ਵਜੇ', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ' + }, + calendar : { + sameDay : '[ਅਜ] LT', + nextDay : '[ਕਲ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ਕਲ] LT', + lastWeek : '[ਪਿਛਲੇ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ਵਿੱਚ', + past : '%s ਪਿਛਲੇ', + s : 'ਕੁਝ ਸਕਿੰਟ', + m : 'ਇਕ ਮਿੰਟ', + mm : '%d ਮਿੰਟ', + h : 'ਇੱਕ ਘੰਟਾ', + hh : '%d ਘੰਟੇ', + d : 'ਇੱਕ ਦਿਨ', + dd : '%d ਦਿਨ', + M : 'ਇੱਕ ਮਹੀਨਾ', + MM : '%d ਮਹੀਨੇ', + y : 'ਇੱਕ ਸਾਲ', + yy : '%d ਸਾਲ' + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/pl.js b/node_modules/moment/src/locale/pl.js new file mode 100644 index 0000000..5591634 --- /dev/null +++ b/node_modules/moment/src/locale/pl.js @@ -0,0 +1,97 @@ +//! moment.js locale configuration +//! locale : Polish [pl] +//! author : Rafal Hirsz : https://github.com/evoL + +import moment from '../moment'; + +var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'), + monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'); +function plural(n) { + return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1); +} +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural(number) ? 'lata' : 'lat'); + } +} + +export default moment.defineLocale('pl', { + months : function (momentToFormat, format) { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')'; + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'), + weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: '[W] dddd [o] LT', + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : '%s temu', + s : 'kilka sekund', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : '1 dzień', + dd : '%d dni', + M : 'miesiąc', + MM : translate, + y : 'rok', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/pt-br.js b/node_modules/moment/src/locale/pt-br.js new file mode 100644 index 0000000..8ea1dda --- /dev/null +++ b/node_modules/moment/src/locale/pt-br.js @@ -0,0 +1,52 @@ +//! moment.js locale configuration +//! locale : Portuguese (Brazil) [pt-br] +//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira + +import moment from '../moment'; + +export default moment.defineLocale('pt-br', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : '%s atrás', + s : 'poucos segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal : '%dº' +}); + diff --git a/node_modules/moment/src/locale/pt.js b/node_modules/moment/src/locale/pt.js new file mode 100644 index 0000000..b8a2c52 --- /dev/null +++ b/node_modules/moment/src/locale/pt.js @@ -0,0 +1,56 @@ +//! moment.js locale configuration +//! locale : Portuguese [pt] +//! author : Jefferson : https://github.com/jalex79 + +import moment from '../moment'; + +export default moment.defineLocale('pt', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : 'há %s', + s : 'segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ro.js b/node_modules/moment/src/locale/ro.js new file mode 100644 index 0000000..444eeba --- /dev/null +++ b/node_modules/moment/src/locale/ro.js @@ -0,0 +1,66 @@ +//! moment.js locale configuration +//! locale : Romanian [ro] +//! author : Vlad Gurdiga : https://github.com/gurdiga +//! author : Valentin Agachi : https://github.com/avaly + +import moment from '../moment'; + +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': 'minute', + 'hh': 'ore', + 'dd': 'zile', + 'MM': 'luni', + 'yy': 'ani' + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; +} + +export default moment.defineLocale('ro', { + months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'), + monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'peste %s', + past : '%s în urmă', + s : 'câteva secunde', + m : 'un minut', + mm : relativeTimeWithPlural, + h : 'o oră', + hh : relativeTimeWithPlural, + d : 'o zi', + dd : relativeTimeWithPlural, + M : 'o lună', + MM : relativeTimeWithPlural, + y : 'un an', + yy : relativeTimeWithPlural + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ru.js b/node_modules/moment/src/locale/ru.js new file mode 100644 index 0000000..633208a --- /dev/null +++ b/node_modules/moment/src/locale/ru.js @@ -0,0 +1,173 @@ +//! moment.js locale configuration +//! locale : Russian [ru] +//! author : Viktorminator : https://github.com/Viktorminator +//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Коренберг Марк : https://github.com/socketpair + +import moment from '../moment'; + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + 'hh': 'час_часа_часов', + 'dd': 'день_дня_дней', + 'MM': 'месяц_месяца_месяцев', + 'yy': 'год_года_лет' + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} +var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; + +// http://new.gramota.ru/spravka/rules/139-prop : § 103 +// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 +// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 +export default moment.defineLocale('ru', { + months : { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_') + }, + monthsShort : { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_') + }, + weekdays : { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/ + }, + weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соотвествует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сегодня в] LT', + nextDay: '[Завтра в] LT', + lastDay: '[Вчера в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'через %s', + past : '%s назад', + s : 'несколько секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : 'час', + hh : relativeTimeWithPlural, + d : 'день', + dd : relativeTimeWithPlural, + M : 'месяц', + MM : relativeTimeWithPlural, + y : 'год', + yy : relativeTimeWithPlural + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM : function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/sd.js b/node_modules/moment/src/locale/sd.js new file mode 100644 index 0000000..184c9e7 --- /dev/null +++ b/node_modules/moment/src/locale/sd.js @@ -0,0 +1,88 @@ +//! moment.js locale configuration +//! locale : Sindhi [sd] +//! author : Narain Sagar : https://github.com/narainsagar + +import moment from '../moment'; + +var months = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر' +]; +var days = [ + 'آچر', + 'سومر', + 'اڱارو', + 'اربع', + 'خميس', + 'جمع', + 'ڇنڇر' +]; + +export default moment.defineLocale('sd', { + months : months, + monthsShort : months, + weekdays : days, + weekdaysShort : days, + weekdaysMin : days, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[اڄ] LT', + nextDay : '[سڀاڻي] LT', + nextWeek : 'dddd [اڳين هفتي تي] LT', + lastDay : '[ڪالهه] LT', + lastWeek : '[گزريل هفتي] dddd [تي] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s پوء', + past : '%s اڳ', + s : 'چند سيڪنڊ', + m : 'هڪ منٽ', + mm : '%d منٽ', + h : 'هڪ ڪلاڪ', + hh : '%d ڪلاڪ', + d : 'هڪ ڏينهن', + dd : '%d ڏينهن', + M : 'هڪ مهينو', + MM : '%d مهينا', + y : 'هڪ سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/se.js b/node_modules/moment/src/locale/se.js new file mode 100644 index 0000000..a46a758 --- /dev/null +++ b/node_modules/moment/src/locale/se.js @@ -0,0 +1,51 @@ +//! moment.js locale configuration +//! locale : Northern Sami [se] +//! authors : Bård Rolstad Henriksen : https://github.com/karamell + + +import moment from '../moment'; + +export default moment.defineLocale('se', { + months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), + monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), + weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), + weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin : 's_v_m_g_d_b_L'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'MMMM D. [b.] YYYY', + LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' + }, + calendar : { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s geažes', + past : 'maŋit %s', + s : 'moadde sekunddat', + m : 'okta minuhta', + mm : '%d minuhtat', + h : 'okta diimmu', + hh : '%d diimmut', + d : 'okta beaivi', + dd : '%d beaivvit', + M : 'okta mánnu', + MM : '%d mánut', + y : 'okta jahki', + yy : '%d jagit' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/si.js b/node_modules/moment/src/locale/si.js new file mode 100644 index 0000000..71bdf34 --- /dev/null +++ b/node_modules/moment/src/locale/si.js @@ -0,0 +1,61 @@ +//! moment.js locale configuration +//! locale : Sinhalese [si] +//! author : Sampath Sitinamaluwa : https://github.com/sampathsris + +import moment from '../moment'; + +/*jshint -W100*/ +export default moment.defineLocale('si', { + months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'), + monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'), + weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'), + weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'a h:mm', + LTS : 'a h:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY MMMM D', + LLL : 'YYYY MMMM D, a h:mm', + LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss' + }, + calendar : { + sameDay : '[අද] LT[ට]', + nextDay : '[හෙට] LT[ට]', + nextWeek : 'dddd LT[ට]', + lastDay : '[ඊයේ] LT[ට]', + lastWeek : '[පසුගිය] dddd LT[ට]', + sameElse : 'L' + }, + relativeTime : { + future : '%sකින්', + past : '%sකට පෙර', + s : 'තත්පර කිහිපය', + m : 'මිනිත්තුව', + mm : 'මිනිත්තු %d', + h : 'පැය', + hh : 'පැය %d', + d : 'දිනය', + dd : 'දින %d', + M : 'මාසය', + MM : 'මාස %d', + y : 'වසර', + yy : 'වසර %d' + }, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, + ordinal : function (number) { + return number + ' වැනි'; + }, + meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM : function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + } +}); diff --git a/node_modules/moment/src/locale/sk.js b/node_modules/moment/src/locale/sk.js new file mode 100644 index 0000000..0c0f5bf --- /dev/null +++ b/node_modules/moment/src/locale/sk.js @@ -0,0 +1,141 @@ +//! moment.js locale configuration +//! locale : Slovak [sk] +//! author : Martin Minka : https://github.com/k2s +//! based on work of petrbela : https://github.com/petrbela + +import moment from '../moment'; + +var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'), + monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); +function plural(n) { + return (n > 1) && (n < 5); +} +function translate(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + break; + } +} + +export default moment.defineLocale('sk', { + months : months, + monthsShort : monthsShort, + weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pred %s', + s : translate, + m : translate, + mm : translate, + h : translate, + hh : translate, + d : translate, + dd : translate, + M : translate, + MM : translate, + y : translate, + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/sl.js b/node_modules/moment/src/locale/sl.js new file mode 100644 index 0000000..41c11e8 --- /dev/null +++ b/node_modules/moment/src/locale/sl.js @@ -0,0 +1,152 @@ +//! moment.js locale configuration +//! locale : Slovenian [sl] +//! author : Robert Sedovšek : https://github.com/sedovsek + +import moment from '../moment'; + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami'; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } +} + +export default moment.defineLocale('sl', { + months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danes ob] LT', + nextDay : '[jutri ob] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay : '[včeraj ob] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + return '[prejšnjo] [nedeljo] [ob] LT'; + case 3: + return '[prejšnjo] [sredo] [ob] LT'; + case 6: + return '[prejšnjo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'čez %s', + past : 'pred %s', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/sq.js b/node_modules/moment/src/locale/sq.js new file mode 100644 index 0000000..b47752a --- /dev/null +++ b/node_modules/moment/src/locale/sq.js @@ -0,0 +1,61 @@ +//! moment.js locale configuration +//! locale : Albanian [sq] +//! author : Flakërim Ismani : https://github.com/flakerimi +//! author : Menelion Elensúle : https://github.com/Oire +//! author : Oerd Cukalla : https://github.com/oerd + +import moment from '../moment'; + +export default moment.defineLocale('sq', { + months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), + monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), + weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact : true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem : function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Sot në] LT', + nextDay : '[Nesër në] LT', + nextWeek : 'dddd [në] LT', + lastDay : '[Dje në] LT', + lastWeek : 'dddd [e kaluar në] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'në %s', + past : '%s më parë', + s : 'disa sekonda', + m : 'një minutë', + mm : '%d minuta', + h : 'një orë', + hh : '%d orë', + d : 'një ditë', + dd : '%d ditë', + M : 'një muaj', + MM : '%d muaj', + y : 'një vit', + yy : '%d vite' + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/sr-cyrl.js b/node_modules/moment/src/locale/sr-cyrl.js new file mode 100644 index 0000000..69cdb6b --- /dev/null +++ b/node_modules/moment/src/locale/sr-cyrl.js @@ -0,0 +1,100 @@ +//! moment.js locale configuration +//! locale : Serbian Cyrillic [sr-cyrl] +//! author : Milan Janačković : https://github.com/milan-j + +import moment from '../moment'; + +var translator = { + words: { //Different grammatical cases + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +export default moment.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay : '[јуче у] LT', + lastWeek : function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'за %s', + past : 'пре %s', + s : 'неколико секунди', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'дан', + dd : translator.translate, + M : 'месец', + MM : translator.translate, + y : 'годину', + yy : translator.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/sr.js b/node_modules/moment/src/locale/sr.js new file mode 100644 index 0000000..5634879 --- /dev/null +++ b/node_modules/moment/src/locale/sr.js @@ -0,0 +1,100 @@ +//! moment.js locale configuration +//! locale : Serbian [sr] +//! author : Milan Janačković : https://github.com/milan-j + +import moment from '../moment'; + +var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +export default moment.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pre %s', + s : 'nekoliko sekundi', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'dan', + dd : translator.translate, + M : 'mesec', + MM : translator.translate, + y : 'godinu', + yy : translator.translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/ss.js b/node_modules/moment/src/locale/ss.js new file mode 100644 index 0000000..0d472bf --- /dev/null +++ b/node_modules/moment/src/locale/ss.js @@ -0,0 +1,80 @@ +//! moment.js locale configuration +//! locale : siSwati [ss] +//! author : Nicolai Davies : https://github.com/nicolaidavies + + +import moment from '../moment'; + +export default moment.defineLocale('ss', { + months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), + monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), + weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Namuhla nga] LT', + nextDay : '[Kusasa nga] LT', + nextWeek : 'dddd [nga] LT', + lastDay : '[Itolo nga] LT', + lastWeek : 'dddd [leliphelile] [nga] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'nga %s', + past : 'wenteka nga %s', + s : 'emizuzwana lomcane', + m : 'umzuzu', + mm : '%d emizuzu', + h : 'lihora', + hh : '%d emahora', + d : 'lilanga', + dd : '%d emalanga', + M : 'inyanga', + MM : '%d tinyanga', + y : 'umnyaka', + yy : '%d iminyaka' + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : '%d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/sv.js b/node_modules/moment/src/locale/sv.js new file mode 100644 index 0000000..7f30613 --- /dev/null +++ b/node_modules/moment/src/locale/sv.js @@ -0,0 +1,60 @@ +//! moment.js locale configuration +//! locale : Swedish [sv] +//! author : Jens Alm : https://github.com/ulmus + +import moment from '../moment'; + +export default moment.defineLocale('sv', { + months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D MMMM YYYY [kl.] HH:mm', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: '[På] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : 'för %s sedan', + s : 'några sekunder', + m : 'en minut', + mm : '%d minuter', + h : 'en timme', + hh : '%d timmar', + d : 'en dag', + dd : '%d dagar', + M : 'en månad', + MM : '%d månader', + y : 'ett år', + yy : '%d år' + }, + dayOfMonthOrdinalParse: /\d{1,2}(e|a)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'e' : + (b === 1) ? 'a' : + (b === 2) ? 'a' : + (b === 3) ? 'e' : 'e'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/sw.js b/node_modules/moment/src/locale/sw.js new file mode 100644 index 0000000..a36d9dd --- /dev/null +++ b/node_modules/moment/src/locale/sw.js @@ -0,0 +1,50 @@ +//! moment.js locale configuration +//! locale : Swahili [sw] +//! author : Fahad Kassim : https://github.com/fadsel + +import moment from '../moment'; + +export default moment.defineLocale('sw', { + months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), + weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[leo saa] LT', + nextDay : '[kesho saa] LT', + nextWeek : '[wiki ijayo] dddd [saat] LT', + lastDay : '[jana] LT', + lastWeek : '[wiki iliyopita] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s baadaye', + past : 'tokea %s', + s : 'hivi punde', + m : 'dakika moja', + mm : 'dakika %d', + h : 'saa limoja', + hh : 'masaa %d', + d : 'siku moja', + dd : 'masiku %d', + M : 'mwezi mmoja', + MM : 'miezi %d', + y : 'mwaka mmoja', + yy : 'miaka %d' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ta.js b/node_modules/moment/src/locale/ta.js new file mode 100644 index 0000000..ae41832 --- /dev/null +++ b/node_modules/moment/src/locale/ta.js @@ -0,0 +1,120 @@ +//! moment.js locale configuration +//! locale : Tamil [ta] +//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 + +import moment from '../moment'; + +var symbolMap = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦' +}, numberMap = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0' +}; + +export default moment.defineLocale('ta', { + months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'), + weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), + weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, HH:mm', + LLLL : 'dddd, D MMMM YYYY, HH:mm' + }, + calendar : { + sameDay : '[இன்று] LT', + nextDay : '[நாளை] LT', + nextWeek : 'dddd, LT', + lastDay : '[நேற்று] LT', + lastWeek : '[கடந்த வாரம்] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s இல்', + past : '%s முன்', + s : 'ஒரு சில விநாடிகள்', + m : 'ஒரு நிமிடம்', + mm : '%d நிமிடங்கள்', + h : 'ஒரு மணி நேரம்', + hh : '%d மணி நேரம்', + d : 'ஒரு நாள்', + dd : '%d நாட்கள்', + M : 'ஒரு மாதம்', + MM : '%d மாதங்கள்', + y : 'ஒரு வருடம்', + yy : '%d ஆண்டுகள்' + }, + dayOfMonthOrdinalParse: /\d{1,2}வது/, + ordinal : function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem : function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/te.js b/node_modules/moment/src/locale/te.js new file mode 100644 index 0000000..d8bba86 --- /dev/null +++ b/node_modules/moment/src/locale/te.js @@ -0,0 +1,79 @@ +//! moment.js locale configuration +//! locale : Telugu [te] +//! author : Krishna Chaitanya Thota : https://github.com/kcthota + +import moment from '../moment'; + +export default moment.defineLocale('te', { + months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'), + monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'), + monthsParseExact : true, + weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'), + weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[నేడు] LT', + nextDay : '[రేపు] LT', + nextWeek : 'dddd, LT', + lastDay : '[నిన్న] LT', + lastWeek : '[గత] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s లో', + past : '%s క్రితం', + s : 'కొన్ని క్షణాలు', + m : 'ఒక నిమిషం', + mm : '%d నిమిషాలు', + h : 'ఒక గంట', + hh : '%d గంటలు', + d : 'ఒక రోజు', + dd : '%d రోజులు', + M : 'ఒక నెల', + MM : '%d నెలలు', + y : 'ఒక సంవత్సరం', + yy : '%d సంవత్సరాలు' + }, + dayOfMonthOrdinalParse : /\d{1,2}వ/, + ordinal : '%dవ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/tet.js b/node_modules/moment/src/locale/tet.js new file mode 100644 index 0000000..117f7dd --- /dev/null +++ b/node_modules/moment/src/locale/tet.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : Tetun Dili (East Timor) [tet] +//! author : Joshua Brooks : https://github.com/joshbrooks +//! author : Onorio De J. Afonso : https://github.com/marobo + +import moment from '../moment'; + +export default moment.defineLocale('tet', { + months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'), + weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'), + weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'iha %s', + past : '%s liuba', + s : 'minutu balun', + m : 'minutu ida', + mm : 'minutus %d', + h : 'horas ida', + hh : 'horas %d', + d : 'loron ida', + dd : 'loron %d', + M : 'fulan ida', + MM : 'fulan %d', + y : 'tinan ida', + yy : 'tinan %d' + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/th.js b/node_modules/moment/src/locale/th.js new file mode 100644 index 0000000..2aa38df --- /dev/null +++ b/node_modules/moment/src/locale/th.js @@ -0,0 +1,57 @@ +//! moment.js locale configuration +//! locale : Thai [th] +//! author : Kridsada Thanabulpong : https://github.com/sirn + +import moment from '../moment'; + +export default moment.defineLocale('th', { + months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), + monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'), + monthsParseExact: true, + weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY เวลา H:mm', + LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm' + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar : { + sameDay : '[วันนี้ เวลา] LT', + nextDay : '[พรุ่งนี้ เวลา] LT', + nextWeek : 'dddd[หน้า เวลา] LT', + lastDay : '[เมื่อวานนี้ เวลา] LT', + lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'อีก %s', + past : '%sที่แล้ว', + s : 'ไม่กี่วินาที', + m : '1 นาที', + mm : '%d นาที', + h : '1 ชั่วโมง', + hh : '%d ชั่วโมง', + d : '1 วัน', + dd : '%d วัน', + M : '1 เดือน', + MM : '%d เดือน', + y : '1 ปี', + yy : '%d ปี' + } +}); diff --git a/node_modules/moment/src/locale/tl-ph.js b/node_modules/moment/src/locale/tl-ph.js new file mode 100644 index 0000000..c1bf183 --- /dev/null +++ b/node_modules/moment/src/locale/tl-ph.js @@ -0,0 +1,53 @@ +//! moment.js locale configuration +//! locale : Tagalog (Philippines) [tl-ph] +//! author : Dan Hagman : https://github.com/hagmandan + +import moment from '../moment'; + +export default moment.defineLocale('tl-ph', { + months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), + monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), + weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'MM/D/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY HH:mm', + LLLL : 'dddd, MMMM DD, YYYY HH:mm' + }, + calendar : { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L' + }, + relativeTime : { + future : 'sa loob ng %s', + past : '%s ang nakalipas', + s : 'ilang segundo', + m : 'isang minuto', + mm : '%d minuto', + h : 'isang oras', + hh : '%d oras', + d : 'isang araw', + dd : '%d araw', + M : 'isang buwan', + MM : '%d buwan', + y : 'isang taon', + yy : '%d taon' + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/tlh.js b/node_modules/moment/src/locale/tlh.js new file mode 100644 index 0000000..857d9a7 --- /dev/null +++ b/node_modules/moment/src/locale/tlh.js @@ -0,0 +1,110 @@ +//! moment.js locale configuration +//! locale : Klingon [tlh] +//! author : Dominika Kruk : https://github.com/amaranthrose + +import moment from '../moment'; + +var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + +function translateFuture(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'leS' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'waQ' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'nem' : + time + ' pIq'; + return time; +} + +function translatePast(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'Hu’' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'wen' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'ben' : + time + ' ret'; + return time; +} + +function translate(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } +} + +function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[one]; + } + return (word === '') ? 'pagh' : word; +} + +export default moment.defineLocale('tlh', { + months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'), + monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'), + monthsParseExact : true, + weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L' + }, + relativeTime : { + future : translateFuture, + past : translatePast, + s : 'puS lup', + m : 'wa’ tup', + mm : translate, + h : 'wa’ rep', + hh : translate, + d : 'wa’ jaj', + dd : translate, + M : 'wa’ jar', + MM : translate, + y : 'wa’ DIS', + yy : translate + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/tr.js b/node_modules/moment/src/locale/tr.js new file mode 100644 index 0000000..04bdea0 --- /dev/null +++ b/node_modules/moment/src/locale/tr.js @@ -0,0 +1,81 @@ +//! moment.js locale configuration +//! locale : Turkish [tr] +//! authors : Erhan Gundogan : https://github.com/erhangundogan, +//! Burak Yiğit Kaya: https://github.com/BYK + +import moment from '../moment'; + +var suffixes = { + 1: '\'inci', + 5: '\'inci', + 8: '\'inci', + 70: '\'inci', + 80: '\'inci', + 2: '\'nci', + 7: '\'nci', + 20: '\'nci', + 50: '\'nci', + 3: '\'üncü', + 4: '\'üncü', + 100: '\'üncü', + 6: '\'ncı', + 9: '\'uncu', + 10: '\'uncu', + 30: '\'uncu', + 60: '\'ıncı', + 90: '\'ıncı' +}; + +export default moment.defineLocale('tr', { + months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), + monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), + weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[yarın saat] LT', + nextWeek : '[haftaya] dddd [saat] LT', + lastDay : '[dün] LT', + lastWeek : '[geçen hafta] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s önce', + s : 'birkaç saniye', + m : 'bir dakika', + mm : '%d dakika', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir yıl', + yy : '%d yıl' + }, + dayOfMonthOrdinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '\'ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/tzl.js b/node_modules/moment/src/locale/tzl.js new file mode 100644 index 0000000..c86fb69 --- /dev/null +++ b/node_modules/moment/src/locale/tzl.js @@ -0,0 +1,82 @@ +//! moment.js locale configuration +//! locale : Talossan [tzl] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +//! author : Iustì Canun + +import moment from '../moment'; + +// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. +// This is currently too difficult (maybe even impossible) to add. +export default moment.defineLocale('tzl', { + months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), + monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM [dallas] YYYY', + LLL : 'D. MMMM [dallas] YYYY HH.mm', + LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' + }, + meridiemParse: /d\'o|d\'a/i, + isPM : function (input) { + return 'd\'o' === input.toLowerCase(); + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'd\'o' : 'D\'O'; + } else { + return isLower ? 'd\'a' : 'D\'A'; + } + }, + calendar : { + sameDay : '[oxhi à] LT', + nextDay : '[demà à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[ieiri à] LT', + lastWeek : '[sür el] dddd [lasteu à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'osprei %s', + past : 'ja%s', + s : processRelativeTime, + m : processRelativeTime, + mm : processRelativeTime, + h : processRelativeTime, + hh : processRelativeTime, + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['viensas secunds', '\'iensas secunds'], + 'm': ['\'n míut', '\'iens míut'], + 'mm': [number + ' míuts', '' + number + ' míuts'], + 'h': ['\'n þora', '\'iensa þora'], + 'hh': [number + ' þoras', '' + number + ' þoras'], + 'd': ['\'n ziua', '\'iensa ziua'], + 'dd': [number + ' ziuas', '' + number + ' ziuas'], + 'M': ['\'n mes', '\'iens mes'], + 'MM': [number + ' mesen', '' + number + ' mesen'], + 'y': ['\'n ar', '\'iens ar'], + 'yy': [number + ' ars', '' + number + ' ars'] + }; + return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]); +} + diff --git a/node_modules/moment/src/locale/tzm-latn.js b/node_modules/moment/src/locale/tzm-latn.js new file mode 100644 index 0000000..aaf62d7 --- /dev/null +++ b/node_modules/moment/src/locale/tzm-latn.js @@ -0,0 +1,49 @@ +//! moment.js locale configuration +//! locale : Central Atlas Tamazight Latin [tzm-latn] +//! author : Abdel Said : https://github.com/abdelsaid + +import moment from '../moment'; + +export default moment.defineLocale('tzm-latn', { + months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'dadkh s yan %s', + past : 'yan %s', + s : 'imik', + m : 'minuḍ', + mm : '%d minuḍ', + h : 'saɛa', + hh : '%d tassaɛin', + d : 'ass', + dd : '%d ossan', + M : 'ayowr', + MM : '%d iyyirn', + y : 'asgas', + yy : '%d isgasn' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/tzm.js b/node_modules/moment/src/locale/tzm.js new file mode 100644 index 0000000..663f85f --- /dev/null +++ b/node_modules/moment/src/locale/tzm.js @@ -0,0 +1,49 @@ +//! moment.js locale configuration +//! locale : Central Atlas Tamazight [tzm] +//! author : Abdel Said : https://github.com/abdelsaid + +import moment from '../moment'; + +export default moment.defineLocale('tzm', { + months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past : 'ⵢⴰⵏ %s', + s : 'ⵉⵎⵉⴽ', + m : 'ⵎⵉⵏⵓⴺ', + mm : '%d ⵎⵉⵏⵓⴺ', + h : 'ⵙⴰⵄⴰ', + hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d : 'ⴰⵙⵙ', + dd : '%d oⵙⵙⴰⵏ', + M : 'ⴰⵢoⵓⵔ', + MM : '%d ⵉⵢⵢⵉⵔⵏ', + y : 'ⴰⵙⴳⴰⵙ', + yy : '%d ⵉⵙⴳⴰⵙⵏ' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/uk.js b/node_modules/moment/src/locale/uk.js new file mode 100644 index 0000000..8c65254 --- /dev/null +++ b/node_modules/moment/src/locale/uk.js @@ -0,0 +1,142 @@ +//! moment.js locale configuration +//! locale : Ukrainian [uk] +//! author : zemlanin : https://github.com/zemlanin +//! Author : Menelion Elensúle : https://github.com/Oire + +import moment from '../moment'; + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + 'dd': 'день_дні_днів', + 'MM': 'місяць_місяці_місяців', + 'yy': 'рік_роки_років' + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } + else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} +function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), + 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), + 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') + }; + + if (!m) { + return weekdays['nominative']; + } + + var nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? + 'accusative' : + ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? + 'genitive' : + 'nominative'); + return weekdays[nounCase][m.day()]; +} +function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; +} + +export default moment.defineLocale('uk', { + months : { + 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'), + 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_') + }, + monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'), + weekdays : weekdaysCaseReplace, + weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY р.', + LLL : 'D MMMM YYYY р., HH:mm', + LLLL : 'dddd, D MMMM YYYY р., HH:mm' + }, + calendar : { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'за %s', + past : '%s тому', + s : 'декілька секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : 'годину', + hh : relativeTimeWithPlural, + d : 'день', + dd : relativeTimeWithPlural, + M : 'місяць', + MM : relativeTimeWithPlural, + y : 'рік', + yy : relativeTimeWithPlural + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/ur.js b/node_modules/moment/src/locale/ur.js new file mode 100644 index 0000000..ecf1690 --- /dev/null +++ b/node_modules/moment/src/locale/ur.js @@ -0,0 +1,89 @@ +//! moment.js locale configuration +//! locale : Urdu [ur] +//! author : Sawood Alam : https://github.com/ibnesayeed +//! author : Zack : https://github.com/ZackVision + +import moment from '../moment'; + +var months = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر' +]; +var days = [ + 'اتوار', + 'پیر', + 'منگل', + 'بدھ', + 'جمعرات', + 'جمعہ', + 'ہفتہ' +]; + +export default moment.defineLocale('ur', { + months : months, + monthsShort : months, + weekdays : days, + weekdaysShort : days, + weekdaysMin : days, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd، D MMMM YYYY HH:mm' + }, + meridiemParse: /صبح|شام/, + isPM : function (input) { + return 'شام' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar : { + sameDay : '[آج بوقت] LT', + nextDay : '[کل بوقت] LT', + nextWeek : 'dddd [بوقت] LT', + lastDay : '[گذشتہ روز بوقت] LT', + lastWeek : '[گذشتہ] dddd [بوقت] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s بعد', + past : '%s قبل', + s : 'چند سیکنڈ', + m : 'ایک منٹ', + mm : '%d منٹ', + h : 'ایک گھنٹہ', + hh : '%d گھنٹے', + d : 'ایک دن', + dd : '%d دن', + M : 'ایک ماہ', + MM : '%d ماہ', + y : 'ایک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/uz-latn.js b/node_modules/moment/src/locale/uz-latn.js new file mode 100644 index 0000000..a057a3e --- /dev/null +++ b/node_modules/moment/src/locale/uz-latn.js @@ -0,0 +1,49 @@ +//! moment.js locale configuration +//! locale : Uzbek Latin [uz-latn] +//! author : Rasulbek Mirzayev : github.com/Rasulbeeek + +import moment from '../moment'; + +export default moment.defineLocale('uz-latn', { + months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'), + monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'), + weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Bugun soat] LT [da]', + nextDay : '[Ertaga] LT [da]', + nextWeek : 'dddd [kuni soat] LT [da]', + lastDay : '[Kecha soat] LT [da]', + lastWeek : '[O\'tgan] dddd [kuni soat] LT [da]', + sameElse : 'L' + }, + relativeTime : { + future : 'Yaqin %s ichida', + past : 'Bir necha %s oldin', + s : 'soniya', + m : 'bir daqiqa', + mm : '%d daqiqa', + h : 'bir soat', + hh : '%d soat', + d : 'bir kun', + dd : '%d kun', + M : 'bir oy', + MM : '%d oy', + y : 'bir yil', + yy : '%d yil' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/uz.js b/node_modules/moment/src/locale/uz.js new file mode 100644 index 0000000..24a80e1 --- /dev/null +++ b/node_modules/moment/src/locale/uz.js @@ -0,0 +1,49 @@ +//! moment.js locale configuration +//! locale : Uzbek [uz] +//! author : Sardor Muminov : https://github.com/muminoff + +import moment from '../moment'; + +export default moment.defineLocale('uz', { + months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), + monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Бугун соат] LT [да]', + nextDay : '[Эртага] LT [да]', + nextWeek : 'dddd [куни соат] LT [да]', + lastDay : '[Кеча соат] LT [да]', + lastWeek : '[Утган] dddd [куни соат] LT [да]', + sameElse : 'L' + }, + relativeTime : { + future : 'Якин %s ичида', + past : 'Бир неча %s олдин', + s : 'фурсат', + m : 'бир дакика', + mm : '%d дакика', + h : 'бир соат', + hh : '%d соат', + d : 'бир кун', + dd : '%d кун', + M : 'бир ой', + MM : '%d ой', + y : 'бир йил', + yy : '%d йил' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/vi.js b/node_modules/moment/src/locale/vi.js new file mode 100644 index 0000000..28c2d56 --- /dev/null +++ b/node_modules/moment/src/locale/vi.js @@ -0,0 +1,70 @@ +//! moment.js locale configuration +//! locale : Vietnamese [vi] +//! author : Bang Nguyen : https://github.com/bangnk + +import moment from '../moment'; + +export default moment.defineLocale('vi', { + months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), + monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), + monthsParseExact : true, + weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'), + weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact : true, + meridiemParse: /sa|ch/i, + isPM : function (input) { + return /^ch$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM [năm] YYYY', + LLL : 'D MMMM [năm] YYYY HH:mm', + LLLL : 'dddd, D MMMM [năm] YYYY HH:mm', + l : 'DD/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần rồi lúc] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s tới', + past : '%s trước', + s : 'vài giây', + m : 'một phút', + mm : '%d phút', + h : 'một giờ', + hh : '%d giờ', + d : 'một ngày', + dd : '%d ngày', + M : 'một tháng', + MM : '%d tháng', + y : 'một năm', + yy : '%d năm' + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/x-pseudo.js b/node_modules/moment/src/locale/x-pseudo.js new file mode 100644 index 0000000..fba5112 --- /dev/null +++ b/node_modules/moment/src/locale/x-pseudo.js @@ -0,0 +1,58 @@ +//! moment.js locale configuration +//! locale : Pseudo [x-pseudo] +//! author : Andrew Hood : https://github.com/andrewhood125 + +import moment from '../moment'; + +export default moment.defineLocale('x-pseudo', { + months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'), + monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'), + monthsParseExact : true, + weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'), + weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[T~ódá~ý át] LT', + nextDay : '[T~ómó~rró~w át] LT', + nextWeek : 'dddd [át] LT', + lastDay : '[Ý~ést~érdá~ý át] LT', + lastWeek : '[L~ást] dddd [át] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'í~ñ %s', + past : '%s á~gó', + s : 'á ~féw ~sécó~ñds', + m : 'á ~míñ~úté', + mm : '%d m~íñú~tés', + h : 'á~ñ hó~úr', + hh : '%d h~óúrs', + d : 'á ~dáý', + dd : '%d d~áýs', + M : 'á ~móñ~th', + MM : '%d m~óñt~hs', + y : 'á ~ýéár', + yy : '%d ý~éárs' + }, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/yo.js b/node_modules/moment/src/locale/yo.js new file mode 100644 index 0000000..26f3aa9 --- /dev/null +++ b/node_modules/moment/src/locale/yo.js @@ -0,0 +1,50 @@ +//! moment.js locale configuration +//! locale : Yoruba Nigeria [yo] +//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe + +import moment from '../moment'; + +export default moment.defineLocale('yo', { + months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'), + monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Ònì ni] LT', + nextDay : '[Ọ̀la ni] LT', + nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT', + lastDay : '[Àna ni] LT', + lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ní %s', + past : '%s kọjá', + s : 'ìsẹjú aayá die', + m : 'ìsẹjú kan', + mm : 'ìsẹjú %d', + h : 'wákati kan', + hh : 'wákati %d', + d : 'ọjọ́ kan', + dd : 'ọjọ́ %d', + M : 'osù kan', + MM : 'osù %d', + y : 'ọdún kan', + yy : 'ọdún %d' + }, + dayOfMonthOrdinalParse : /ọjọ́\s\d{1,2}/, + ordinal : 'ọjọ́ %d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); diff --git a/node_modules/moment/src/locale/zh-cn.js b/node_modules/moment/src/locale/zh-cn.js new file mode 100644 index 0000000..662f304 --- /dev/null +++ b/node_modules/moment/src/locale/zh-cn.js @@ -0,0 +1,102 @@ +//! moment.js locale configuration +//! locale : Chinese (China) [zh-cn] +//! author : suupic : https://github.com/suupic +//! author : Zeno Zeng : https://github.com/zenozeng + +import moment from '../moment'; + +export default moment.defineLocale('zh-cn', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日Ah点mm分', + LLLL : 'YYYY年MMMD日ddddAh点mm分', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || + meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime : { + future : '%s内', + past : '%s前', + s : '几秒', + m : '1 分钟', + mm : '%d 分钟', + h : '1 小时', + hh : '%d 小时', + d : '1 天', + dd : '%d 天', + M : '1 个月', + MM : '%d 个月', + y : '1 年', + yy : '%d 年' + }, + week : { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + diff --git a/node_modules/moment/src/locale/zh-hk.js b/node_modules/moment/src/locale/zh-hk.js new file mode 100644 index 0000000..73430a4 --- /dev/null +++ b/node_modules/moment/src/locale/zh-hk.js @@ -0,0 +1,95 @@ +//! moment.js locale configuration +//! locale : Chinese (Hong Kong) [zh-hk] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +//! author : Konstantin : https://github.com/skfd + +import moment from '../moment'; + +export default moment.defineLocale('zh-hk', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 年', + yy : '%d 年' + } +}); diff --git a/node_modules/moment/src/locale/zh-tw.js b/node_modules/moment/src/locale/zh-tw.js new file mode 100644 index 0000000..6bb6a7c --- /dev/null +++ b/node_modules/moment/src/locale/zh-tw.js @@ -0,0 +1,94 @@ +//! moment.js locale configuration +//! locale : Chinese (Taiwan) [zh-tw] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris + +import moment from '../moment'; + +export default moment.defineLocale('zh-tw', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY年MMMD日', + LL : 'YYYY年MMMD日', + LLL : 'YYYY年MMMD日 HH:mm', + LLLL : 'YYYY年MMMD日dddd HH:mm', + l : 'YYYY年MMMD日', + ll : 'YYYY年MMMD日', + lll : 'YYYY年MMMD日 HH:mm', + llll : 'YYYY年MMMD日dddd HH:mm' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 年', + yy : '%d 年' + } +}); diff --git a/node_modules/moment/src/moment.js b/node_modules/moment/src/moment.js new file mode 100644 index 0000000..4d5f3be --- /dev/null +++ b/node_modules/moment/src/moment.js @@ -0,0 +1,82 @@ +//! moment.js +//! version : 2.18.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +import { hooks as moment, setHookCallback } from './lib/utils/hooks'; + +moment.version = '2.18.1'; + +import { + min, + max, + now, + isMoment, + momentPrototype as fn, + createUTC as utc, + createUnix as unix, + createLocal as local, + createInvalid as invalid, + createInZone as parseZone +} from './lib/moment/moment'; + +import { + getCalendarFormat +} from './lib/moment/calendar'; + +import { + defineLocale, + updateLocale, + getSetGlobalLocale as locale, + getLocale as localeData, + listLocales as locales, + listMonths as months, + listMonthsShort as monthsShort, + listWeekdays as weekdays, + listWeekdaysMin as weekdaysMin, + listWeekdaysShort as weekdaysShort +} from './lib/locale/locale'; + +import { + isDuration, + createDuration as duration, + getSetRelativeTimeRounding as relativeTimeRounding, + getSetRelativeTimeThreshold as relativeTimeThreshold +} from './lib/duration/duration'; + +import { normalizeUnits } from './lib/units/units'; + +import isDate from './lib/utils/is-date'; + +setHookCallback(local); + +moment.fn = fn; +moment.min = min; +moment.max = max; +moment.now = now; +moment.utc = utc; +moment.unix = unix; +moment.months = months; +moment.isDate = isDate; +moment.locale = locale; +moment.invalid = invalid; +moment.duration = duration; +moment.isMoment = isMoment; +moment.weekdays = weekdays; +moment.parseZone = parseZone; +moment.localeData = localeData; +moment.isDuration = isDuration; +moment.monthsShort = monthsShort; +moment.weekdaysMin = weekdaysMin; +moment.defineLocale = defineLocale; +moment.updateLocale = updateLocale; +moment.locales = locales; +moment.weekdaysShort = weekdaysShort; +moment.normalizeUnits = normalizeUnits; +moment.relativeTimeRounding = relativeTimeRounding; +moment.relativeTimeThreshold = relativeTimeThreshold; +moment.calendarFormat = getCalendarFormat; +moment.prototype = fn; + +export default moment; diff --git a/node_modules/ms/LICENSE.md b/node_modules/ms/LICENSE.md new file mode 100644 index 0000000..69b6125 --- /dev/null +++ b/node_modules/ms/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/ms/README.md b/node_modules/ms/README.md new file mode 100644 index 0000000..5b47570 --- /dev/null +++ b/node_modules/ms/README.md @@ -0,0 +1,52 @@ +# ms + +[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) +[![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) +[![Slack Channel](https://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +``` + +### Convert from milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(ms('10 hours')) // "10h" +``` + +### Time format written-out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [node](https://nodejs.org) and in the browser. +- If a number is supplied to `ms`, a string with a unit is returned. +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`). +- If you pass a string with a number and a valid unit, the number of equivalent ms is returned. + +## Caught a bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/node_modules/ms/index.js b/node_modules/ms/index.js new file mode 100644 index 0000000..824b37e --- /dev/null +++ b/node_modules/ms/index.js @@ -0,0 +1,149 @@ +/** + * Helpers. + */ + +var s = 1000 +var m = s * 60 +var h = m * 60 +var d = h * 24 +var y = d * 365.25 + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} options + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function (val, options) { + options = options || {} + var type = typeof val + if (type === 'string' && val.length > 0) { + return parse(val) + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? + fmtLong(val) : + fmtShort(val) + } + throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)) +} + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str) + if (str.length > 10000) { + return + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str) + if (!match) { + return + } + var n = parseFloat(match[1]) + var type = (match[2] || 'ms').toLowerCase() + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y + case 'days': + case 'day': + case 'd': + return n * d + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n + default: + return undefined + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + if (ms >= d) { + return Math.round(ms / d) + 'd' + } + if (ms >= h) { + return Math.round(ms / h) + 'h' + } + if (ms >= m) { + return Math.round(ms / m) + 'm' + } + if (ms >= s) { + return Math.round(ms / s) + 's' + } + return ms + 'ms' +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms' +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) { + return + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + ' ' + name + } + return Math.ceil(ms / n) + ' ' + name + 's' +} diff --git a/node_modules/ms/package.json b/node_modules/ms/package.json new file mode 100644 index 0000000..8680945 --- /dev/null +++ b/node_modules/ms/package.json @@ -0,0 +1,108 @@ +{ + "_args": [ + [ + { + "raw": "ms@0.7.2", + "scope": null, + "escapedName": "ms", + "name": "ms", + "rawSpec": "0.7.2", + "spec": "0.7.2", + "type": "version" + }, + "/home/burchettm/statsbot/node_modules/superagent/node_modules/debug" + ] + ], + "_from": "ms@0.7.2", + "_id": "ms@0.7.2", + "_inCache": true, + "_location": "/ms", + "_nodeVersion": "6.8.0", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/ms-0.7.2.tgz_1477383407940_0.4743474116548896" + }, + "_npmUser": { + "name": "leo", + "email": "leo@zeit.co" + }, + "_npmVersion": "3.10.8", + "_phantomChildren": {}, + "_requested": { + "raw": "ms@0.7.2", + "scope": null, + "escapedName": "ms", + "name": "ms", + "rawSpec": "0.7.2", + "spec": "0.7.2", + "type": "version" + }, + "_requiredBy": [ + "/superagent/debug" + ], + "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "_shasum": "ae25cf2512b3885a1d95d7f037868d8431124765", + "_shrinkwrap": null, + "_spec": "ms@0.7.2", + "_where": "/home/burchettm/statsbot/node_modules/superagent/node_modules/debug", + "bugs": { + "url": "https://github.com/zeit/ms/issues" + }, + "component": { + "scripts": { + "ms/index.js": "index.js" + } + }, + "dependencies": {}, + "description": "Tiny milisecond conversion utility", + "devDependencies": { + "expect.js": "^0.3.1", + "mocha": "^3.0.2", + "serve": "^1.4.0", + "xo": "^0.17.0" + }, + "directories": {}, + "dist": { + "shasum": "ae25cf2512b3885a1d95d7f037868d8431124765", + "tarball": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + }, + "files": [ + "index.js" + ], + "gitHead": "ac92a7e0790ba2622a74d9d60690ca0d2c070a45", + "homepage": "https://github.com/zeit/ms#readme", + "license": "MIT", + "main": "./index", + "maintainers": [ + { + "name": "leo", + "email": "leo@zeit.co" + }, + { + "name": "rauchg", + "email": "rauchg@gmail.com" + } + ], + "name": "ms", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/zeit/ms.git" + }, + "scripts": { + "test": "xo && mocha test/index.js", + "test-browser": "serve ./test" + }, + "version": "0.7.2", + "xo": { + "space": true, + "semicolon": false, + "envs": [ + "mocha" + ], + "rules": { + "complexity": 0 + } + } +} diff --git a/node_modules/normalize-package-data/.npmignore b/node_modules/normalize-package-data/.npmignore new file mode 100644 index 0000000..2ccbe46 --- /dev/null +++ b/node_modules/normalize-package-data/.npmignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/node_modules/normalize-package-data/.travis.yml b/node_modules/normalize-package-data/.travis.yml new file mode 100644 index 0000000..6e5919d --- /dev/null +++ b/node_modules/normalize-package-data/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/node_modules/normalize-package-data/AUTHORS b/node_modules/normalize-package-data/AUTHORS new file mode 100644 index 0000000..66282ba --- /dev/null +++ b/node_modules/normalize-package-data/AUTHORS @@ -0,0 +1,4 @@ +# Names sorted by how much code was originally theirs. +Isaac Z. Schlueter +Meryn Stol +Robert Kowalski diff --git a/node_modules/normalize-package-data/LICENSE b/node_modules/normalize-package-data/LICENSE new file mode 100644 index 0000000..6ed662c --- /dev/null +++ b/node_modules/normalize-package-data/LICENSE @@ -0,0 +1,30 @@ +This package contains code originally written by Isaac Z. Schlueter. +Used with permission. + +Copyright (c) Meryn Stol ("Author") +All rights reserved. + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/normalize-package-data/README.md b/node_modules/normalize-package-data/README.md new file mode 100644 index 0000000..3772777 --- /dev/null +++ b/node_modules/normalize-package-data/README.md @@ -0,0 +1,106 @@ +# normalize-package-data [![Build Status](https://travis-ci.org/npm/normalize-package-data.png?branch=master)](https://travis-ci.org/npm/normalize-package-data) + +normalize-package-data exports a function that normalizes package metadata. This data is typically found in a package.json file, but in principle could come from any source - for example the npm registry. + +normalize-package-data is used by [read-package-json](https://npmjs.org/package/read-package-json) to normalize the data it reads from a package.json file. In turn, read-package-json is used by [npm](https://npmjs.org/package/npm) and various npm-related tools. + +## Installation + +``` +npm install normalize-package-data +``` + +## Usage + +Basic usage is really simple. You call the function that normalize-package-data exports. Let's call it `normalizeData`. + +```javascript +normalizeData = require('normalize-package-data') +packageData = require("./package.json") +normalizeData(packageData) +// packageData is now normalized +``` + +#### Strict mode + +You may activate strict validation by passing true as the second argument. + +```javascript +normalizeData = require('normalize-package-data') +packageData = require("./package.json") +normalizeData(packageData, true) +// packageData is now normalized +``` + +If strict mode is activated, only Semver 2.0 version strings are accepted. Otherwise, Semver 1.0 strings are accepted as well. Packages must have a name, and the name field must not have contain leading or trailing whitespace. + +#### Warnings + +Optionally, you may pass a "warning" function. It gets called whenever the `normalizeData` function encounters something that doesn't look right. It indicates less than perfect input data. + +```javascript +normalizeData = require('normalize-package-data') +packageData = require("./package.json") +warnFn = function(msg) { console.error(msg) } +normalizeData(packageData, warnFn) +// packageData is now normalized. Any number of warnings may have been logged. +``` + +You may combine strict validation with warnings by passing `true` as the second argument, and `warnFn` as third. + +When `private` field is set to `true`, warnings will be suppressed. + +### Potential exceptions + +If the supplied data has an invalid name or version vield, `normalizeData` will throw an error. Depending on where you call `normalizeData`, you may want to catch these errors so can pass them to a callback. + +## What normalization (currently) entails + +* The value of `name` field gets trimmed (unless in strict mode). +* The value of the `version` field gets cleaned by `semver.clean`. See [documentation for the semver module](https://github.com/isaacs/node-semver). +* If `name` and/or `version` fields are missing, they are set to empty strings. +* If `files` field is not an array, it will be removed. +* If `bin` field is a string, then `bin` field will become an object with `name` set to the value of the `name` field, and `bin` set to the original string value. +* If `man` field is a string, it will become an array with the original string as its sole member. +* If `keywords` field is string, it is considered to be a list of keywords separated by one or more white-space characters. It gets converted to an array by splitting on `\s+`. +* All people fields (`author`, `maintainers`, `contributors`) get converted into objects with name, email and url properties. +* If `bundledDependencies` field (a typo) exists and `bundleDependencies` field does not, `bundledDependencies` will get renamed to `bundleDependencies`. +* If the value of any of the dependencies fields (`dependencies`, `devDependencies`, `optionalDependencies`) is a string, it gets converted into an object with familiar `name=>value` pairs. +* The values in `optionalDependencies` get added to `dependencies`. The `optionalDependencies` array is left untouched. +* As of v2: Dependencies that point at known hosted git providers (currently: github, bitbucket, gitlab) will have their URLs canonicalized, but protocols will be preserved. +* As of v2: Dependencies that use shortcuts for hosted git providers (`org/proj`, `github:org/proj`, `bitbucket:org/proj`, `gitlab:org/proj`, `gist:docid`) will have the shortcut left in place. (In the case of github, the `org/proj` form will be expanded to `github:org/proj`.) THIS MARKS A BREAKING CHANGE FROM V1, where the shorcut was previously expanded to a URL. +* If `description` field does not exist, but `readme` field does, then (more or less) the first paragraph of text that's found in the readme is taken as value for `description`. +* If `repository` field is a string, it will become an object with `url` set to the original string value, and `type` set to `"git"`. +* If `repository.url` is not a valid url, but in the style of "[owner-name]/[repo-name]", `repository.url` will be set to git+https://github.com/[owner-name]/[repo-name].git +* If `bugs` field is a string, the value of `bugs` field is changed into an object with `url` set to the original string value. +* If `bugs` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `bugs` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/issues . If the repository field points to a GitHub Gist repo url, the associated http url is chosen. +* If `bugs` field is an object, the resulting value only has email and url properties. If email and url properties are not strings, they are ignored. If no valid values for either email or url is found, bugs field will be removed. +* If `homepage` field is not a string, it will be removed. +* If the url in the `homepage` field does not specify a protocol, then http is assumed. For example, `myproject.org` will be changed to `http://myproject.org`. +* If `homepage` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `homepage` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]#readme . If the repository field points to a GitHub Gist repo url, the associated http url is chosen. + +### Rules for name field + +If `name` field is given, the value of the name field must be a string. The string may not: + +* start with a period. +* contain the following characters: `/@\s+%` +* contain any characters that would need to be encoded for use in urls. +* resemble the word `node_modules` or `favicon.ico` (case doesn't matter). + +### Rules for version field + +If `version` field is given, the value of the version field must be a valid *semver* string, as determined by the `semver.valid` method. See [documentation for the semver module](https://github.com/isaacs/node-semver). + +### Rules for license field + +The `license` field should be a valid *SPDX license expression* or one of the special values allowed by [validate-npm-package-license](https://npmjs.com/packages/validate-npm-package-license). See [documentation for the license field in package.json](https://docs.npmjs.com/files/package.json#license). + +## Credits + +This package contains code based on read-package-json written by Isaac Z. Schlueter. Used with permisson. + +## License + +normalize-package-data is released under the [BSD 2-Clause License](http://opensource.org/licenses/MIT). +Copyright (c) 2013 Meryn Stol diff --git a/node_modules/normalize-package-data/lib/extract_description.js b/node_modules/normalize-package-data/lib/extract_description.js new file mode 100644 index 0000000..83f10aa --- /dev/null +++ b/node_modules/normalize-package-data/lib/extract_description.js @@ -0,0 +1,14 @@ +module.exports = extractDescription + +// Extracts description from contents of a readme file in markdown format +function extractDescription (d) { + if (!d) return; + if (d === "ERROR: No README data found!") return; + // the first block of text before the first heading + // that isn't the first line heading + d = d.trim().split('\n') + for (var s = 0; d[s] && d[s].trim().match(/^(#|$)/); s ++); + var l = d.length + for (var e = s + 1; e < l && d[e].trim(); e ++); + return d.slice(s, e).join(' ').trim() +} diff --git a/node_modules/normalize-package-data/lib/fixer.js b/node_modules/normalize-package-data/lib/fixer.js new file mode 100644 index 0000000..1409c69 --- /dev/null +++ b/node_modules/normalize-package-data/lib/fixer.js @@ -0,0 +1,418 @@ +var semver = require("semver") +var validateLicense = require('validate-npm-package-license'); +var hostedGitInfo = require("hosted-git-info") +var isBuiltinModule = require("is-builtin-module") +var depTypes = ["dependencies","devDependencies","optionalDependencies"] +var extractDescription = require("./extract_description") +var url = require("url") +var typos = require("./typos") + +var fixer = module.exports = { + // default warning function + warn: function() {}, + + fixRepositoryField: function(data) { + if (data.repositories) { + this.warn("repositories"); + data.repository = data.repositories[0] + } + if (!data.repository) return this.warn("missingRepository") + if (typeof data.repository === "string") { + data.repository = { + type: "git", + url: data.repository + } + } + var r = data.repository.url || "" + if (r) { + var hosted = hostedGitInfo.fromUrl(r) + if (hosted) { + r = data.repository.url + = hosted.getDefaultRepresentation() == "shortcut" ? hosted.https() : hosted.toString() + } + } + + if (r.match(/github.com\/[^\/]+\/[^\/]+\.git\.git$/)) { + this.warn("brokenGitUrl", r) + } + } + +, fixTypos: function(data) { + Object.keys(typos.topLevel).forEach(function (d) { + if (data.hasOwnProperty(d)) { + this.warn("typo", d, typos.topLevel[d]) + } + }, this) + } + +, fixScriptsField: function(data) { + if (!data.scripts) return + if (typeof data.scripts !== "object") { + this.warn("nonObjectScripts") + delete data.scripts + return + } + Object.keys(data.scripts).forEach(function (k) { + if (typeof data.scripts[k] !== "string") { + this.warn("nonStringScript") + delete data.scripts[k] + } else if (typos.script[k] && !data.scripts[typos.script[k]]) { + this.warn("typo", k, typos.script[k], "scripts") + } + }, this) + } + +, fixFilesField: function(data) { + var files = data.files + if (files && !Array.isArray(files)) { + this.warn("nonArrayFiles") + delete data.files + } else if (data.files) { + data.files = data.files.filter(function(file) { + if (!file || typeof file !== "string") { + this.warn("invalidFilename", file) + return false + } else { + return true + } + }, this) + } + } + +, fixBinField: function(data) { + if (!data.bin) return; + if (typeof data.bin === "string") { + var b = {} + var match + if (match = data.name.match(/^@[^/]+[/](.*)$/)) { + b[match[1]] = data.bin + } else { + b[data.name] = data.bin + } + data.bin = b + } + } + +, fixManField: function(data) { + if (!data.man) return; + if (typeof data.man === "string") { + data.man = [ data.man ] + } + } +, fixBundleDependenciesField: function(data) { + var bdd = "bundledDependencies" + var bd = "bundleDependencies" + if (data[bdd] && !data[bd]) { + data[bd] = data[bdd] + delete data[bdd] + } + if (data[bd] && !Array.isArray(data[bd])) { + this.warn("nonArrayBundleDependencies") + delete data[bd] + } else if (data[bd]) { + data[bd] = data[bd].filter(function(bd) { + if (!bd || typeof bd !== 'string') { + this.warn("nonStringBundleDependency", bd) + return false + } else { + if (!data.dependencies) { + data.dependencies = {} + } + if (!data.dependencies.hasOwnProperty(bd)) { + this.warn("nonDependencyBundleDependency", bd) + data.dependencies[bd] = "*" + } + return true + } + }, this) + } + } + +, fixDependencies: function(data, strict) { + var loose = !strict + objectifyDeps(data, this.warn) + addOptionalDepsToDeps(data, this.warn) + this.fixBundleDependenciesField(data) + + ;['dependencies','devDependencies'].forEach(function(deps) { + if (!(deps in data)) return + if (!data[deps] || typeof data[deps] !== "object") { + this.warn("nonObjectDependencies", deps) + delete data[deps] + return + } + Object.keys(data[deps]).forEach(function (d) { + var r = data[deps][d] + if (typeof r !== 'string') { + this.warn("nonStringDependency", d, JSON.stringify(r)) + delete data[deps][d] + } + var hosted = hostedGitInfo.fromUrl(data[deps][d]) + if (hosted) data[deps][d] = hosted.toString() + }, this) + }, this) + } + +, fixModulesField: function (data) { + if (data.modules) { + this.warn("deprecatedModules") + delete data.modules + } + } + +, fixKeywordsField: function (data) { + if (typeof data.keywords === "string") { + data.keywords = data.keywords.split(/,\s+/) + } + if (data.keywords && !Array.isArray(data.keywords)) { + delete data.keywords + this.warn("nonArrayKeywords") + } else if (data.keywords) { + data.keywords = data.keywords.filter(function(kw) { + if (typeof kw !== "string" || !kw) { + this.warn("nonStringKeyword"); + return false + } else { + return true + } + }, this) + } + } + +, fixVersionField: function(data, strict) { + // allow "loose" semver 1.0 versions in non-strict mode + // enforce strict semver 2.0 compliance in strict mode + var loose = !strict + if (!data.version) { + data.version = "" + return true + } + if (!semver.valid(data.version, loose)) { + throw new Error('Invalid version: "'+ data.version + '"') + } + data.version = semver.clean(data.version, loose) + return true + } + +, fixPeople: function(data) { + modifyPeople(data, unParsePerson) + modifyPeople(data, parsePerson) + } + +, fixNameField: function(data, options) { + if (typeof options === "boolean") options = {strict: options} + else if (typeof options === "undefined") options = {} + var strict = options.strict + if (!data.name && !strict) { + data.name = "" + return + } + if (typeof data.name !== "string") { + throw new Error("name field must be a string.") + } + if (!strict) + data.name = data.name.trim() + ensureValidName(data.name, strict, options.allowLegacyCase) + if (isBuiltinModule(data.name)) + this.warn("conflictingName", data.name) + } + + +, fixDescriptionField: function (data) { + if (data.description && typeof data.description !== 'string') { + this.warn("nonStringDescription") + delete data.description + } + if (data.readme && !data.description) + data.description = extractDescription(data.readme) + if(data.description === undefined) delete data.description; + if (!data.description) this.warn("missingDescription") + } + +, fixReadmeField: function (data) { + if (!data.readme) { + this.warn("missingReadme") + data.readme = "ERROR: No README data found!" + } + } + +, fixBugsField: function(data) { + if (!data.bugs && data.repository && data.repository.url) { + var hosted = hostedGitInfo.fromUrl(data.repository.url) + if(hosted && hosted.bugs()) { + data.bugs = {url: hosted.bugs()} + } + } + else if(data.bugs) { + var emailRe = /^.+@.*\..+$/ + if(typeof data.bugs == "string") { + if(emailRe.test(data.bugs)) + data.bugs = {email:data.bugs} + else if(url.parse(data.bugs).protocol) + data.bugs = {url: data.bugs} + else + this.warn("nonEmailUrlBugsString") + } + else { + bugsTypos(data.bugs, this.warn) + var oldBugs = data.bugs + data.bugs = {} + if(oldBugs.url) { + if(typeof(oldBugs.url) == "string" && url.parse(oldBugs.url).protocol) + data.bugs.url = oldBugs.url + else + this.warn("nonUrlBugsUrlField") + } + if(oldBugs.email) { + if(typeof(oldBugs.email) == "string" && emailRe.test(oldBugs.email)) + data.bugs.email = oldBugs.email + else + this.warn("nonEmailBugsEmailField") + } + } + if(!data.bugs.email && !data.bugs.url) { + delete data.bugs + this.warn("emptyNormalizedBugs") + } + } + } + +, fixHomepageField: function(data) { + if (!data.homepage && data.repository && data.repository.url) { + var hosted = hostedGitInfo.fromUrl(data.repository.url) + if (hosted && hosted.docs()) data.homepage = hosted.docs() + } + if (!data.homepage) return + + if(typeof data.homepage !== "string") { + this.warn("nonUrlHomepage") + return delete data.homepage + } + if(!url.parse(data.homepage).protocol) { + this.warn("missingProtocolHomepage") + data.homepage = "http://" + data.homepage + } + } + +, fixLicenseField: function(data) { + if (!data.license) { + return this.warn("missingLicense") + } else{ + if ( + typeof(data.license) !== 'string' || + data.license.length < 1 + ) { + this.warn("invalidLicense") + } else { + if (!validateLicense(data.license).validForNewPackages) + this.warn("invalidLicense") + } + } + } +} + +function isValidScopedPackageName(spec) { + if (spec.charAt(0) !== '@') return false + + var rest = spec.slice(1).split('/') + if (rest.length !== 2) return false + + return rest[0] && rest[1] && + rest[0] === encodeURIComponent(rest[0]) && + rest[1] === encodeURIComponent(rest[1]) +} + +function isCorrectlyEncodedName(spec) { + return !spec.match(/[\/@\s\+%:]/) && + spec === encodeURIComponent(spec) +} + +function ensureValidName (name, strict, allowLegacyCase) { + if (name.charAt(0) === "." || + !(isValidScopedPackageName(name) || isCorrectlyEncodedName(name)) || + (strict && (!allowLegacyCase) && name !== name.toLowerCase()) || + name.toLowerCase() === "node_modules" || + name.toLowerCase() === "favicon.ico") { + throw new Error("Invalid name: " + JSON.stringify(name)) + } +} + +function modifyPeople (data, fn) { + if (data.author) data.author = fn(data.author) + ;["maintainers", "contributors"].forEach(function (set) { + if (!Array.isArray(data[set])) return; + data[set] = data[set].map(fn) + }) + return data +} + +function unParsePerson (person) { + if (typeof person === "string") return person + var name = person.name || "" + var u = person.url || person.web + var url = u ? (" ("+u+")") : "" + var e = person.email || person.mail + var email = e ? (" <"+e+">") : "" + return name+email+url +} + +function parsePerson (person) { + if (typeof person !== "string") return person + var name = person.match(/^([^\(<]+)/) + var url = person.match(/\(([^\)]+)\)/) + var email = person.match(/<([^>]+)>/) + var obj = {} + if (name && name[0].trim()) obj.name = name[0].trim() + if (email) obj.email = email[1]; + if (url) obj.url = url[1]; + return obj +} + +function addOptionalDepsToDeps (data, warn) { + var o = data.optionalDependencies + if (!o) return; + var d = data.dependencies || {} + Object.keys(o).forEach(function (k) { + d[k] = o[k] + }) + data.dependencies = d +} + +function depObjectify (deps, type, warn) { + if (!deps) return {} + if (typeof deps === "string") { + deps = deps.trim().split(/[\n\r\s\t ,]+/) + } + if (!Array.isArray(deps)) return deps + warn("deprecatedArrayDependencies", type) + var o = {} + deps.filter(function (d) { + return typeof d === "string" + }).forEach(function(d) { + d = d.trim().split(/(:?[@\s><=])/) + var dn = d.shift() + var dv = d.join("") + dv = dv.trim() + dv = dv.replace(/^@/, "") + o[dn] = dv + }) + return o +} + +function objectifyDeps (data, warn) { + depTypes.forEach(function (type) { + if (!data[type]) return; + data[type] = depObjectify(data[type], type, warn) + }) +} + +function bugsTypos(bugs, warn) { + if (!bugs) return + Object.keys(bugs).forEach(function (k) { + if (typos.bugs[k]) { + warn("typo", k, typos.bugs[k], "bugs") + bugs[typos.bugs[k]] = bugs[k] + delete bugs[k] + } + }) +} diff --git a/node_modules/normalize-package-data/lib/make_warning.js b/node_modules/normalize-package-data/lib/make_warning.js new file mode 100644 index 0000000..4ac74ad --- /dev/null +++ b/node_modules/normalize-package-data/lib/make_warning.js @@ -0,0 +1,23 @@ +var util = require("util") +var messages = require("./warning_messages.json") + +module.exports = function() { + var args = Array.prototype.slice.call(arguments, 0) + var warningName = args.shift() + if (warningName == "typo") { + return makeTypoWarning.apply(null,args) + } + else { + var msgTemplate = messages[warningName] ? messages[warningName] : warningName + ": '%s'" + args.unshift(msgTemplate) + return util.format.apply(null, args) + } +} + +function makeTypoWarning (providedName, probableName, field) { + if (field) { + providedName = field + "['" + providedName + "']" + probableName = field + "['" + probableName + "']" + } + return util.format(messages.typo, providedName, probableName) +} diff --git a/node_modules/normalize-package-data/lib/normalize.js b/node_modules/normalize-package-data/lib/normalize.js new file mode 100644 index 0000000..bd1bfef --- /dev/null +++ b/node_modules/normalize-package-data/lib/normalize.js @@ -0,0 +1,39 @@ +module.exports = normalize + +var fixer = require("./fixer") +normalize.fixer = fixer + +var makeWarning = require("./make_warning") + +var fieldsToFix = ['name','version','description','repository','modules','scripts' + ,'files','bin','man','bugs','keywords','readme','homepage','license'] +var otherThingsToFix = ['dependencies','people', 'typos'] + +var thingsToFix = fieldsToFix.map(function(fieldName) { + return ucFirst(fieldName) + "Field" +}) +// two ways to do this in CoffeeScript on only one line, sub-70 chars: +// thingsToFix = fieldsToFix.map (name) -> ucFirst(name) + "Field" +// thingsToFix = (ucFirst(name) + "Field" for name in fieldsToFix) +thingsToFix = thingsToFix.concat(otherThingsToFix) + +function normalize (data, warn, strict) { + if(warn === true) warn = null, strict = true + if(!strict) strict = false + if(!warn || data.private) warn = function(msg) { /* noop */ } + + if (data.scripts && + data.scripts.install === "node-gyp rebuild" && + !data.scripts.preinstall) { + data.gypfile = true + } + fixer.warn = function() { warn(makeWarning.apply(null, arguments)) } + thingsToFix.forEach(function(thingName) { + fixer["fix" + ucFirst(thingName)](data, strict) + }) + data._id = data.name + "@" + data.version +} + +function ucFirst (string) { + return string.charAt(0).toUpperCase() + string.slice(1); +} diff --git a/node_modules/normalize-package-data/lib/safe_format.js b/node_modules/normalize-package-data/lib/safe_format.js new file mode 100644 index 0000000..b07f100 --- /dev/null +++ b/node_modules/normalize-package-data/lib/safe_format.js @@ -0,0 +1,9 @@ +var util = require('util') + +module.exports = function() { + var args = Array.prototype.slice.call(arguments, 0) + args.forEach(function(arg) { + if (!arg) throw new TypeError('Bad arguments.') + }) + return util.format.apply(null, arguments) +} diff --git a/node_modules/normalize-package-data/lib/typos.json b/node_modules/normalize-package-data/lib/typos.json new file mode 100644 index 0000000..7f9dd28 --- /dev/null +++ b/node_modules/normalize-package-data/lib/typos.json @@ -0,0 +1,25 @@ +{ + "topLevel": { + "dependancies": "dependencies" + ,"dependecies": "dependencies" + ,"depdenencies": "dependencies" + ,"devEependencies": "devDependencies" + ,"depends": "dependencies" + ,"dev-dependencies": "devDependencies" + ,"devDependences": "devDependencies" + ,"devDepenencies": "devDependencies" + ,"devdependencies": "devDependencies" + ,"repostitory": "repository" + ,"repo": "repository" + ,"prefereGlobal": "preferGlobal" + ,"hompage": "homepage" + ,"hampage": "homepage" + ,"autohr": "author" + ,"autor": "author" + ,"contributers": "contributors" + ,"publicationConfig": "publishConfig" + ,"script": "scripts" + }, + "bugs": { "web": "url", "name": "url" }, + "script": { "server": "start", "tests": "test" } +} diff --git a/node_modules/normalize-package-data/lib/warning_messages.json b/node_modules/normalize-package-data/lib/warning_messages.json new file mode 100644 index 0000000..5fd19f3 --- /dev/null +++ b/node_modules/normalize-package-data/lib/warning_messages.json @@ -0,0 +1,31 @@ +{ + "repositories": "'repositories' (plural) Not supported. Please pick one as the 'repository' field" + ,"missingRepository": "No repository field." + ,"brokenGitUrl": "Probably broken git url: %s" + ,"nonObjectScripts": "scripts must be an object" + ,"nonStringScript": "script values must be string commands" + ,"nonArrayFiles": "Invalid 'files' member" + ,"invalidFilename": "Invalid filename in 'files' list: %s" + ,"nonArrayBundleDependencies": "Invalid 'bundleDependencies' list. Must be array of package names" + ,"nonStringBundleDependency": "Invalid bundleDependencies member: %s" + ,"nonDependencyBundleDependency": "Non-dependency in bundleDependencies: %s" + ,"nonObjectDependencies": "%s field must be an object" + ,"nonStringDependency": "Invalid dependency: %s %s" + ,"deprecatedArrayDependencies": "specifying %s as array is deprecated" + ,"deprecatedModules": "modules field is deprecated" + ,"nonArrayKeywords": "keywords should be an array of strings" + ,"nonStringKeyword": "keywords should be an array of strings" + ,"conflictingName": "%s is also the name of a node core module." + ,"nonStringDescription": "'description' field should be a string" + ,"missingDescription": "No description" + ,"missingReadme": "No README data" + ,"missingLicense": "No license field." + ,"nonEmailUrlBugsString": "Bug string field must be url, email, or {email,url}" + ,"nonUrlBugsUrlField": "bugs.url field must be a string url. Deleted." + ,"nonEmailBugsEmailField": "bugs.email field must be a string email. Deleted." + ,"emptyNormalizedBugs": "Normalized value of bugs field is an empty object. Deleted." + ,"nonUrlHomepage": "homepage field must be a string url. Deleted." + ,"invalidLicense": "license should be a valid SPDX license expression" + ,"missingProtocolHomepage": "homepage field must start with a protocol." + ,"typo": "%s should probably be %s." +} diff --git a/node_modules/normalize-package-data/package.json b/node_modules/normalize-package-data/package.json new file mode 100644 index 0000000..e942af3 --- /dev/null +++ b/node_modules/normalize-package-data/package.json @@ -0,0 +1,124 @@ +{ + "_args": [ + [ + { + "raw": "normalize-package-data@^2.3.4", + "scope": null, + "escapedName": "normalize-package-data", + "name": "normalize-package-data", + "rawSpec": "^2.3.4", + "spec": ">=2.3.4 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/meow" + ] + ], + "_from": "normalize-package-data@>=2.3.4 <3.0.0", + "_id": "normalize-package-data@2.3.6", + "_inCache": true, + "_location": "/normalize-package-data", + "_nodeVersion": "7.7.1", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/normalize-package-data-2.3.6.tgz_1488928112411_0.01280554523691535" + }, + "_npmUser": { + "name": "zkat", + "email": "kat@sykosomatic.org" + }, + "_npmVersion": "4.1.2", + "_phantomChildren": {}, + "_requested": { + "raw": "normalize-package-data@^2.3.4", + "scope": null, + "escapedName": "normalize-package-data", + "name": "normalize-package-data", + "rawSpec": "^2.3.4", + "spec": ">=2.3.4 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/meow", + "/read-pkg" + ], + "_resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.6.tgz", + "_shasum": "498fa420c96401f787402ba21e600def9f981fff", + "_shrinkwrap": null, + "_spec": "normalize-package-data@^2.3.4", + "_where": "/home/burchettm/statsbot/node_modules/meow", + "author": { + "name": "Meryn Stol", + "email": "merynstol@gmail.com" + }, + "bugs": { + "url": "https://github.com/npm/normalize-package-data/issues" + }, + "contributors": [ + { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me" + }, + { + "name": "Meryn Stol", + "email": "merynstol@gmail.com" + }, + { + "name": "Robert Kowalski", + "email": "rok@kowalski.gd" + } + ], + "dependencies": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "description": "Normalizes data that can be found in package.json files.", + "devDependencies": { + "async": "^1.5.0", + "tap": "^2.2.0", + "underscore": "^1.8.3" + }, + "directories": {}, + "dist": { + "shasum": "498fa420c96401f787402ba21e600def9f981fff", + "tarball": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.6.tgz" + }, + "gitHead": "f6c37066edd095c0e465f6e181c0cd79a02f6c3d", + "homepage": "https://github.com/npm/normalize-package-data#readme", + "license": "BSD-2-Clause", + "main": "lib/normalize.js", + "maintainers": [ + { + "name": "iarna", + "email": "me@re-becca.org" + }, + { + "name": "isaacs", + "email": "isaacs@npmjs.com" + }, + { + "name": "meryn", + "email": "merynstol@gmail.com" + }, + { + "name": "othiym23", + "email": "ogd@aoaioxxysz.net" + }, + { + "name": "zkat", + "email": "kat@sykosomatic.org" + } + ], + "name": "normalize-package-data", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/npm/normalize-package-data.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "2.3.6" +} diff --git a/node_modules/normalize-package-data/test/basic.js b/node_modules/normalize-package-data/test/basic.js new file mode 100644 index 0000000..12c403e --- /dev/null +++ b/node_modules/normalize-package-data/test/basic.js @@ -0,0 +1,34 @@ +var tap = require("tap") +var normalize = require("../lib/normalize") +var path = require("path") +var fs = require("fs") + +tap.test("basic test", function (t) { + var p = path.resolve(__dirname, "./fixtures/read-package-json.json") + fs.readFile (p, function (err, contents) { + if (err) throw err; + var originalData = JSON.parse(contents.toString()) + var data = JSON.parse(contents.toString()) + normalize(data) + t.ok(data) + verifyFields(t, data, originalData) + t.end() + }) +}) + +function verifyFields (t, normalized, original) { + t.equal(normalized.version, original.version, "Version field stays same") + t.equal(normalized._id, normalized.name + "@" + normalized.version, "It gets good id.") + t.equal(normalized.name, original.name, "Name stays the same.") + t.type(normalized.author, "object", "author field becomes object") + t.deepEqual(normalized.scripts, original.scripts, "scripts field (object) stays same") + t.equal(normalized.main, original.main) + // optional deps are folded in. + t.deepEqual(normalized.optionalDependencies, + original.optionalDependencies) + t.has(normalized.dependencies, original.optionalDependencies, "opt depedencies are copied into dependencies") + t.has(normalized.dependencies, original.dependencies, "regular depedencies stay in place") + t.deepEqual(normalized.devDependencies, original.devDependencies) + t.type(normalized.bugs, "object", "bugs should become object") + t.equal(normalized.bugs.url, "https://github.com/isaacs/read-package-json/issues") +} diff --git a/node_modules/normalize-package-data/test/consistency.js b/node_modules/normalize-package-data/test/consistency.js new file mode 100644 index 0000000..6bce17a --- /dev/null +++ b/node_modules/normalize-package-data/test/consistency.js @@ -0,0 +1,36 @@ +var tap = require("tap") +var normalize = require("../lib/normalize") +var path = require("path") +var fs = require("fs") +var _ = require("underscore") +var async = require("async") + +var data, clonedData +var warn + +tap.test("consistent normalization", function(t) { + path.resolve(__dirname, "./fixtures/read-package-json.json") + fs.readdir (__dirname + "/fixtures", function (err, entries) { + // entries = ['coffee-script.json'] // uncomment to limit to a specific file + verifyConsistency = function(entryName, next) { + warn = function(msg) { + // t.equal("",msg) // uncomment to have some kind of logging of warnings + } + filename = __dirname + "/fixtures/" + entryName + fs.readFile(filename, function(err, contents) { + if (err) return next(err) + data = JSON.parse(contents.toString()) + normalize(data, warn) + clonedData = _.clone(data) + normalize(data, warn) + t.deepEqual(clonedData, data, + "Normalization of " + entryName + " is consistent.") + next(null) + }) // fs.readFile + } // verifyConsistency + async.forEach(entries, verifyConsistency, function(err) { + if (err) throw err + t.end() + }) + }) // fs.readdir +}) // tap.test diff --git a/node_modules/normalize-package-data/test/dependencies.js b/node_modules/normalize-package-data/test/dependencies.js new file mode 100644 index 0000000..5a5aff5 --- /dev/null +++ b/node_modules/normalize-package-data/test/dependencies.js @@ -0,0 +1,44 @@ +var tap = require("tap") +var normalize = require("../lib/normalize") + +var warningMessages = require("../lib/warning_messages.json") +var safeFormat = require("../lib/safe_format") + +tap.test("warn if dependency contains anything else but a string", function(t) { + var a + var warnings = [] + function warn(w) { + warnings.push(w) + } + normalize(a={ + dependencies: { "a": 123}, + devDependencies: { "b": 456}, + optionalDependencies: { "c": 789} + }, warn) + + var wanted1 = safeFormat(warningMessages.nonStringDependency, "a", 123) + var wanted2 = safeFormat(warningMessages.nonStringDependency, "b", 456) + var wanted3 = safeFormat(warningMessages.nonStringDependency, "c", 789) + t.ok(~warnings.indexOf(wanted1), wanted1) + t.ok(~warnings.indexOf(wanted2), wanted2) + t.ok(~warnings.indexOf(wanted3), wanted3) + t.end() +}) + +tap.test("warn if bundleDependencies array contains anything else but strings", function(t) { + var a + var warnings = [] + function warn(w) { + warnings.push(w) + } + normalize(a={ + bundleDependencies: ["abc", 123, {foo:"bar"}] + }, warn) + + var wanted1 = safeFormat(warningMessages.nonStringBundleDependency, 123) + var wanted2 = safeFormat(warningMessages.nonStringBundleDependency, {foo:"bar"}) + var wanted2 = safeFormat(warningMessages.nonDependencyBundleDependency, "abc") + t.ok(~warnings.indexOf(wanted1), wanted1) + t.ok(~warnings.indexOf(wanted2), wanted2) + t.end() +}) diff --git a/node_modules/normalize-package-data/test/fixtures/async.json b/node_modules/normalize-package-data/test/fixtures/async.json new file mode 100644 index 0000000..9fa85b5 --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/async.json @@ -0,0 +1,36 @@ +{ + "name": "async", + "description": "Higher-order functions and common patterns for asynchronous code", + "main": "./lib/async", + "author": "Caolan McMahon", + "version": "0.2.6", + "repository" : { + "type" : "git", + "url" : "http://github.com/caolan/async.git" + }, + "bugs" : { + "url" : "http://github.com/caolan/async/issues" + }, + "licenses" : [ + { + "type" : "MIT", + "url" : "http://github.com/caolan/async/raw/master/LICENSE" + } + ], + "devDependencies": { + "nodeunit": ">0.0.0", + "uglify-js": "1.2.x", + "nodelint": ">0.0.0" + }, + "jam": { + "main": "lib/async.js", + "include": [ + "lib/async.js", + "README.md", + "LICENSE" + ] + }, + "scripts": { + "test": "nodeunit test/test-async.js" + } +} diff --git a/node_modules/normalize-package-data/test/fixtures/badscripts.json b/node_modules/normalize-package-data/test/fixtures/badscripts.json new file mode 100644 index 0000000..25feb4c --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/badscripts.json @@ -0,0 +1,5 @@ +{ + "name": "bad-scripts-package", + "version": "0.0.1", + "scripts": "foo" +} diff --git a/node_modules/normalize-package-data/test/fixtures/bcrypt.json b/node_modules/normalize-package-data/test/fixtures/bcrypt.json new file mode 100644 index 0000000..2cf3ba9 --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/bcrypt.json @@ -0,0 +1,56 @@ +{ + "name": "bcrypt", + "description": "A bcrypt library for NodeJS.", + "keywords": [ + "bcrypt", + "password", + "auth", + "authentication", + "encryption", + "crypt", + "crypto" + ], + "main": "./bcrypt", + "version": "0.7.5", + "author": "Nick Campbell (http://github.com/ncb000gt)", + "engines": { + "node": ">= 0.6.0" + }, + "repository": { + "type": "git", + "url": "http://github.com/ncb000gt/node.bcrypt.js.git" + }, + "licenses": [ + { + "type": "MIT" + } + ], + "bugs": { + "url": "http://github.com/ncb000gt/node.bcrypt.js/issues" + }, + "scripts": { + "test": "node-gyp configure build && nodeunit test" + }, + "dependencies": { + "bindings": "1.0.0" + }, + "devDependencies": { + "nodeunit": ">=0.6.4" + }, + "contributors": [ + "Antonio Salazar Cardozo (https://github.com/Shadowfiend)", + "Van Nguyen (https://github.com/thegoleffect)", + "David Trejo (https://github.com/dtrejo)", + "Ben Glow (https://github.com/pixelglow)", + "NewITFarmer.com <> (https://github.com/newitfarmer)", + "Alfred Westerveld (https://github.com/alfredwesterveld)", + "Vincent Côté-Roy (https://github.com/vincentcr)", + "Lloyd Hilaiel (https://github.com/lloyd)", + "Roman Shtylman (https://github.com/shtylman)", + "Vadim Graboys (https://github.com/vadimg)", + "Ben Noorduis <> (https://github.com/bnoordhuis)", + "Nate Rajlich (https://github.com/tootallnate)", + "Sean McArthur (https://github.com/seanmonstar)", + "Fanie Oosthuysen (https://github.com/weareu)" + ] +} diff --git a/node_modules/normalize-package-data/test/fixtures/coffee-script.json b/node_modules/normalize-package-data/test/fixtures/coffee-script.json new file mode 100644 index 0000000..6582289 --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/coffee-script.json @@ -0,0 +1,35 @@ +{ + "name": "coffee-script", + "description": "Unfancy JavaScript", + "keywords": ["javascript", "language", "coffeescript", "compiler"], + "author": "Jeremy Ashkenas", + "version": "1.6.2", + "licenses": [{ + "type": "MIT", + "url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE" + }], + "engines": { + "node": ">=0.8.0" + }, + "directories" : { + "lib" : "./lib/coffee-script" + }, + "main" : "./lib/coffee-script/coffee-script", + "bin": { + "coffee": "./bin/coffee", + "cake": "./bin/cake" + }, + "scripts": { + "test": "node ./bin/cake test" + }, + "homepage": "http://coffeescript.org", + "bugs": "https://github.com/jashkenas/coffee-script/issues", + "repository": { + "type": "git", + "url": "git://github.com/jashkenas/coffee-script.git" + }, + "devDependencies": { + "uglify-js": "~2.2", + "jison": ">=0.2.0" + } +} diff --git a/node_modules/normalize-package-data/test/fixtures/http-server.json b/node_modules/normalize-package-data/test/fixtures/http-server.json new file mode 100644 index 0000000..2ea55eb --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/http-server.json @@ -0,0 +1,53 @@ +{ + "name": "http-server", + "preferGlobal": true, + "version": "0.3.0", + "author": "Nodejitsu ", + "description": "a simple zero-configuration command-line http server", + "contributors": [ + { + "name": "Marak Squires", + "email": "marak@nodejitsu.com" + } + ], + "bin": { + "http-server": "./bin/http-server" + }, + "scripts": { + "start": "node ./bin/http-server", + "test": "vows --spec --isolate", + "predeploy": "echo This will be run before deploying the app", + "postdeploy": "echo This will be run after deploying the app" + }, + "main": "./lib/http-server", + "repository": { + "type": "git", + "url": "https://github.com/nodejitsu/http-server.git" + }, + "keywords": [ + "cli", + "http", + "server" + ], + "dependencies" : { + "colors" : "*", + "flatiron" : "0.1.x", + "optimist" : "0.2.x", + "union" : "0.1.x", + "ecstatic" : "0.1.x", + "plates" : "https://github.com/flatiron/plates/tarball/master" + }, + "analyze": false, + "devDependencies": { + "vows" : "0.5.x", + "request" : "2.1.x" + }, + "bundledDependencies": [ + "union", + "ecstatic" + ], + "license": "MIT", + "engines": { + "node": ">=0.6" + } +} diff --git a/node_modules/normalize-package-data/test/fixtures/movefile.json b/node_modules/normalize-package-data/test/fixtures/movefile.json new file mode 100644 index 0000000..07af4ac --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/movefile.json @@ -0,0 +1,21 @@ +{ + "name": "movefile", + "description": "rename implementation working over devices", + "version": "0.2.0", + "author": "yazgazan ", + "main": "./build/Release/movefile", + "keywords": ["move", "file", "rename"], + "repository": "git://github.com/yazgazan/movefile.git", + "directories": { + "lib": "./build/Release/" + }, + "scripts": { + "install": "./node_modules/node-gyp/bin/node-gyp.js configure && ./node_modules/node-gyp/bin/node-gyp.js build" + }, + "engines": { + "node": "*" + }, + "dependencies": { + "node-gyp": "~0.9.1" + } +} diff --git a/node_modules/normalize-package-data/test/fixtures/no-description.json b/node_modules/normalize-package-data/test/fixtures/no-description.json new file mode 100644 index 0000000..8c481e1 --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/no-description.json @@ -0,0 +1,4 @@ +{ + "name": "foo-bar-package", + "version": "0.0.1" +} diff --git a/node_modules/normalize-package-data/test/fixtures/node-module_exist.json b/node_modules/normalize-package-data/test/fixtures/node-module_exist.json new file mode 100644 index 0000000..b6786f4 --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/node-module_exist.json @@ -0,0 +1,26 @@ +{ + "name": "node-module_exist", + "description": "Find if a NodeJS module is available to require or not", + "version": "0.0.1", + "main": "module_exist.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git@gist.github.com:3135914.git" + }, + "homepage": "https://github.com/FGRibreau", + "author": { + "name": "Francois-Guillaume Ribreau", + "url": "http://fgribreau.com.com/" + }, + "devDependencies": { + "nodeunit": "~0.7.4" + }, + "keywords": [ + "core", + "modules" + ], + "license": "MIT" +} diff --git a/node_modules/normalize-package-data/test/fixtures/npm.json b/node_modules/normalize-package-data/test/fixtures/npm.json new file mode 100644 index 0000000..b4c704d --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/npm.json @@ -0,0 +1,135 @@ +{ + "version": "1.2.17", + "name": "npm", + "publishConfig": { + "proprietary-attribs": false + }, + "description": "A package manager for node", + "keywords": [ + "package manager", + "modules", + "install", + "package.json" + ], + "preferGlobal": true, + "config": { + "publishtest": false + }, + "homepage": "https://npmjs.org/doc/", + "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "repository": { + "type": "git", + "url": "https://github.com/isaacs/npm" + }, + "bugs": { + "email": "npm-@googlegroups.com", + "url": "http://github.com/isaacs/npm/issues" + }, + "directories": { + "doc": "./doc", + "man": "./man", + "lib": "./lib", + "bin": "./bin" + }, + "main": "./lib/npm.js", + "bin": "./bin/npm-cli.js", + "dependencies": { + "semver": "~1.1.2", + "ini": "~1.1.0", + "slide": "1", + "abbrev": "~1.0.4", + "graceful-fs": "~1.2.0", + "minimatch": "~0.2.11", + "nopt": "~2.1.1", + "rimraf": "2", + "request": "~2.9", + "which": "1", + "tar": "~0.1.17", + "fstream": "~0.1.22", + "block-stream": "*", + "inherits": "1", + "mkdirp": "~0.3.3", + "read": "~1.0.4", + "lru-cache": "~2.3.0", + "node-gyp": "~0.9.3", + "fstream-npm": "~0.1.3", + "uid-number": "0", + "archy": "0", + "chownr": "0", + "npmlog": "0", + "ansi": "~0.1.2", + "npm-registry-client": "~0.2.18", + "read-package-json": "~0.3.0", + "read-installed": "0", + "glob": "~3.1.21", + "init-package-json": "0.0.6", + "osenv": "0", + "lockfile": "~0.3.0", + "retry": "~0.6.0", + "once": "~1.1.1", + "npmconf": "0", + "opener": "~1.3.0", + "chmodr": "~0.1.0", + "cmd-shim": "~1.1.0" + }, + "bundleDependencies": [ + "semver", + "ini", + "slide", + "abbrev", + "graceful-fs", + "minimatch", + "nopt", + "rimraf", + "request", + "which", + "tar", + "fstream", + "block-stream", + "inherits", + "mkdirp", + "read", + "lru-cache", + "node-gyp", + "fstream-npm", + "uid-number", + "archy", + "chownr", + "npmlog", + "ansi", + "npm-registry-client", + "read-package-json", + "read-installed", + "glob", + "init-package-json", + "osenv", + "lockfile", + "retry", + "once", + "npmconf", + "opener", + "chmodr", + "cmd-shim" + ], + "devDependencies": { + "ronn": "~0.3.6", + "tap": "~0.4.0" + }, + "engines": { + "node": ">=0.6", + "npm": "1" + }, + "scripts": { + "test": "node ./test/run.js && tap test/tap/*.js", + "tap": "tap test/tap/*.js", + "prepublish": "node bin/npm-cli.js prune ; rm -rf test/*/*/node_modules ; make -j4 doc", + "dumpconf": "env | grep npm | sort | uniq", + "echo": "node bin/npm-cli.js" + }, + "licenses": [ + { + "type": "MIT +no-false-attribs", + "url": "https://github.com/isaacs/npm/raw/master/LICENSE" + } + ] +} diff --git a/node_modules/normalize-package-data/test/fixtures/read-package-json.json b/node_modules/normalize-package-data/test/fixtures/read-package-json.json new file mode 100644 index 0000000..7d0dae1 --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/read-package-json.json @@ -0,0 +1,28 @@ +{ + "name": "read-package-json", + "version": "0.1.1", + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "description": "The thing npm uses to read package.json files with semantics and defaults and validation", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/read-package-json.git" + }, + "license": "MIT", + "main": "read-json.js", + "scripts": { + "test": "tap test/*.js" + }, + "dependencies": { + "glob": "~3.1.9", + "lru-cache": "~1.1.0", + "semver": "~1.0.14", + "slide": "~1.1.3" + }, + "devDependencies": { + "tap": "~0.2.5" + }, + "optionalDependencies": { + "npmlog": "0", + "graceful-fs": "~1.1.8" + } +} diff --git a/node_modules/normalize-package-data/test/fixtures/request.json b/node_modules/normalize-package-data/test/fixtures/request.json new file mode 100644 index 0000000..4d58a95 --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/request.json @@ -0,0 +1,39 @@ +{ + "name": "request", + "description": "Simplified HTTP request client.", + "tags": [ + "http", + "simple", + "util", + "utility" + ], + "version": "2.16.7", + "author": "Mikeal Rogers ", + "repository": { + "type": "git", + "url": "http://github.com/mikeal/request.git" + }, + "bugs": { + "url": "http://github.com/mikeal/request/issues" + }, + "engines": [ + "node >= 0.8.0" + ], + "main": "index.js", + "dependencies": { + "form-data": "~0.0.3", + "mime": "~1.2.7", + "hawk": "~0.10.2", + "node-uuid": "~1.4.0", + "cookie-jar": "~0.2.0", + "aws-sign": "~0.2.0", + "oauth-sign": "~0.2.0", + "forever-agent": "~0.2.0", + "tunnel-agent": "~0.2.0", + "json-stringify-safe": "~3.0.0", + "qs": "~0.5.4" + }, + "scripts": { + "test": "node tests/run.js" + } +} diff --git a/node_modules/normalize-package-data/test/fixtures/underscore.json b/node_modules/normalize-package-data/test/fixtures/underscore.json new file mode 100644 index 0000000..e27cfd8 --- /dev/null +++ b/node_modules/normalize-package-data/test/fixtures/underscore.json @@ -0,0 +1,17 @@ +{ + "name" : "underscore", + "description" : "JavaScript's functional programming helper library.", + "homepage" : "http://underscorejs.org", + "keywords" : ["util", "functional", "server", "client", "browser"], + "author" : "Jeremy Ashkenas ", + "repository" : {"type": "git", "url": "git://github.com/documentcloud/underscore.git"}, + "main" : "underscore.js", + "version" : "1.4.4", + "devDependencies": { + "phantomjs": "1.9.0-1" + }, + "scripts": { + "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true" + }, + "license" : "MIT" +} diff --git a/node_modules/normalize-package-data/test/github-urls.js b/node_modules/normalize-package-data/test/github-urls.js new file mode 100644 index 0000000..da78160 --- /dev/null +++ b/node_modules/normalize-package-data/test/github-urls.js @@ -0,0 +1,44 @@ +var tap = require("tap") +var normalize = require("../lib/normalize") +var fs = require("fs") +var async = require("async") + +var data +var warn + +tap.test("consistent normalization", function(t) { + var entries = [ + 'read-package-json.json', + 'http-server.json', + "movefile.json", + "node-module_exist.json" + ] + var verifyConsistency = function(entryName, next) { + warn = function(msg) { + // t.equal("",msg) // uncomment to have some kind of logging of warnings + } + var filename = __dirname + "/fixtures/" + entryName + fs.readFile(filename, function(err, contents) { + if (err) return next(err) + data = JSON.parse(contents.toString()) + normalize(data, warn) + if(data.name == "node-module_exist") { + t.same(data.bugs.url, "https://gist.github.com/3135914") + } + if(data.name == "read-package-json") { + t.same(data.bugs.url, "https://github.com/isaacs/read-package-json/issues") + } + if(data.name == "http-server") { + t.same(data.bugs.url, "https://github.com/nodejitsu/http-server/issues") + } + if(data.name == "movefile") { + t.same(data.bugs.url, "https://github.com/yazgazan/movefile/issues") + } + next(null) + }) // fs.readFile + } // verifyConsistency + async.forEach(entries, verifyConsistency, function(err) { + if (err) throw err + t.end() + }) +}) // tap.test diff --git a/node_modules/normalize-package-data/test/mixedcase-names.js b/node_modules/normalize-package-data/test/mixedcase-names.js new file mode 100644 index 0000000..a62b699 --- /dev/null +++ b/node_modules/normalize-package-data/test/mixedcase-names.js @@ -0,0 +1,32 @@ +var test = require('tap').test + +var normalize = require('../') +var fixer = normalize.fixer + +test('mixedcase', function (t) { + t.doesNotThrow(function () { + fixer.fixNameField({name: 'foo'}, true) + }) + + t.doesNotThrow(function () { + fixer.fixNameField({name: 'foo'}, false) + }) + + t.doesNotThrow(function () { + fixer.fixNameField({name: 'foo'}) + }) + + t.throws(function () { + fixer.fixNameField({name: 'Foo'}, true) + }, new Error('Invalid name: "Foo"'), 'should throw an error') + + t.throws(function () { + fixer.fixNameField({name: 'Foo'}, {strict: true}) + }, new Error('Invalid name: "Foo"'), 'should throw an error') + + t.doesNotThrow(function () { + fixer.fixNameField({name: 'Foo'}, {strict: true, allowLegacyCase: true}) + }) + + t.end() +}) diff --git a/node_modules/normalize-package-data/test/normalize.js b/node_modules/normalize-package-data/test/normalize.js new file mode 100644 index 0000000..0cd4baf --- /dev/null +++ b/node_modules/normalize-package-data/test/normalize.js @@ -0,0 +1,240 @@ +var tap = require("tap") +var fs = require("fs") +var path = require("path") + +var normalize = require("../lib/normalize") +var warningMessages = require("../lib/warning_messages.json") +var safeFormat = require("../lib/safe_format") + +var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json") + +tap.test("normalize some package data", function(t) { + var packageData = require(rpjPath) + var warnings = [] + normalize(packageData, function(warning) { + warnings.push(warning) + }) + // there's no readme data in this particular object + t.equal( warnings.length, 1, "There's exactly one warning.") + fs.readFile(rpjPath, function(err, data) { + if(err) throw err + // Various changes have been made + t.notEqual(packageData, JSON.parse(data), "Output is different from input.") + t.end() + }) +}) + +tap.test("runs without passing warning function", function(t) { + var packageData = require(rpjPath) + fs.readFile(rpjPath, function(err, data) { + if(err) throw err + normalize(JSON.parse(data)) + t.ok(true, "If you read this, this means I'm still alive.") + t.end() + }) +}) + +tap.test("empty object", function(t) { + var packageData = {} + var expect = + { name: '', + version: '', + readme: 'ERROR: No README data found!', + _id: '@' } + + var warnings = [] + function warn(m) { + warnings.push(m) + } + normalize(packageData, warn) + t.same(packageData, expect) + t.same(warnings, [ + warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + warningMessages.missingLicense + ]) + t.end() +}) + +tap.test("core module name", function(t) { + var warnings = [] + function warn(m) { + warnings.push(m) + } + var a + normalize(a={ + name: "http", + readme: "read yourself how about", + homepage: 123, + bugs: "what is this i don't even", + repository: "Hello." + }, warn) + + var expect = [ + safeFormat(warningMessages.conflictingName, 'http'), + warningMessages.nonEmailUrlBugsString, + warningMessages.emptyNormalizedBugs, + warningMessages.nonUrlHomepage, + warningMessages.missingLicense + ] + t.same(warnings, expect) + t.end() +}) + +tap.test("urls required", function(t) { + var warnings = [] + function warn(w) { + warnings.push(w) + } + normalize({ + bugs: { + url: "/1", + email: "not an email address" + } + }, warn) + var a + normalize(a={ + readme: "read yourself how about", + homepage: 123, + bugs: "what is this i don't even", + repository: "Hello." + }, warn) + + var expect = + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.nonUrlBugsUrlField, + warningMessages.nonEmailBugsEmailField, + warningMessages.emptyNormalizedBugs, + warningMessages.missingReadme, + warningMessages.missingLicense, + warningMessages.nonEmailUrlBugsString, + warningMessages.emptyNormalizedBugs, + warningMessages.nonUrlHomepage, + warningMessages.missingLicense] + t.same(warnings, expect) + t.end() +}) + +tap.test("homepage field must start with a protocol.", function(t) { + var warnings = [] + function warn(w) { + warnings.push(w) + } + var a + normalize(a={ + homepage: 'example.org' + }, warn) + + var expect = + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + warningMessages.missingProtocolHomepage, + warningMessages.missingLicense] + t.same(warnings, expect) + t.same(a.homepage, 'http://example.org') + t.end() +}) + +tap.test("license field should be a valid SPDX expression", function(t) { + var warnings = [] + function warn(w) { + warnings.push(w) + } + var a + normalize(a={ + license: 'Apache 2' + }, warn) + + var expect = + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + warningMessages.invalidLicense] + t.same(warnings, expect) + t.end() +}) + +tap.test("gist bugs url", function(t) { + var d = { + repository: "git@gist.github.com:123456.git" + } + normalize(d) + t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) + t.same(d.bugs, { url: 'https://gist.github.com/123456' }) + t.end(); +}); + +tap.test("singularize repositories", function(t) { + var d = {repositories:["git@gist.github.com:123456.git"]} + normalize(d) + t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) + t.end() +}); + +tap.test("treat visionmedia/express as github repo", function(t) { + var d = {repository: {type: "git", url: "visionmedia/express"}} + normalize(d) + t.same(d.repository, { type: "git", url: "git+https://github.com/visionmedia/express.git" }) + t.end() +}); + +tap.test("treat isaacs/node-graceful-fs as github repo", function(t) { + var d = {repository: {type: "git", url: "isaacs/node-graceful-fs"}} + normalize(d) + t.same(d.repository, { type: "git", url: "git+https://github.com/isaacs/node-graceful-fs.git" }) + t.end() +}); + +tap.test("homepage field will set to github url if repository is a github repo", function(t) { + var a + normalize(a={ + repository: { type: "git", url: "https://github.com/isaacs/node-graceful-fs" } + }) + t.same(a.homepage, 'https://github.com/isaacs/node-graceful-fs#readme') + t.end() +}) + +tap.test("homepage field will set to github gist url if repository is a gist", function(t) { + var a + normalize(a={ + repository: { type: "git", url: "git@gist.github.com:123456.git" } + }) + t.same(a.homepage, 'https://gist.github.com/123456') + t.end() +}) + +tap.test("homepage field will set to github gist url if repository is a shorthand reference", function(t) { + var a + normalize(a={ + repository: { type: "git", url: "sindresorhus/chalk" } + }) + t.same(a.homepage, 'https://github.com/sindresorhus/chalk#readme') + t.end() +}) + +tap.test("don't mangle github shortcuts in dependencies", function(t) { + var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}} + normalize(d) + t.same(d.dependencies, {"node-graceful-fs": "github:isaacs/node-graceful-fs" }) + t.end() +}); + +tap.test("deprecation warning for array in dependencies fields", function(t) { + var a + var warnings = [] + function warn(w) { + warnings.push(w) + } + normalize(a={ + dependencies: [], + devDependencies: [], + optionalDependencies: [] + }, warn) + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning") + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning") + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning") + t.end() +}) diff --git a/node_modules/normalize-package-data/test/scoped.js b/node_modules/normalize-package-data/test/scoped.js new file mode 100644 index 0000000..82d2a54 --- /dev/null +++ b/node_modules/normalize-package-data/test/scoped.js @@ -0,0 +1,59 @@ +var test = require("tap").test + +var fixNameField = require("../lib/fixer.js").fixNameField +var fixBinField = require("../lib/fixer.js").fixBinField + +test("a simple scoped module has a valid name", function (t) { + var data = {name : "@org/package"} + fixNameField(data, false) + t.equal(data.name, "@org/package", "name was unchanged") + + t.end() +}) + +test("'org@package' is not a valid name", function (t) { + t.throws(function () { + fixNameField({name : "org@package"}, false) + }, "blows up as expected") + + t.end() +}) + +test("'org=package' is not a valid name", function (t) { + t.throws(function () { + fixNameField({name : "org=package"}, false) + }, "blows up as expected") + + t.end() +}) + +test("'@org=sub/package' is not a valid name", function (t) { + t.throws(function () { + fixNameField({name : "@org=sub/package"}, false) + }, "blows up as expected") + + t.end() +}) + +test("'@org/' is not a valid name", function (t) { + t.throws(function () { + fixNameField({name : "@org/"}, false) + }, "blows up as expected") + + t.end() +}) + +test("'@/package' is not a valid name", function (t) { + t.throws(function () { + fixNameField({name : "@/package"}, false) + }, "blows up as expected") + + t.end() +}) + +test("name='@org/package', bin='bin.js' is bin={package:'bin.js'}", function (t) { + var obj = {name : "@org/package", bin: "bin.js"} + fixBinField(obj) + t.isDeeply(obj.bin, {package: 'bin.js'}) + t.end() +}) diff --git a/node_modules/normalize-package-data/test/scripts.js b/node_modules/normalize-package-data/test/scripts.js new file mode 100644 index 0000000..473596e --- /dev/null +++ b/node_modules/normalize-package-data/test/scripts.js @@ -0,0 +1,24 @@ +var tap = require("tap") +var normalize = require("../lib/normalize") +var path = require("path") +var fs = require("fs") + +tap.test("bad scripts", function (t) { + var p = path.resolve(__dirname, "./fixtures/badscripts.json") + fs.readFile (p, function (err, contents) { + if (err) throw err + var originalData = JSON.parse(contents.toString()) + var data = JSON.parse(contents.toString()) + normalize(data) + t.ok(data) + verifyFields(t, data, originalData) + t.end() + }) +}) + +function verifyFields (t, normalized, original) { + t.equal(normalized.version, original.version, "Version field stays same") + t.equal(normalized.name, original.name, "Name stays the same.") + // scripts is not an object, so it should be deleted + t.notOk(normalized.scripts) +} diff --git a/node_modules/normalize-package-data/test/strict.js b/node_modules/normalize-package-data/test/strict.js new file mode 100644 index 0000000..40e09dc --- /dev/null +++ b/node_modules/normalize-package-data/test/strict.js @@ -0,0 +1,54 @@ +var test = require("tap").test + +var normalize = require("../") + +test("strict", function(t) { + var threw + + try { + threw = false + normalize({name: "X"}, true) + } catch (er) { + threw = true + t.equal(er.message, 'Invalid name: "X"') + } finally { + t.equal(threw, true) + } + + try { + threw = false + normalize({name:" x "}, true) + } catch (er) { + threw = true + t.equal(er.message, 'Invalid name: " x "') + } finally { + t.equal(threw, true) + } + + try { + threw = false + normalize({name:"x",version:"01.02.03"}, true) + } catch (er) { + threw = true + t.equal(er.message, 'Invalid version: "01.02.03"') + } finally { + t.equal(threw, true) + } + + // these should not throw + var slob = {name:" X ",version:"01.02.03",dependencies:{ + y:">01.02.03", + z:"! 99 $$ASFJ(Aawenf90awenf as;naw.3j3qnraw || an elephant" + }} + normalize(slob, false) + t.same(slob, + { name: 'X', + version: '1.2.3', + dependencies: + { y: '>01.02.03', + z: '! 99 $$ASFJ(Aawenf90awenf as;naw.3j3qnraw || an elephant' }, + readme: 'ERROR: No README data found!', + _id: 'X@1.2.3' }) + + t.end() +}) diff --git a/node_modules/normalize-package-data/test/typo.js b/node_modules/normalize-package-data/test/typo.js new file mode 100644 index 0000000..9c2fd70 --- /dev/null +++ b/node_modules/normalize-package-data/test/typo.js @@ -0,0 +1,133 @@ +var test = require('tap').test + +var normalize = require('../') +var typos = require('../lib/typos.json') +var warningMessages = require("../lib/warning_messages.json") +var safeFormat = require("../lib/safe_format") + +test('typos', function(t) { + var warnings = [] + function warn(m) { + warnings.push(m) + } + + var typoMessage = safeFormat.bind(undefined, warningMessages.typo) + + var expect = + [ warningMessages.missingRepository, + warningMessages.missingLicense, + typoMessage('dependancies', 'dependencies'), + typoMessage('dependecies', 'dependencies'), + typoMessage('depdenencies', 'dependencies'), + typoMessage('devEependencies', 'devDependencies'), + typoMessage('depends', 'dependencies'), + typoMessage('dev-dependencies', 'devDependencies'), + typoMessage('devDependences', 'devDependencies'), + typoMessage('devDepenencies', 'devDependencies'), + typoMessage('devdependencies', 'devDependencies'), + typoMessage('repostitory', 'repository'), + typoMessage('repo', 'repository'), + typoMessage('prefereGlobal', 'preferGlobal'), + typoMessage('hompage', 'homepage'), + typoMessage('hampage', 'homepage'), + typoMessage('autohr', 'author'), + typoMessage('autor', 'author'), + typoMessage('contributers', 'contributors'), + typoMessage('publicationConfig', 'publishConfig') ] + + normalize({"dependancies": "dependencies" + ,"dependecies": "dependencies" + ,"depdenencies": "dependencies" + ,"devEependencies": "devDependencies" + ,"depends": "dependencies" + ,"dev-dependencies": "devDependencies" + ,"devDependences": "devDependencies" + ,"devDepenencies": "devDependencies" + ,"devdependencies": "devDependencies" + ,"repostitory": "repository" + ,"repo": "repository" + ,"prefereGlobal": "preferGlobal" + ,"hompage": "homepage" + ,"hampage": "homepage" + ,"autohr": "author" + ,"autor": "author" + ,"contributers": "contributors" + ,"publicationConfig": "publishConfig" + ,readme:"asdf" + ,name:"name" + ,version:"1.2.5"}, warn) + + t.same(warnings, expect) + + warnings.length = 0 + var expect = + [ warningMessages.missingDescription, + warningMessages.missingRepository, + typoMessage("bugs['web']", "bugs['url']"), + typoMessage("bugs['name']", "bugs['url']"), + warningMessages.nonUrlBugsUrlField, + warningMessages.emptyNormalizedBugs, + warningMessages.missingReadme, + warningMessages.missingLicense] + + normalize({name:"name" + ,version:"1.2.5" + ,bugs:{web:"url",name:"url"}}, warn) + + t.same(warnings, expect) + + warnings.length = 0 + var expect = + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + warningMessages.missingLicense, + typoMessage('script', 'scripts') ] + + normalize({name:"name" + ,version:"1.2.5" + ,script:{server:"start",tests:"test"}}, warn) + + t.same(warnings, expect) + + warnings.length = 0 + expect = + [ warningMessages.missingDescription, + warningMessages.missingRepository, + typoMessage("scripts['server']", "scripts['start']"), + typoMessage("scripts['tests']", "scripts['test']"), + warningMessages.missingReadme, + warningMessages.missingLicense] + + normalize({name:"name" + ,version:"1.2.5" + ,scripts:{server:"start",tests:"test"}}, warn) + + t.same(warnings, expect) + + warnings.length = 0 + expect = + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + warningMessages.missingLicense] + + normalize({name:"name" + ,version:"1.2.5" + ,scripts:{server:"start",tests:"test" + ,start:"start",test:"test"}}, warn) + + t.same(warnings, expect) + + warnings.length = 0 + expect = [] + + normalize({private: true + ,name:"name" + ,version:"1.2.5" + ,scripts:{server:"start",tests:"test"}}, warn) + + t.same(warnings, expect) + + t.end(); +}) diff --git a/node_modules/number-is-nan/index.js b/node_modules/number-is-nan/index.js new file mode 100644 index 0000000..79be4b9 --- /dev/null +++ b/node_modules/number-is-nan/index.js @@ -0,0 +1,4 @@ +'use strict'; +module.exports = Number.isNaN || function (x) { + return x !== x; +}; diff --git a/node_modules/number-is-nan/license b/node_modules/number-is-nan/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/number-is-nan/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/number-is-nan/package.json b/node_modules/number-is-nan/package.json new file mode 100644 index 0000000..0849b45 --- /dev/null +++ b/node_modules/number-is-nan/package.json @@ -0,0 +1,103 @@ +{ + "_args": [ + [ + { + "raw": "number-is-nan@^1.0.0", + "scope": null, + "escapedName": "number-is-nan", + "name": "number-is-nan", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/is-finite" + ] + ], + "_from": "number-is-nan@>=1.0.0 <2.0.0", + "_id": "number-is-nan@1.0.1", + "_inCache": true, + "_location": "/number-is-nan", + "_nodeVersion": "4.5.0", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/number-is-nan-1.0.1.tgz_1475212313367_0.9480371843092144" + }, + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.15.9", + "_phantomChildren": {}, + "_requested": { + "raw": "number-is-nan@^1.0.0", + "scope": null, + "escapedName": "number-is-nan", + "name": "number-is-nan", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/is-finite" + ], + "_resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "_shasum": "097b602b53422a522c1afb8790318336941a011d", + "_shrinkwrap": null, + "_spec": "number-is-nan@^1.0.0", + "_where": "/home/burchettm/statsbot/node_modules/is-finite", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/number-is-nan/issues" + }, + "dependencies": {}, + "description": "ES2015 Number.isNaN() ponyfill", + "devDependencies": { + "ava": "*" + }, + "directories": {}, + "dist": { + "shasum": "097b602b53422a522c1afb8790318336941a011d", + "tarball": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "ed9cdac3f428cc929b61bb230da42c87477af4b9", + "homepage": "https://github.com/sindresorhus/number-is-nan#readme", + "keywords": [ + "es2015", + "ecmascript", + "ponyfill", + "polyfill", + "shim", + "number", + "is", + "nan", + "not" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "number-is-nan", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/number-is-nan.git" + }, + "scripts": { + "test": "ava" + }, + "version": "1.0.1" +} diff --git a/node_modules/number-is-nan/readme.md b/node_modules/number-is-nan/readme.md new file mode 100644 index 0000000..2463508 --- /dev/null +++ b/node_modules/number-is-nan/readme.md @@ -0,0 +1,28 @@ +# number-is-nan [![Build Status](https://travis-ci.org/sindresorhus/number-is-nan.svg?branch=master)](https://travis-ci.org/sindresorhus/number-is-nan) + +> ES2015 [`Number.isNaN()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN) [ponyfill](https://ponyfill.com) + + +## Install + +``` +$ npm install --save number-is-nan +``` + + +## Usage + +```js +var numberIsNan = require('number-is-nan'); + +numberIsNan(NaN); +//=> true + +numberIsNan('unicorn'); +//=> false +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/object-assign/index.js b/node_modules/object-assign/index.js new file mode 100644 index 0000000..0930cf8 --- /dev/null +++ b/node_modules/object-assign/index.js @@ -0,0 +1,90 @@ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +'use strict'; +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; diff --git a/node_modules/object-assign/license b/node_modules/object-assign/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/object-assign/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/object-assign/package.json b/node_modules/object-assign/package.json new file mode 100644 index 0000000..5a0398c --- /dev/null +++ b/node_modules/object-assign/package.json @@ -0,0 +1,118 @@ +{ + "_args": [ + [ + { + "raw": "object-assign@^4.0.1", + "scope": null, + "escapedName": "object-assign", + "name": "object-assign", + "rawSpec": "^4.0.1", + "spec": ">=4.0.1 <5.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/meow" + ] + ], + "_from": "object-assign@>=4.0.1 <5.0.0", + "_id": "object-assign@4.1.1", + "_inCache": true, + "_location": "/object-assign", + "_nodeVersion": "4.6.2", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/object-assign-4.1.1.tgz_1484580915042_0.07107710791751742" + }, + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.15.11", + "_phantomChildren": {}, + "_requested": { + "raw": "object-assign@^4.0.1", + "scope": null, + "escapedName": "object-assign", + "name": "object-assign", + "rawSpec": "^4.0.1", + "spec": ">=4.0.1 <5.0.0", + "type": "range" + }, + "_requiredBy": [ + "/meow" + ], + "_resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "_shasum": "2109adc7965887cfc05cbbd442cac8bfbb360863", + "_shrinkwrap": null, + "_spec": "object-assign@^4.0.1", + "_where": "/home/burchettm/statsbot/node_modules/meow", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/object-assign/issues" + }, + "dependencies": {}, + "description": "ES2015 `Object.assign()` ponyfill", + "devDependencies": { + "ava": "^0.16.0", + "lodash": "^4.16.4", + "matcha": "^0.7.0", + "xo": "^0.16.0" + }, + "directories": {}, + "dist": { + "shasum": "2109adc7965887cfc05cbbd442cac8bfbb360863", + "tarball": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "a89774b252c91612203876984bbd6addbe3b5a0e", + "homepage": "https://github.com/sindresorhus/object-assign#readme", + "keywords": [ + "object", + "assign", + "extend", + "properties", + "es2015", + "ecmascript", + "harmony", + "ponyfill", + "prollyfill", + "polyfill", + "shim", + "browser" + ], + "license": "MIT", + "maintainers": [ + { + "name": "gaearon", + "email": "dan.abramov@gmail.com" + }, + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + { + "name": "spicyj", + "email": "ben@benalpert.com" + } + ], + "name": "object-assign", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/object-assign.git" + }, + "scripts": { + "bench": "matcha bench.js", + "test": "xo && ava" + }, + "version": "4.1.1" +} diff --git a/node_modules/object-assign/readme.md b/node_modules/object-assign/readme.md new file mode 100644 index 0000000..1be09d3 --- /dev/null +++ b/node_modules/object-assign/readme.md @@ -0,0 +1,61 @@ +# object-assign [![Build Status](https://travis-ci.org/sindresorhus/object-assign.svg?branch=master)](https://travis-ci.org/sindresorhus/object-assign) + +> ES2015 [`Object.assign()`](http://www.2ality.com/2014/01/object-assign.html) [ponyfill](https://ponyfill.com) + + +## Use the built-in + +Node.js 4 and up, as well as every evergreen browser (Chrome, Edge, Firefox, Opera, Safari), +support `Object.assign()` :tada:. If you target only those environments, then by all +means, use `Object.assign()` instead of this package. + + +## Install + +``` +$ npm install --save object-assign +``` + + +## Usage + +```js +const objectAssign = require('object-assign'); + +objectAssign({foo: 0}, {bar: 1}); +//=> {foo: 0, bar: 1} + +// multiple sources +objectAssign({foo: 0}, {bar: 1}, {baz: 2}); +//=> {foo: 0, bar: 1, baz: 2} + +// overwrites equal keys +objectAssign({foo: 0}, {foo: 1}, {foo: 2}); +//=> {foo: 2} + +// ignores null and undefined sources +objectAssign({foo: 0}, null, {bar: 1}, undefined); +//=> {foo: 0, bar: 1} +``` + + +## API + +### objectAssign(target, [source, ...]) + +Assigns enumerable own properties of `source` objects to the `target` object and returns the `target` object. Additional `source` objects will overwrite previous ones. + + +## Resources + +- [ES2015 spec - Object.assign](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign) + + +## Related + +- [deep-assign](https://github.com/sindresorhus/deep-assign) - Recursive `Object.assign()` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/options/.npmignore b/node_modules/options/.npmignore new file mode 100644 index 0000000..1b18fb3 --- /dev/null +++ b/node_modules/options/.npmignore @@ -0,0 +1,7 @@ +npm-debug.log +node_modules +.*.swp +.lock-* +build/ + +test diff --git a/node_modules/options/Makefile b/node_modules/options/Makefile new file mode 100644 index 0000000..7496b6f --- /dev/null +++ b/node_modules/options/Makefile @@ -0,0 +1,12 @@ +ALL_TESTS = $(shell find test/ -name '*.test.js') + +run-tests: + @./node_modules/.bin/mocha \ + -t 2000 \ + $(TESTFLAGS) \ + $(TESTS) + +test: + @$(MAKE) NODE_PATH=lib TESTS="$(ALL_TESTS)" run-tests + +.PHONY: test diff --git a/node_modules/options/README.md b/node_modules/options/README.md new file mode 100644 index 0000000..0dabc75 --- /dev/null +++ b/node_modules/options/README.md @@ -0,0 +1,69 @@ +# options.js # + +A very light-weight in-code option parsers for node.js. + +## Usage ## + +``` js +var Options = require("options"); + +// Create an Options object +function foo(options) { + var default_options = { + foo : "bar" + }; + + // Create an option object with default value + var opts = new Options(default_options); + + // Merge options + opts = opts.merge(options); + + // Reset to default value + opts.reset(); + + // Copy selected attributes out + var seled_att = opts.copy("foo"); + + // Read json options from a file. + opts.read("options.file"); // Sync + opts.read("options.file", function(err){ // Async + if(err){ // If error occurs + console.log("File error."); + }else{ + // No error + } + }); + + // Attributes defined or not + opts.isDefinedAndNonNull("foobar"); + opts.isDefined("foobar"); +} + +``` + + +## License ## + +(The MIT License) + +Copyright (c) 2012 Einar Otto Stangvik <einaros@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/options/lib/options.js b/node_modules/options/lib/options.js new file mode 100644 index 0000000..4fc45e9 --- /dev/null +++ b/node_modules/options/lib/options.js @@ -0,0 +1,86 @@ +/*! + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var fs = require('fs'); + +function Options(defaults) { + var internalValues = {}; + var values = this.value = {}; + Object.keys(defaults).forEach(function(key) { + internalValues[key] = defaults[key]; + Object.defineProperty(values, key, { + get: function() { return internalValues[key]; }, + configurable: false, + enumerable: true + }); + }); + this.reset = function() { + Object.keys(defaults).forEach(function(key) { + internalValues[key] = defaults[key]; + }); + return this; + }; + this.merge = function(options, required) { + options = options || {}; + if (Object.prototype.toString.call(required) === '[object Array]') { + var missing = []; + for (var i = 0, l = required.length; i < l; ++i) { + var key = required[i]; + if (!(key in options)) { + missing.push(key); + } + } + if (missing.length > 0) { + if (missing.length > 1) { + throw new Error('options ' + + missing.slice(0, missing.length - 1).join(', ') + ' and ' + + missing[missing.length - 1] + ' must be defined'); + } + else throw new Error('option ' + missing[0] + ' must be defined'); + } + } + Object.keys(options).forEach(function(key) { + if (key in internalValues) { + internalValues[key] = options[key]; + } + }); + return this; + }; + this.copy = function(keys) { + var obj = {}; + Object.keys(defaults).forEach(function(key) { + if (keys.indexOf(key) !== -1) { + obj[key] = values[key]; + } + }); + return obj; + }; + this.read = function(filename, cb) { + if (typeof cb == 'function') { + var self = this; + fs.readFile(filename, function(error, data) { + if (error) return cb(error); + var conf = JSON.parse(data); + self.merge(conf); + cb(); + }); + } + else { + var conf = JSON.parse(fs.readFileSync(filename)); + this.merge(conf); + } + return this; + }; + this.isDefined = function(key) { + return typeof values[key] != 'undefined'; + }; + this.isDefinedAndNonNull = function(key) { + return typeof values[key] != 'undefined' && values[key] !== null; + }; + Object.freeze(values); + Object.freeze(this); +} + +module.exports = Options; diff --git a/node_modules/options/package.json b/node_modules/options/package.json new file mode 100644 index 0000000..4ac1542 --- /dev/null +++ b/node_modules/options/package.json @@ -0,0 +1,84 @@ +{ + "_args": [ + [ + { + "raw": "options@>=0.0.5", + "scope": null, + "escapedName": "options", + "name": "options", + "rawSpec": ">=0.0.5", + "spec": ">=0.0.5", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/ws" + ] + ], + "_from": "options@>=0.0.5", + "_id": "options@0.0.6", + "_inCache": true, + "_location": "/options", + "_npmUser": { + "name": "einaros", + "email": "einaros@gmail.com" + }, + "_npmVersion": "1.4.21", + "_phantomChildren": {}, + "_requested": { + "raw": "options@>=0.0.5", + "scope": null, + "escapedName": "options", + "name": "options", + "rawSpec": ">=0.0.5", + "spec": ">=0.0.5", + "type": "range" + }, + "_requiredBy": [ + "/ws" + ], + "_resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "_shasum": "ec22d312806bb53e731773e7cdaefcf1c643128f", + "_shrinkwrap": null, + "_spec": "options@>=0.0.5", + "_where": "/home/burchettm/statsbot/node_modules/ws", + "author": { + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com", + "url": "http://2x.io" + }, + "bugs": { + "url": "https://github.com/einaros/options.js/issues" + }, + "dependencies": {}, + "description": "A very light-weight in-code option parsers for node.js.", + "devDependencies": { + "mocha": "latest" + }, + "directories": {}, + "dist": { + "shasum": "ec22d312806bb53e731773e7cdaefcf1c643128f", + "tarball": "https://registry.npmjs.org/options/-/options-0.0.6.tgz" + }, + "engines": { + "node": ">=0.4.0" + }, + "gitHead": "ff53d0a092c897cb95964232a96fe17da65c11af", + "homepage": "https://github.com/einaros/options.js", + "main": "lib/options", + "maintainers": [ + { + "name": "einaros", + "email": "einaros@gmail.com" + } + ], + "name": "options", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/einaros/options.js.git" + }, + "scripts": { + "test": "make test" + }, + "version": "0.0.6" +} diff --git a/node_modules/pako/CHANGELOG.md b/node_modules/pako/CHANGELOG.md new file mode 100644 index 0000000..f985922 --- /dev/null +++ b/node_modules/pako/CHANGELOG.md @@ -0,0 +1,90 @@ +1.0.2 / 2016-07-21 +------------------ + +- Fixed nasty bug in deflate (wrong `d_buf` offset), which could cause + broken data in some rare cases. +- Also released as 0.2.9 to give chance to old dependents, not updated to 1.x + version. + + +1.0.1 / 2016-04-01 +------------------ + +- Added dictionary support. Thanks to @dignifiedquire. + + +1.0.0 / 2016-02-17 +------------------ + +- Maintenance release (semver, coding style). + + +0.2.8 / 2015-09-14 +------------------ + +- Fixed regression after 0.2.4 for edge conditions in inflate wrapper (#65). + Added more tests to cover possible cases. + + +0.2.7 / 2015-06-09 +------------------ + +- Added Z_SYNC_FLUSH support. Thanks to @TinoLange. + + +0.2.6 / 2015-03-24 +------------------ + +- Allow ArrayBuffer input. + + +0.2.5 / 2014-07-19 +------------------ + +- Workaround for Chrome 38.0.2096.0 script parser bug, #30. + + +0.2.4 / 2014-07-07 +------------------ + +- Fixed bug in inflate wrapper, #29 + + +0.2.3 / 2014-06-09 +------------------ + +- Maintenance release, dependencies update. + + +0.2.2 / 2014-06-04 +------------------ + +- Fixed iOS 5.1 Safary issue with `apply(typed_array)`, #26. + + +0.2.1 / 2014-05-01 +------------------ + +- Fixed collision on switch dynamic/fixed tables. + + +0.2.0 / 2014-04-18 +------------------ + +- Added custom gzip headers support. +- Added strings support. +- Improved memory allocations for small chunks. +- ZStream properties rename/cleanup. +- More coverage tests. + + +0.1.1 / 2014-03-20 +------------------ + +- Bugfixes for inflate/deflate. + + +0.1.0 / 2014-03-15 +------------------ + +- First release. diff --git a/node_modules/pako/LICENSE b/node_modules/pako/LICENSE new file mode 100644 index 0000000..d082ae3 --- /dev/null +++ b/node_modules/pako/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2014-2016 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/pako/README.md b/node_modules/pako/README.md new file mode 100644 index 0000000..ef121e7 --- /dev/null +++ b/node_modules/pako/README.md @@ -0,0 +1,176 @@ +pako - zlib port to javascript, very fast! +========================================== + +[![Build Status](https://travis-ci.org/nodeca/pako.svg?branch=master)](https://travis-ci.org/nodeca/pako) +[![NPM version](https://img.shields.io/npm/v/pako.svg)](https://www.npmjs.org/package/pako) + +__Why pako is cool:__ + +- Almost as fast in modern JS engines as C implementation (see benchmarks). +- Works in browsers, you can browserify any separate component. +- Chunking support for big blobs. +- Results are binary equal to well known [zlib](http://www.zlib.net/) (now v1.2.8 ported). + +This project was done to understand how fast JS can be and is it necessary to +develop native C modules for CPU-intensive tasks. Enjoy the result! + + +__Famous projects, using pako:__ + +- [browserify](http://browserify.org/) (via [browserify-zlib](https://github.com/devongovett/browserify-zlib)) +- [JSZip](http://stuk.github.io/jszip/) +- [mincer](https://github.com/nodeca/mincer) +- [JS-Git](https://github.com/creationix/js-git) and + [Tedit](https://chrome.google.com/webstore/detail/tedit-development-environ/ooekdijbnbbjdfjocaiflnjgoohnblgf) + by [@creatronix](https://github.com/creationix) + + +__Benchmarks:__ + +``` +node v0.10.26, 1mb sample: + + deflate-dankogai x 4.73 ops/sec ±0.82% (15 runs sampled) + deflate-gildas x 4.58 ops/sec ±2.33% (15 runs sampled) + deflate-imaya x 3.22 ops/sec ±3.95% (12 runs sampled) + ! deflate-pako x 6.99 ops/sec ±0.51% (21 runs sampled) + deflate-pako-string x 5.89 ops/sec ±0.77% (18 runs sampled) + deflate-pako-untyped x 4.39 ops/sec ±1.58% (14 runs sampled) + * deflate-zlib x 14.71 ops/sec ±4.23% (59 runs sampled) + inflate-dankogai x 32.16 ops/sec ±0.13% (56 runs sampled) + inflate-imaya x 30.35 ops/sec ±0.92% (53 runs sampled) + ! inflate-pako x 69.89 ops/sec ±1.46% (71 runs sampled) + inflate-pako-string x 19.22 ops/sec ±1.86% (49 runs sampled) + inflate-pako-untyped x 17.19 ops/sec ±0.85% (32 runs sampled) + * inflate-zlib x 70.03 ops/sec ±1.64% (81 runs sampled) + +node v0.11.12, 1mb sample: + + deflate-dankogai x 5.60 ops/sec ±0.49% (17 runs sampled) + deflate-gildas x 5.06 ops/sec ±6.00% (16 runs sampled) + deflate-imaya x 3.52 ops/sec ±3.71% (13 runs sampled) + ! deflate-pako x 11.52 ops/sec ±0.22% (32 runs sampled) + deflate-pako-string x 9.53 ops/sec ±1.12% (27 runs sampled) + deflate-pako-untyped x 5.44 ops/sec ±0.72% (17 runs sampled) + * deflate-zlib x 14.05 ops/sec ±3.34% (63 runs sampled) + inflate-dankogai x 42.19 ops/sec ±0.09% (56 runs sampled) + inflate-imaya x 79.68 ops/sec ±1.07% (68 runs sampled) + ! inflate-pako x 97.52 ops/sec ±0.83% (80 runs sampled) + inflate-pako-string x 45.19 ops/sec ±1.69% (57 runs sampled) + inflate-pako-untyped x 24.35 ops/sec ±2.59% (40 runs sampled) + * inflate-zlib x 60.32 ops/sec ±1.36% (69 runs sampled) +``` + +zlib's test is partialy afferted by marshling (that make sense for inflate only). +You can change deflate level to 0 in benchmark source, to investigate details. +For deflate level 6 results can be considered as correct. + +__Install:__ + +node.js: + +``` +npm install pako +``` + +browser: + +``` +bower install pako +``` + + +Example & API +------------- + +Full docs - http://nodeca.github.io/pako/ + +```javascript +var pako = require('pako'); + +// Deflate +// +var input = new Uint8Array(); +//... fill input data here +var output = pako.deflate(input); + +// Inflate (simple wrapper can throw exception on broken stream) +// +var compressed = new Uint8Array(); +//... fill data to uncompress here +try { + var result = pako.inflate(compressed); +} catch (err) { + console.log(err); +} + +// +// Alternate interface for chunking & without exceptions +// + +var inflator = new pako.Inflate(); + +inflator.push(chunk1, false); +inflator.push(chunk2, false); +... +inflator.push(chunkN, true); // true -> last chunk + +if (inflator.err) { + console.log(inflator.msg); +} + +var output = inflator.result; + +``` + +Sometime you can wish to work with strings. For example, to send +big objects as json to server. Pako detects input data type. You can +force output to be string with option `{ to: 'string' }`. + +```javascript +var pako = require('pako'); + +var test = { my: 'super', puper: [456, 567], awesome: 'pako' }; + +var binaryString = pako.deflate(JSON.stringify(test), { to: 'string' }); + +// +// Here you can do base64 encode, make xhr requests and so on. +// + +var restored = JSON.parse(pako.inflate(binaryString, { to: 'string' })); +``` + + +Notes +----- + +Pako does not contain some specific zlib functions: + +- __deflate__ - methods `deflateCopy`, `deflateBound`, `deflateParams`, + `deflatePending`, `deflatePrime`, `deflateTune`. +- __inflate__ - methods `inflateCopy`, `inflateMark`, + `inflatePrime`, `inflateGetDictionary`, `inflateSync`, `inflateSyncPoint`, `inflateUndermine`. +- High level inflate/deflate wrappers (classes) may not support some flush + modes. Those should work: Z_NO_FLUSH, Z_FINISH, Z_SYNC_FLUSH. + + +Authors +------- + +- Andrey Tupitsin [@anrd83](https://github.com/andr83) +- Vitaly Puzrin [@puzrin](https://github.com/puzrin) + +Personal thanks to: + +- Vyacheslav Egorov ([@mraleph](https://github.com/mraleph)) for his awesome + tutorials about optimising JS code for v8, [IRHydra](http://mrale.ph/irhydra/) + tool and his advices. +- David Duponchel ([@dduponchel](https://github.com/dduponchel)) for help with + testing. + + +License +------- + +MIT diff --git a/node_modules/pako/dist/pako.js b/node_modules/pako/dist/pako.js new file mode 100644 index 0000000..6d6db94 --- /dev/null +++ b/node_modules/pako/dist/pako.js @@ -0,0 +1,6606 @@ +/* pako 0.2.9 nodeca/pako */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o Array + * + * Chunks of output data, if [[Deflate#onData]] not overriden. + **/ + +/** + * Deflate.result -> Uint8Array|Array + * + * Compressed result, generated by default [[Deflate#onData]] + * and [[Deflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Deflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Deflate.err -> Number + * + * Error code after deflate finished. 0 (Z_OK) on success. + * You will not need it in real life, because deflate errors + * are possible only on wrong options or bad `onData` / `onEnd` + * custom handlers. + **/ + +/** + * Deflate.msg -> String + * + * Error message, if [[Deflate.err]] != 0 + **/ + + +/** + * new Deflate(options) + * - options (Object): zlib deflate options. + * + * Creates new deflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `level` + * - `windowBits` + * - `memLevel` + * - `strategy` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw deflate + * - `gzip` (Boolean) - create gzip wrapper + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * - `header` (Object) - custom header for gzip + * - `text` (Boolean) - true if compressed data believed to be text + * - `time` (Number) - modification time, unix timestamp + * - `os` (Number) - operation system code + * - `extra` (Array) - array of bytes with extra data (max 65536) + * - `name` (String) - file name (binary string) + * - `comment` (String) - comment (binary string) + * - `hcrc` (Boolean) - true if header crc should be added + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var deflate = new pako.Deflate({ level: 3}); + * + * deflate.push(chunk1, false); + * deflate.push(chunk2, true); // true -> last chunk + * + * if (deflate.err) { throw new Error(deflate.err); } + * + * console.log(deflate.result); + * ``` + **/ +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + + var opt = this.options; + + if (opt.raw && (opt.windowBits > 0)) { + opt.windowBits = -opt.windowBits; + } + + else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + + if (opt.dictionary) { + var dict; + // Convert data if needed + if (typeof opt.dictionary === 'string') { + // If we need to compress text, change encoding to utf8. + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} + +/** + * Deflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be + * converted to utf8 byte sequence. + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. + * + * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with + * new compressed chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the compression context. + * + * On fail call [[Deflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * array format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + + if (this.ended) { return false; } + + _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // If we need to compress text, change encoding to utf8. + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + + // Finalize on the last chunk. + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Deflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): ouput data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Deflate#onEnd(status) -> Void + * - status (Number): deflate status. 0 (Z_OK) on success, + * other if not. + * + * Called once after you tell deflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * deflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * Compress `data` with deflate algorithm and `options`. + * + * Supported options are: + * + * - level + * - windowBits + * - memLevel + * - strategy + * - dictionary + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); + * + * console.log(pako.deflate(data)); + * ``` + **/ +function deflate(input, options) { + var deflator = new Deflate(options); + + deflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (deflator.err) { throw deflator.msg; } + + return deflator.result; +} + + +/** + * deflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} + + +/** + * gzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but create gzip wrapper instead of + * deflate one. + **/ +function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate(input, options); +} + + +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; + +},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(require,module,exports){ +'use strict'; + + +var zlib_inflate = require('./zlib/inflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var c = require('./zlib/constants'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); +var GZheader = require('./zlib/gzheader'); + +var toString = Object.prototype.toString; + +/** + * class Inflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[inflate]] + * and [[inflateRaw]]. + **/ + +/* internal + * inflate.chunks -> Array + * + * Chunks of output data, if [[Inflate#onData]] not overriden. + **/ + +/** + * Inflate.result -> Uint8Array|Array|String + * + * Uncompressed result, generated by default [[Inflate#onData]] + * and [[Inflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Inflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Inflate.err -> Number + * + * Error code after inflate finished. 0 (Z_OK) on success. + * Should be checked if broken data possible. + **/ + +/** + * Inflate.msg -> String + * + * Error message, if [[Inflate.err]] != 0 + **/ + + +/** + * new Inflate(options) + * - options (Object): zlib inflate options. + * + * Creates new inflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `windowBits` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw inflate + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * By default, when no options set, autodetect deflate/gzip data format via + * wrapper header. + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var inflate = new pako.Inflate({ level: 3}); + * + * inflate.push(chunk1, false); + * inflate.push(chunk2, true); // true -> last chunk + * + * if (inflate.err) { throw new Error(inflate.err); } + * + * console.log(inflate.result); + * ``` + **/ +function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: '' + }, options || {}); + + var opt = this.options; + + // Force window size for `raw` data, if not set directly, + // because we have no header for autodetect. + if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { opt.windowBits = -15; } + } + + // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate + if ((opt.windowBits >= 0) && (opt.windowBits < 16) && + !(options && options.windowBits)) { + opt.windowBits += 32; + } + + // Gzip header has no info about windows size, we can do autodetect only + // for deflate. So, if window size not set, force it to max when gzip possible + if ((opt.windowBits > 15) && (opt.windowBits < 48)) { + // bit 3 (16) -> gzipped data + // bit 4 (32) -> autodetect gzip/deflate + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + + this.header = new GZheader(); + + zlib_inflate.inflateGetHeader(this.strm, this.header); +} + +/** + * Inflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. + * + * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with + * new output chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the decompression context. + * + * On fail call [[Inflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Inflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + var dict; + + // Flag to properly process Z_BUF_ERROR on testing inflate call + // when we check that all output data was flushed. + var allowBufError = false; + + if (this.ended) { return false; } + _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // Only binary strings can be decompressed on practice + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ + + if (status === c.Z_NEED_DICT && dictionary) { + // Convert data if needed + if (typeof dictionary === 'string') { + dict = strings.string2buf(dictionary); + } else if (toString.call(dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(dictionary); + } else { + dict = dictionary; + } + + status = zlib_inflate.inflateSetDictionary(this.strm, dict); + + } + + if (status === c.Z_BUF_ERROR && allowBufError === true) { + status = c.Z_OK; + allowBufError = false; + } + + if (status !== c.Z_STREAM_END && status !== c.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + + if (strm.next_out) { + if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { + + if (this.options.to === 'string') { + + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); + + // move tail + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } + + this.onData(utf8str); + + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } + + // When no more input data, we should check that internal inflate buffers + // are flushed. The only way to do it when avail_out = 0 - run one more + // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. + // Here we set flag to process this error properly. + // + // NOTE. Deflate does not return error in this case and does not needs such + // logic. + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); + + if (status === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } + + // Finalize on the last chunk. + if (_mode === c.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c.Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Inflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): ouput data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Inflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Inflate#onEnd(status) -> Void + * - status (Number): inflate status. 0 (Z_OK) on success, + * other if not. + * + * Called either after you tell inflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Inflate.prototype.onEnd = function (status) { + // On success - join + if (status === c.Z_OK) { + if (this.options.to === 'string') { + // Glue & convert here, until we teach pako to send + // utf8 alligned strings to onData + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * inflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Decompress `data` with inflate/ungzip and `options`. Autodetect + * format via wrapper header by default. That's why we don't provide + * separate `ungzip` method. + * + * Supported options are: + * + * - windowBits + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) + * , output; + * + * try { + * output = pako.inflate(input); + * } catch (err) + * console.log(err); + * } + * ``` + **/ +function inflate(input, options) { + var inflator = new Inflate(options); + + inflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (inflator.err) { throw inflator.msg; } + + return inflator.result; +} + + +/** + * inflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * The same as [[inflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); +} + + +/** + * ungzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Just shortcut to [[inflate]], because it autodetects format + * by header.content. Done for convenience. + **/ + + +exports.Inflate = Inflate; +exports.inflate = inflate; +exports.inflateRaw = inflateRaw; +exports.ungzip = inflate; + +},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(require,module,exports){ +'use strict'; + + +var TYPED_OK = (typeof Uint8Array !== 'undefined') && + (typeof Uint16Array !== 'undefined') && + (typeof Int32Array !== 'undefined'); + + +exports.assign = function (obj /*from1, from2, from3, ...*/) { + var sources = Array.prototype.slice.call(arguments, 1); + while (sources.length) { + var source = sources.shift(); + if (!source) { continue; } + + if (typeof source !== 'object') { + throw new TypeError(source + 'must be non-object'); + } + + for (var p in source) { + if (source.hasOwnProperty(p)) { + obj[p] = source[p]; + } + } + } + + return obj; +}; + + +// reduce buffer size, avoiding mem copy +exports.shrinkBuf = function (buf, size) { + if (buf.length === size) { return buf; } + if (buf.subarray) { return buf.subarray(0, size); } + buf.length = size; + return buf; +}; + + +var fnTyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set(src.subarray(src_offs, src_offs + len), dest_offs); + return; + } + // Fallback to ordinary array + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + var i, l, len, pos, chunk, result; + + // calculate data length + len = 0; + for (i = 0, l = chunks.length; i < l; i++) { + len += chunks[i].length; + } + + // join chunks + result = new Uint8Array(len); + pos = 0; + for (i = 0, l = chunks.length; i < l; i++) { + chunk = chunks[i]; + result.set(chunk, pos); + pos += chunk.length; + } + + return result; + } +}; + +var fnUntyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + return [].concat.apply([], chunks); + } +}; + + +// Enable/Disable typed arrays use, for testing +// +exports.setTyped = function (on) { + if (on) { + exports.Buf8 = Uint8Array; + exports.Buf16 = Uint16Array; + exports.Buf32 = Int32Array; + exports.assign(exports, fnTyped); + } else { + exports.Buf8 = Array; + exports.Buf16 = Array; + exports.Buf32 = Array; + exports.assign(exports, fnUntyped); + } +}; + +exports.setTyped(TYPED_OK); + +},{}],4:[function(require,module,exports){ +// String encode/decode helpers +'use strict'; + + +var utils = require('./common'); + + +// Quick check if we can use fast array to bin string conversion +// +// - apply(Array) can fail on Android 2.2 +// - apply(Uint8Array) can fail on iOS 5.1 Safary +// +var STR_APPLY_OK = true; +var STR_APPLY_UIA_OK = true; + +try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } +try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } + + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new utils.Buf8(256); +for (var q = 0; q < 256; q++) { + _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start + + +// convert string to array (typed, when possible) +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + buf = new utils.Buf8(buf_len); + + // convert + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Helper (used in 2 places) +function buf2binstring(buf, len) { + // use fallback for big arrays to avoid stack overflow + if (len < 65537) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} + + +// Convert byte array to binary string +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; + + +// Convert binary string (typed, when possible) +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; + + +// convert array to string +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len * 2); + + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + // quick process ascii + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + // skip 5 & 6 byte codes + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; + + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +},{"./common":3}],5:[function(require,module,exports){ +'use strict'; + +// Note: adler32 takes 12% for level 0 and 2% for level 6. +// It doesn't worth to make additional optimizationa as in original. +// Small size is preferable. + +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + + while (len !== 0) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} + + +module.exports = adler32; + +},{}],6:[function(require,module,exports){ +'use strict'; + + +module.exports = { + + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + + + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type +}; + +},{}],7:[function(require,module,exports){ +'use strict'; + +// Note: we can't get significant speed boost here. +// So write code to minimize size - no pregenerated tables +// and array tools dependencies. + + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; + +},{}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils/common'); +var trees = require('./trees'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var msg = require('./messages'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +//var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +//var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +//var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + + +/* compression levels */ +//var Z_NO_COMPRESSION = 0; +//var Z_BEST_SPEED = 1; +//var Z_BEST_COMPRESSION = 9; +var Z_DEFAULT_COMPRESSION = -1; + + +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +//var Z_BINARY = 0; +//var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + + +/* The deflate compression method */ +var Z_DEFLATED = 8; + +/*============================================================================*/ + + +var MAX_MEM_LEVEL = 9; +/* Maximum value for memLevel in deflateInit2 */ +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_MEM_LEVEL = 8; + + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ +var LITERALS = 256; +/* number of literal bytes 0..255 */ +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ +var D_CODES = 30; +/* number of distance codes */ +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + +var PRESET_DICT = 0x20; + +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; + +var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ +var BS_BLOCK_DONE = 2; /* block flush performed */ +var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ +var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ + +var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return ((f) << 1) - ((f) > 4 ? 9 : 0); +} + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->output buffer and copying into it. + * (See also read_buf()). + */ +function flush_pending(strm) { + var s = strm.state; + + //_tr_flush_bits(s); + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { return; } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } +} + + +function flush_block_only(s, last) { + trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); + s.block_start = s.strstart; + flush_pending(s.strm); +} + + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} + + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +function putShortMSB(s, b) { +// put_byte(s, (Byte)(b >> 8)); +// put_byte(s, (Byte)(b & 0xff)); + s.pending_buf[s.pending++] = (b >>> 8) & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} + + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->input buffer and copying from it. + * (See also flush_pending()). + */ +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { len = size; } + if (len === 0) { return 0; } + + strm.avail_in -= len; + + // zmemcpy(buf, strm->next_in, len); + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } + + else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + + return len; +} + + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; /* max hash chain length */ + var scan = s.strstart; /* current string */ + var match; /* matched string */ + var len; /* length of current match */ + var best_len = s.prev_length; /* best match length so far */ + var nice_match = s.nice_match; /* stop if match long enough */ + var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? + s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; + + var _win = s.window; // shortcut + + var wmask = s.w_mask; + var prev = s.prev; + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if (nice_match > s.lookahead) { nice_match = s.lookahead; } + + // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + // Assert(cur_match < s->strstart, "no future"); + match = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ + + if (_win[match + best_len] !== scan_end || + _win[match + best_len - 1] !== scan_end1 || + _win[match] !== _win[scan] || + _win[++match] !== _win[scan + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2; + match++; + // Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + /*jshint noempty:false*/ + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + scan < strend); + + // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; +} + + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + + //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = s.window_size - s.lookahead - s.strstart; + + // JS ints have 32 bit, block below not needed + /* Deal with !@#$% 64K limit: */ + //if (sizeof(int) <= 2) { + // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + // more = wsize; + // + // } else if (more == (unsigned)(-1)) { + // /* Very unlikely, but possible on 16 bit machine if + // * strstart == 0 && lookahead == 1 (input done a byte at time) + // */ + // more--; + // } + //} + + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + /* we now have strstart >= MAX_DIST */ + s.block_start -= _w_size; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = (m >= _w_size ? m - _w_size : 0); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); + + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + //Assert(more >= 2, "more < 2"); + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + + /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; +//#if MIN_MATCH != 3 +// Call update_hash() MIN_MATCH-3 more times +//#endif + while (s.insert) { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ +// if (s.high_water < s.window_size) { +// var curr = s.strstart + s.lookahead; +// var init = 0; +// +// if (s.high_water < curr) { +// /* Previous high water mark below current data -- zero WIN_INIT +// * bytes or up to end of window, whichever is less. +// */ +// init = s.window_size - curr; +// if (init > WIN_INIT) +// init = WIN_INIT; +// zmemzero(s->window + curr, (unsigned)init); +// s->high_water = curr + init; +// } +// else if (s->high_water < (ulg)curr + WIN_INIT) { +// /* High water mark at or above current data, but below current data +// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up +// * to end of window, whichever is less. +// */ +// init = (ulg)curr + WIN_INIT - s->high_water; +// if (init > s->window_size - s->high_water) +// init = s->window_size - s->high_water; +// zmemzero(s->window + s->high_water, (unsigned)init); +// s->high_water += init; +// } +// } +// +// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +// "not enough room for search"); +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +function deflate_stored(s, flush) { + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s.lookahead <= 1) { + + //Assert(s->strstart < s->w_size+MAX_DIST(s) || + // s->block_start >= (long)s->w_size, "slide too late"); +// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || +// s.block_start >= s.w_size)) { +// throw new Error("slide too late"); +// } + + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + } + //Assert(s->block_start >= 0L, "block gone"); +// if (s.block_start < 0) throw new Error("block gone"); + + s.strstart += s.lookahead; + s.lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + var max_start = s.block_start + max_block_size; + + if (s.strstart === 0 || s.strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_NEED_MORE; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +function deflate_fast(s, flush) { + var hash_head; /* head of the hash chain */ + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; /* flush the current block */ + } + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + } + if (s.match_length >= MIN_MATCH) { + // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only + + /*** _tr_tally_dist(s, s.strstart - s.match_start, + s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { + s.match_length--; /* string at strstart already in table */ + do { + s.strstart++; + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s.match_length !== 0); + s.strstart++; + } else + { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; + +//#if MIN_MATCH != 3 +// Call UPDATE_HASH() MIN_MATCH-3 more times +//#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s.window[s.strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +function deflate_slow(s, flush) { + var hash_head; /* head of hash chain */ + var bflush; /* set if current block must be flushed */ + + var max_insert; + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + */ + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && + s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + + if (s.match_length <= 5 && + (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s.match_length = MIN_MATCH - 1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + //check_match(s, s.strstart-1, s.prev_match, s.prev_length); + + /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, + s.prev_length - MIN_MATCH, bflush);***/ + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + } else if (s.match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + if (bflush) { + /*** FLUSH_BLOCK_ONLY(s, 0) ***/ + flush_block_only(s, false); + /***/ + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + //Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s.match_available) { + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_BLOCK_DONE; +} + + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +function deflate_rle(s, flush) { + var bflush; /* set if current block must be flushed */ + var prev; /* byte at distance one to match */ + var scan, strend; /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +function deflate_huff(s, flush) { + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s.match_length = 0; + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; + +configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), /* 3 */ + + new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ +]; + + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +function lm_init(s) { + s.window_size = 2 * s.w_size; + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + + +function DeflateState() { + this.strm = null; /* pointer back to this zlib stream */ + this.status = 0; /* as the name implies */ + this.pending_buf = null; /* output still pending */ + this.pending_buf_size = 0; /* size of pending_buf */ + this.pending_out = 0; /* next pending byte to output to the stream */ + this.pending = 0; /* nb of bytes in the pending buffer */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.gzhead = null; /* gzip header information to write */ + this.gzindex = 0; /* where in extra, name, or comment */ + this.method = Z_DEFLATED; /* can only be DEFLATED */ + this.last_flush = -1; /* value of flush param for previous deflate call */ + + this.w_size = 0; /* LZ77 window size (32K by default) */ + this.w_bits = 0; /* log2(w_size) (8..16) */ + this.w_mask = 0; /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; /* hash index of string to be inserted */ + this.hash_size = 0; /* number of elements in hash table */ + this.hash_bits = 0; /* log2(hash_size) */ + this.hash_mask = 0; /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; /* length of best match */ + this.prev_match = 0; /* previous match */ + this.match_available = 0; /* set if previous match exists */ + this.strstart = 0; /* start of string to insert */ + this.match_start = 0; /* start of matching string */ + this.lookahead = 0; /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; /* compression level (1..9) */ + this.strategy = 0; /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + + this.l_desc = null; /* desc. for literal tree */ + this.d_desc = null; /* desc. for distance tree */ + this.bl_desc = null; /* desc. for bit length tree */ + + //ush bl_count[MAX_BITS+1]; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ + zero(this.heap); + + this.heap_len = 0; /* number of elements in the heap */ + this.heap_max = 0; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; /* bit length of current block with optimal trees */ + this.static_len = 0; /* bit length of current block with static trees */ + this.matches = 0; /* number of string matches in current block */ + this.insert = 0; /* bytes at end of window left to insert */ + + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + s.status = (s.wrap ? INIT_STATE : BUSY_STATE); + strm.adler = (s.wrap === 2) ? + 0 // crc32(0, Z_NULL, 0) + : + 1; // adler32(0, Z_NULL, 0) + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; +} + + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; +} + + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } + strm.state.gzhead = head; + return Z_OK; +} + + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { // === Z_NULL + return Z_STREAM_ERROR; + } + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } + + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } + + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + var s = new DeflateState(); + + strm.state = s; + s.strm = strm; + + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + + // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; + + //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + + // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s.d_buf = 1 * s.lit_bufsize; + + //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + + s.level = level; + s.strategy = strategy; + s.method = method; + + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || + flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || + (!strm.input && strm.avail_in !== 0) || + (s.status === FINISH_STATE && flush !== Z_FINISH)) { + return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; /* just in case */ + old_flush = s.last_flush; + s.last_flush = flush; + + /* Write the header */ + if (s.status === INIT_STATE) { + + if (s.wrap === 2) { // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } + else { + put_byte(s, (s.gzhead.text ? 1 : 0) + + (s.gzhead.hcrc ? 2 : 0) + + (!s.gzhead.extra ? 0 : 4) + + (!s.gzhead.name ? 0 : 8) + + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, (s.gzhead.time >> 8) & 0xff); + put_byte(s, (s.gzhead.time >> 16) & 0xff); + put_byte(s, (s.gzhead.time >> 24) & 0xff); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, s.gzhead.os & 0xff); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } + else // DEFLATE header + { + var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= (level_flags << 6); + if (s.strstart !== 0) { header |= PRESET_DICT; } + header += 31 - (header % 31); + + s.status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } + +//#ifdef GZIP + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } + else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } + else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } + else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + s.status = BUSY_STATE; + } + } + else { + s.status = BUSY_STATE; + } + } +//#endif + + /* Flush as much pending output as possible */ + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && + flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm.avail_in !== 0 || s.lookahead !== 0 || + (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { + var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : + (s.strategy === Z_RLE ? deflate_rle(s, flush) : + configuration_table[s.level].func(s, flush)); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } + else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + //Assert(strm->avail_out > 0, "bug2"); + //if (strm.avail_out <= 0) { throw new Error("bug2");} + + if (flush !== Z_FINISH) { return Z_OK; } + if (s.wrap <= 0) { return Z_STREAM_END; } + + /* Write the trailer */ + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + put_byte(s, (strm.adler >> 16) & 0xff); + put_byte(s, (strm.adler >> 24) & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, (strm.total_in >> 8) & 0xff); + put_byte(s, (strm.total_in >> 16) & 0xff); + put_byte(s, (strm.total_in >> 24) & 0xff); + } + else + { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s.wrap > 0) { s.wrap = -s.wrap; } + /* write the trailer only once! */ + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + if (status !== INIT_STATE && + status !== EXTRA_STATE && + status !== NAME_STATE && + status !== COMMENT_STATE && + status !== HCRC_STATE && + status !== BUSY_STATE && + status !== FINISH_STATE + ) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} + + +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { + return Z_STREAM_ERROR; + } + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s.w_size) { + if (wrap === 0) { /* already empty otherwise */ + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; + +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ + +},{"../utils/common":3,"./adler32":5,"./crc32":7,"./messages":13,"./trees":14}],9:[function(require,module,exports){ +'use strict'; + + +function GZheader() { + /* true if compressed data believed to be text */ + this.text = 0; + /* modification time */ + this.time = 0; + /* extra flags (not used when writing a gzip file) */ + this.xflags = 0; + /* operating system */ + this.os = 0; + /* pointer to extra field or Z_NULL if none */ + this.extra = null; + /* extra field length (valid if extra != Z_NULL) */ + this.extra_len = 0; // Actually, we don't need it in JS, + // but leave for few code modifications + + // + // Setup limits is not necessary because in js we should not preallocate memory + // for inflate use constant limit in 65536 bytes + // + + /* space at extra (only when reading header) */ + // this.extra_max = 0; + /* pointer to zero-terminated file name or Z_NULL */ + this.name = ''; + /* space at name (only when reading header) */ + // this.name_max = 0; + /* pointer to zero-terminated comment or Z_NULL */ + this.comment = ''; + /* space at comment (only when reading header) */ + // this.comm_max = 0; + /* true if there was or will be a header crc */ + this.hcrc = 0; + /* true when done reading gzip header (not used when writing a gzip file) */ + this.done = false; +} + +module.exports = GZheader; + +},{}],10:[function(require,module,exports){ +'use strict'; + +// See state defs from inflate.js +var BAD = 30; /* got a data error -- remain here until reset */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state.mode === LEN + strm.avail_in >= 6 + strm.avail_out >= 258 + start >= strm.avail_out + state.bits < 8 + + On return, state.mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm.avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm.avail_out >= 258 for each loop to avoid checking for + output space. + */ +module.exports = function inflate_fast(strm, start) { + var state; + var _in; /* local strm.input */ + var last; /* have enough input while in < last */ + var _out; /* local strm.output */ + var beg; /* inflate()'s initial strm.output */ + var end; /* while out < end, enough space available */ +//#ifdef INFLATE_STRICT + var dmax; /* maximum distance from zlib header */ +//#endif + var wsize; /* window size or zero if not using window */ + var whave; /* valid bytes in the window */ + var wnext; /* window write index */ + // Use `s_window` instead `window`, avoid conflict with instrumentation tools + var s_window; /* allocated sliding window, if wsize != 0 */ + var hold; /* local strm.hold */ + var bits; /* local strm.bits */ + var lcode; /* local strm.lencode */ + var dcode; /* local strm.distcode */ + var lmask; /* mask for first level of length codes */ + var dmask; /* mask for first level of distance codes */ + var here; /* retrieved table entry */ + var op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + var len; /* match length, unused bytes */ + var dist; /* match distance */ + var from; /* where to copy match from */ + var from_source; + + + var input, output; // JS specific, because we have no pointers + + /* copy state to local variables */ + state = strm.state; + //here = state.here; + _in = strm.next_in; + input = strm.input; + last = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); +//#ifdef INFLATE_STRICT + dmax = state.dmax; +//#endif + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + top: + do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + + here = lcode[hold & lmask]; + + dolen: + for (;;) { // Goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + if (op === 0) { /* literal */ + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + output[_out++] = here & 0xffff/*here.val*/; + } + else if (op & 16) { /* length base */ + len = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & ((1 << op) - 1); + hold >>>= op; + bits -= op; + } + //Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + + dodist: + for (;;) { // goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + + if (op & 16) { /* distance base */ + dist = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & ((1 << op) - 1); +//#ifdef INFLATE_STRICT + if (dist > dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } +//#endif + hold >>>= op; + bits -= op; + //Tracevv((stderr, "inflate: distance %u\n", dist)); + op = _out - beg; /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } + +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// if (len <= op - whave) { +// do { +// output[_out++] = 0; +// } while (--len); +// continue top; +// } +// len -= op - whave; +// do { +// output[_out++] = 0; +// } while (--op > whave); +// if (op === 0) { +// from = _out - dist; +// do { +// output[_out++] = output[from++]; +// } while (--len); +// continue top; +// } +//#endif + } + from = 0; // window index + from_source = s_window; + if (wnext === 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } + else { + from = _out - dist; /* copy direct from output */ + do { /* minimum length is three */ + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } + else if ((op & 64) === 0) { /* 2nd level distance code */ + here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dodist; + } + else { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } + else if ((op & 64) === 0) { /* 2nd level length code */ + here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dolen; + } + else if (op & 32) { /* end-of-block */ + //Tracevv((stderr, "inflate: end of block\n")); + state.mode = TYPE; + break top; + } + else { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } while (_in < last && _out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + + /* update state and return */ + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); + strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); + state.hold = hold; + state.bits = bits; + return; +}; + +},{}],11:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var inflate_fast = require('./inffast'); +var inflate_table = require('./inftrees'); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +//var Z_NO_FLUSH = 0; +//var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +//var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + +/* The deflate compression method */ +var Z_DEFLATED = 8; + + +/* STATES ====================================================================*/ +/* ===========================================================================*/ + + +var HEAD = 1; /* i: waiting for magic header */ +var FLAGS = 2; /* i: waiting for method and flags (gzip) */ +var TIME = 3; /* i: waiting for modification time (gzip) */ +var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ +var EXLEN = 5; /* i: waiting for extra length (gzip) */ +var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ +var NAME = 7; /* i: waiting for end of file name (gzip) */ +var COMMENT = 8; /* i: waiting for end of comment (gzip) */ +var HCRC = 9; /* i: waiting for header crc (gzip) */ +var DICTID = 10; /* i: waiting for dictionary check value */ +var DICT = 11; /* waiting for inflateSetDictionary() call */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ +var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ +var STORED = 14; /* i: waiting for stored size (length and complement) */ +var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ +var COPY = 16; /* i/o: waiting for input or output to copy stored block */ +var TABLE = 17; /* i: waiting for dynamic block table lengths */ +var LENLENS = 18; /* i: waiting for code length code lengths */ +var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ +var LEN_ = 20; /* i: same as LEN below, but only first time in */ +var LEN = 21; /* i: waiting for length/lit/eob code */ +var LENEXT = 22; /* i: waiting for length extra bits */ +var DIST = 23; /* i: waiting for distance code */ +var DISTEXT = 24; /* i: waiting for distance extra bits */ +var MATCH = 25; /* o: waiting for output space to copy string */ +var LIT = 26; /* o: waiting for output space to write literal */ +var CHECK = 27; /* i: waiting for 32-bit check value */ +var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ +var DONE = 29; /* finished check, done -- remain here until reset */ +var BAD = 30; /* got a data error -- remain here until reset */ +var MEM = 31; /* got an inflate() memory error -- remain here until reset */ +var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ + +/* ===========================================================================*/ + + + +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_WBITS = MAX_WBITS; + + +function zswap32(q) { + return (((q >>> 24) & 0xff) + + ((q >>> 8) & 0xff00) + + ((q & 0xff00) << 8) + + ((q & 0xff) << 24)); +} + + +function InflateState() { + this.mode = 0; /* current inflate mode */ + this.last = false; /* true if processing last block */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.havedict = false; /* true if dictionary provided */ + this.flags = 0; /* gzip header method and flags (0 if zlib) */ + this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ + this.check = 0; /* protected copy of check value */ + this.total = 0; /* protected copy of output count */ + // TODO: may be {} + this.head = null; /* where to save gzip header information */ + + /* sliding window */ + this.wbits = 0; /* log base 2 of requested window size */ + this.wsize = 0; /* window size or zero if not using window */ + this.whave = 0; /* valid bytes in the window */ + this.wnext = 0; /* window write index */ + this.window = null; /* allocated sliding window, if needed */ + + /* bit accumulator */ + this.hold = 0; /* input bit accumulator */ + this.bits = 0; /* number of bits in "in" */ + + /* for string and stored block copying */ + this.length = 0; /* literal or length of data to copy */ + this.offset = 0; /* distance back to copy string from */ + + /* for table and code decoding */ + this.extra = 0; /* extra bits needed */ + + /* fixed and dynamic code tables */ + this.lencode = null; /* starting table for length/literal codes */ + this.distcode = null; /* starting table for distance codes */ + this.lenbits = 0; /* index bits for lencode */ + this.distbits = 0; /* index bits for distcode */ + + /* dynamic table building */ + this.ncode = 0; /* number of code length code lengths */ + this.nlen = 0; /* number of length code lengths */ + this.ndist = 0; /* number of distance code lengths */ + this.have = 0; /* number of code lengths in lens[] */ + this.next = null; /* next available space in codes[] */ + + this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ + this.work = new utils.Buf16(288); /* work area for code table building */ + + /* + because we don't have pointers in js, we use lencode and distcode directly + as buffers so we don't need codes + */ + //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ + this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ + this.distdyn = null; /* dynamic table for distance codes (JS specific) */ + this.sane = 0; /* if false, allow invalid distance too far */ + this.back = 0; /* bits back of last unprocessed length/lit */ + this.was = 0; /* initial length of match */ +} + +function inflateResetKeep(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ''; /*Z_NULL*/ + if (state.wrap) { /* to support ill-conceived Java test suite */ + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null/*Z_NULL*/; + state.hold = 0; + state.bits = 0; + //state.lencode = state.distcode = state.next = state.codes; + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + + state.sane = 1; + state.back = -1; + //Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +function inflateReset(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + +} + +function inflateReset2(strm, windowBits) { + var wrap; + var state; + + /* get the state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + + /* update state and reset the rest of it */ + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); +} + +function inflateInit2(strm, windowBits) { + var ret; + var state; + + if (!strm) { return Z_STREAM_ERROR; } + //strm.msg = Z_NULL; /* in case we return an error */ + + state = new InflateState(); + + //if (state === Z_NULL) return Z_MEM_ERROR; + //Tracev((stderr, "inflate: allocated\n")); + strm.state = state; + state.window = null/*Z_NULL*/; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null/*Z_NULL*/; + } + return ret; +} + +function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); +} + + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +var virgin = true; + +var lenfix, distfix; // We have no pointers in JS, so keep tables separate + +function fixedtables(state) { + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + var sym; + + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + + /* literal/length table */ + sym = 0; + while (sym < 144) { state.lens[sym++] = 8; } + while (sym < 256) { state.lens[sym++] = 9; } + while (sym < 280) { state.lens[sym++] = 7; } + while (sym < 288) { state.lens[sym++] = 8; } + + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); + + /* distance table */ + sym = 0; + while (sym < 32) { state.lens[sym++] = 5; } + + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); + + /* do this just once */ + virgin = false; + } + + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; +} + + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + + /* if it hasn't been done already, allocate space for the window */ + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + + state.window = new utils.Buf8(state.wsize); + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } + else { + dist = state.wsize - state.wnext; + if (dist > copy) { + dist = copy; + } + //zmemcpy(state->window + state->wnext, end - copy, dist); + utils.arraySet(state.window, src, end - copy, dist, state.wnext); + copy -= dist; + if (copy) { + //zmemcpy(state->window, end - copy, copy); + utils.arraySet(state.window, src, end - copy, copy, 0); + state.wnext = copy; + state.whave = state.wsize; + } + else { + state.wnext += dist; + if (state.wnext === state.wsize) { state.wnext = 0; } + if (state.whave < state.wsize) { state.whave += dist; } + } + } + return 0; +} + +function inflate(strm, flush) { + var state; + var input, output; // input/output buffers + var next; /* next input INDEX */ + var put; /* next output INDEX */ + var have, left; /* available input and output */ + var hold; /* bit buffer */ + var bits; /* bits in bit buffer */ + var _in, _out; /* save starting available input and output */ + var copy; /* number of stored or match bytes to copy */ + var from; /* where to copy match bytes from */ + var from_source; + var here = 0; /* current decoding table entry */ + var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) + //var last; /* parent table entry */ + var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) + var len; /* length to copy for repeats, bits to drop */ + var ret; /* return code */ + var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ + var opts; + + var n; // temporary var for NEED_BITS + + var order = /* permutation of code lengths */ + [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; + + + if (!strm || !strm.state || !strm.output || + (!strm.input && strm.avail_in !== 0)) { + return Z_STREAM_ERROR; + } + + state = strm.state; + if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ + + + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + _in = have; + _out = left; + ret = Z_OK; + + inf_leave: // goto emulation + for (;;) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + //=== NEEDBITS(16); + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ + state.check = 0/*crc32(0L, Z_NULL, 0)*/; + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = FLAGS; + break; + } + state.flags = 0; /* expect zlib header */ + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || /* check if zlib header allowed */ + (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { + strm.msg = 'incorrect header check'; + state.mode = BAD; + break; + } + if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// + len = (hold & 0x0f)/*BITS(4)*/ + 8; + if (state.wbits === 0) { + state.wbits = len; + } + else if (len > state.wbits) { + strm.msg = 'invalid window size'; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + //Tracev((stderr, "inflate: zlib header ok\n")); + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = hold & 0x200 ? DICTID : TYPE; + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + break; + case FLAGS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.flags = hold; + if ((state.flags & 0xff) !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + if (state.flags & 0xe000) { + strm.msg = 'unknown header flags set'; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = ((hold >> 8) & 1); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = TIME; + /* falls through */ + case TIME: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.time = hold; + } + if (state.flags & 0x0200) { + //=== CRC4(state.check, hold) + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + hbuf[2] = (hold >>> 16) & 0xff; + hbuf[3] = (hold >>> 24) & 0xff; + state.check = crc32(state.check, hbuf, 4, 0); + //=== + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = OS; + /* falls through */ + case OS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.xflags = (hold & 0xff); + state.head.os = (hold >> 8); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = EXLEN; + /* falls through */ + case EXLEN: + if (state.flags & 0x0400) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + else if (state.head) { + state.head.extra = null/*Z_NULL*/; + } + state.mode = EXTRA; + /* falls through */ + case EXTRA: + if (state.flags & 0x0400) { + copy = state.length; + if (copy > have) { copy = have; } + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + // Use untyped array for more conveniend processing later + state.head.extra = new Array(state.head.extra_len); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + //zmemcpy(state.head.extra + len, next, + // len + copy > state.head.extra_max ? + // state.head.extra_max - len : copy); + } + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + state.length -= copy; + } + if (state.length) { break inf_leave; } + } + state.length = 0; + state.mode = NAME; + /* falls through */ + case NAME: + if (state.flags & 0x0800) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + // TODO: 2 or 1 bytes? + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.name_max*/)) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + /* falls through */ + case COMMENT: + if (state.flags & 0x1000) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.comm_max*/)) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + /* falls through */ + case HCRC: + if (state.flags & 0x0200) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.check & 0xffff)) { + strm.msg = 'header crc mismatch'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + if (state.head) { + state.head.hcrc = ((state.flags >> 9) & 1); + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + strm.adler = state.check = zswap32(hold); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = DICT; + /* falls through */ + case DICT: + if (state.havedict === 0) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + return Z_NEED_DICT; + } + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = TYPE; + /* falls through */ + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } + /* falls through */ + case TYPEDO: + if (state.last) { + //--- BYTEBITS() ---// + hold >>>= bits & 7; + bits -= bits & 7; + //---// + state.mode = CHECK; + break; + } + //=== NEEDBITS(3); */ + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.last = (hold & 0x01)/*BITS(1)*/; + //--- DROPBITS(1) ---// + hold >>>= 1; + bits -= 1; + //---// + + switch ((hold & 0x03)/*BITS(2)*/) { + case 0: /* stored block */ + //Tracev((stderr, "inflate: stored block%s\n", + // state.last ? " (last)" : "")); + state.mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + //Tracev((stderr, "inflate: fixed codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = LEN_; /* decode codes */ + if (flush === Z_TREES) { + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break inf_leave; + } + break; + case 2: /* dynamic block */ + //Tracev((stderr, "inflate: dynamic codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = TABLE; + break; + case 3: + strm.msg = 'invalid block type'; + state.mode = BAD; + } + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break; + case STORED: + //--- BYTEBITS() ---// /* go to byte boundary */ + hold >>>= bits & 7; + bits -= bits & 7; + //---// + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { + strm.msg = 'invalid stored block lengths'; + state.mode = BAD; + break; + } + state.length = hold & 0xffff; + //Tracev((stderr, "inflate: stored length %u\n", + // state.length)); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = COPY_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case COPY_: + state.mode = COPY; + /* falls through */ + case COPY: + copy = state.length; + if (copy) { + if (copy > have) { copy = have; } + if (copy > left) { copy = left; } + if (copy === 0) { break inf_leave; } + //--- zmemcpy(put, next, copy); --- + utils.arraySet(output, input, next, copy, put); + //---// + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + //Tracev((stderr, "inflate: stored end\n")); + state.mode = TYPE; + break; + case TABLE: + //=== NEEDBITS(14); */ + while (bits < 14) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// +//#ifndef PKZIP_BUG_WORKAROUND + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = 'too many length or distance symbols'; + state.mode = BAD; + break; + } +//#endif + //Tracev((stderr, "inflate: table sizes ok\n")); + state.have = 0; + state.mode = LENLENS; + /* falls through */ + case LENLENS: + while (state.have < state.ncode) { + //=== NEEDBITS(3); + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + // We have separate tables & no pointers. 2 commented lines below not needed. + //state.next = state.codes; + //state.lencode = state.next; + // Switch to use dynamic table + state.lencode = state.lendyn; + state.lenbits = 7; + + opts = { bits: state.lenbits }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + + if (ret) { + strm.msg = 'invalid code lengths set'; + state.mode = BAD; + break; + } + //Tracev((stderr, "inflate: code lengths ok\n")); + state.have = 0; + state.mode = CODELENS; + /* falls through */ + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_val < 16) { + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.lens[state.have++] = here_val; + } + else { + if (here_val === 16) { + //=== NEEDBITS(here.bits + 2); + n = here_bits + 2; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + if (state.have === 0) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy = 3 + (hold & 0x03);//BITS(2); + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + } + else if (here_val === 17) { + //=== NEEDBITS(here.bits + 3); + n = here_bits + 3; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 3 + (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + else { + //=== NEEDBITS(here.bits + 7); + n = here_bits + 7; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 11 + (hold & 0x7f);//BITS(7); + //--- DROPBITS(7) ---// + hold >>>= 7; + bits -= 7; + //---// + } + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + while (copy--) { + state.lens[state.have++] = len; + } + } + } + + /* handle error breaks in while */ + if (state.mode === BAD) { break; } + + /* check for end-of-block code (better have one) */ + if (state.lens[256] === 0) { + strm.msg = 'invalid code -- missing end-of-block'; + state.mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state.lenbits = 9; + + opts = { bits: state.lenbits }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.lenbits = opts.bits; + // state.lencode = state.next; + + if (ret) { + strm.msg = 'invalid literal/lengths set'; + state.mode = BAD; + break; + } + + state.distbits = 6; + //state.distcode.copy(state.codes); + // Switch to use dynamic table + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.distbits = opts.bits; + // state.distcode = state.next; + + if (ret) { + strm.msg = 'invalid distances set'; + state.mode = BAD; + break; + } + //Tracev((stderr, 'inflate: codes ok\n')); + state.mode = LEN_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case LEN_: + state.mode = LEN; + /* falls through */ + case LEN: + if (have >= 6 && left >= 258) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + inflate_fast(strm, _out); + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_op && (here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.lencode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + state.mode = LIT; + break; + } + if (here_op & 32) { + //Tracevv((stderr, "inflate: end of block\n")); + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + /* falls through */ + case LENEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } + //Tracevv((stderr, "inflate: length %u\n", state.length)); + state.was = state.length; + state.mode = DIST; + /* falls through */ + case DIST: + for (;;) { + here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if ((here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.distcode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + if (here_op & 64) { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = (here_op) & 15; + state.mode = DISTEXT; + /* falls through */ + case DISTEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } +//#ifdef INFLATE_STRICT + if (state.offset > state.dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +//#endif + //Tracevv((stderr, "inflate: distance %u\n", state.offset)); + state.mode = MATCH; + /* falls through */ + case MATCH: + if (left === 0) { break inf_leave; } + copy = _out - left; + if (state.offset > copy) { /* copy from window */ + copy = state.offset - copy; + if (copy > state.whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// Trace((stderr, "inflate.c too far\n")); +// copy -= state.whave; +// if (copy > state.length) { copy = state.length; } +// if (copy > left) { copy = left; } +// left -= copy; +// state.length -= copy; +// do { +// output[put++] = 0; +// } while (--copy); +// if (state.length === 0) { state.mode = LEN; } +// break; +//#endif + } + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } + else { + from = state.wnext - copy; + } + if (copy > state.length) { copy = state.length; } + from_source = state.window; + } + else { /* copy from output */ + from_source = output; + from = put - state.offset; + copy = state.length; + } + if (copy > left) { copy = left; } + left -= copy; + state.length -= copy; + do { + output[put++] = from_source[from++]; + } while (--copy); + if (state.length === 0) { state.mode = LEN; } + break; + case LIT: + if (left === 0) { break inf_leave; } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + // Use '|' insdead of '+' to make sure that result is signed + hold |= input[next++] << bits; + bits += 8; + } + //===// + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = + /*UPDATE(state.check, put - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); + + } + _out = left; + // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = 'incorrect data check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: check matches trailer\n")); + } + state.mode = LENGTH; + /* falls through */ + case LENGTH: + if (state.wrap && state.flags) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.total & 0xffffffff)) { + strm.msg = 'incorrect length check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: length matches trailer\n")); + } + state.mode = DONE; + /* falls through */ + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* falls through */ + default: + return Z_STREAM_ERROR; + } + } + + // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + + if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && + (state.mode < CHECK || flush !== Z_FINISH))) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + + (state.mode === TYPE ? 128 : 0) + + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; +} + +function inflateEnd(strm) { + + if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { + return Z_STREAM_ERROR; + } + + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; +} + +function inflateGetHeader(strm, head) { + var state; + + /* check state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } + + /* save header structure */ + state.head = head; + head.done = false; + return Z_OK; +} + +function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var state; + var dictid; + var ret; + + /* check state */ + if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } + state = strm.state; + + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + + /* check for correct dictionary identifier */ + if (state.mode === DICT) { + dictid = 1; /* adler32(0, null, 0)*/ + /* dictid = adler32(dictid, dictionary, dictLength); */ + dictid = adler32(dictid, dictionary, dictLength, 0); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow(strm, dictionary, dictLength, dictLength); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + // Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +exports.inflateReset = inflateReset; +exports.inflateReset2 = inflateReset2; +exports.inflateResetKeep = inflateResetKeep; +exports.inflateInit = inflateInit; +exports.inflateInit2 = inflateInit2; +exports.inflate = inflate; +exports.inflateEnd = inflateEnd; +exports.inflateGetHeader = inflateGetHeader; +exports.inflateSetDictionary = inflateSetDictionary; +exports.inflateInfo = 'pako inflate (from Nodeca project)'; + +/* Not implemented +exports.inflateCopy = inflateCopy; +exports.inflateGetDictionary = inflateGetDictionary; +exports.inflateMark = inflateMark; +exports.inflatePrime = inflatePrime; +exports.inflateSync = inflateSync; +exports.inflateSyncPoint = inflateSyncPoint; +exports.inflateUndermine = inflateUndermine; +*/ + +},{"../utils/common":3,"./adler32":5,"./crc32":7,"./inffast":10,"./inftrees":12}],12:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); + +var MAXBITS = 15; +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +var lbase = [ /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 +]; + +var lext = [ /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 +]; + +var dbase = [ /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0 +]; + +var dext = [ /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64 +]; + +module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) +{ + var bits = opts.bits; + //here = opts.here; /* table entry for duplication */ + + var len = 0; /* a code's length in bits */ + var sym = 0; /* index of code symbols */ + var min = 0, max = 0; /* minimum and maximum code lengths */ + var root = 0; /* number of index bits for root table */ + var curr = 0; /* number of index bits for current table */ + var drop = 0; /* code bits to drop for sub-table */ + var left = 0; /* number of prefix codes available */ + var used = 0; /* code entries in table used */ + var huff = 0; /* Huffman code */ + var incr; /* for incrementing code, index */ + var fill; /* index for replicating entries */ + var low; /* low bits for current root entry */ + var mask; /* mask for low root bits */ + var next; /* next available space in table */ + var base = null; /* base value table to use */ + var base_index = 0; +// var shoextra; /* extra bits table to use */ + var end; /* use base and extra for symbol > end */ + var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ + var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ + var extra = null; + var extra_index = 0; + + var here_bits, here_op, here_val; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + + /* bound code lengths, force root to be within code lengths */ + root = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { break; } + } + if (root > max) { + root = max; + } + if (max === 0) { /* no symbols to code at all */ + //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ + //table.bits[opts.table_index] = 1; //here.bits = (var char)1; + //table.val[opts.table_index++] = 0; //here.val = (var short)0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + + //table.op[opts.table_index] = 64; + //table.bits[opts.table_index] = 1; + //table.val[opts.table_index++] = 0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + opts.bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { break; } + } + if (root < min) { + root = min; + } + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } /* over-subscribed */ + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; /* incomplete set */ + } + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + // poor man optimization - use if-else instead of switch, + // to avoid deopts in old v8 + if (type === CODES) { + base = extra = work; /* dummy value--not used */ + end = 19; + + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + + } else { /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize opts for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = table_index; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = -1; /* trigger new sub-table when len > root */ + used = 1 << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + var i = 0; + /* process all codes and make table entries */ + for (;;) { + i++; + /* create table entry */ + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } + else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } + else { + here_op = 32 + 64; /* end of block */ + here_val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1 << (len - drop); + fill = 1 << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; + } while (fill !== 0); + + /* backwards increment the len-bit code huff */ + incr = 1 << (len - 1); + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + + /* go to next symbol, update count, len */ + sym++; + if (--count[len] === 0) { + if (len === max) { break; } + len = lens[lens_index + work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) !== low) { + /* if first time, transition to sub-tables */ + if (drop === 0) { + drop = root; + } + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { break; } + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1 << curr; + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + /* point entry in root table to sub-table */ + low = huff & mask; + /*table.op[low] = curr; + table.bits[low] = root; + table.val[low] = next - opts.table_index;*/ + table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff !== 0) { + //table.op[next + huff] = 64; /* invalid code marker */ + //table.bits[next + huff] = len - drop; + //table.val[next + huff] = 0; + table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; + } + + /* set return parameters */ + //opts.table_index += used; + opts.bits = root; + return 0; +}; + +},{"../utils/common":3}],13:[function(require,module,exports){ +'use strict'; + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; + +},{}],14:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; +var Z_FIXED = 4; +//var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +var Z_BINARY = 0; +var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + +/*============================================================================*/ + + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +// From zutil.h + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ + +// From deflate.h +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ +var extra_lbits = /* extra bits for each length code */ + [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; + +var extra_dbits = /* extra bits for each distance code */ + [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; + +var extra_blbits = /* extra bits for each bit length code */ + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; + +var bl_order = + [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ + +// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1 +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + + this.static_tree = static_tree; /* static tree or NULL */ + this.extra_bits = extra_bits; /* extra bits for each code or NULL */ + this.extra_base = extra_base; /* base index for extra_bits */ + this.elems = elems; /* max number of elements in the tree */ + this.max_length = max_length; /* max bit length for the codes */ + + // show if `static_tree` has data or dummy - needed for monomorphic objects + this.has_stree = static_tree && static_tree.length; +} + + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; /* the dynamic tree */ + this.max_code = 0; /* largest code with non zero frequency */ + this.stat_desc = stat_desc; /* the corresponding static tree */ +} + + + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +function put_short(s, w) { +// put_byte(s, (uch)((w) & 0xff)); +// put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = (w) & 0xff; + s.pending_buf[s.pending++] = (w >>> 8) & 0xff; +} + + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +function send_bits(s, value, length) { + if (s.bi_valid > (Buf_size - length)) { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> (Buf_size - s.bi_valid); + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + s.bi_valid += length; + } +} + + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); +} + + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; +} + + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} + + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +function gen_bitlen(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; /* heap index */ + var n, m; /* iterate over the tree elements */ + var bits; /* bit length */ + var xbits; /* extra bits */ + var f; /* frequency */ + var overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1]/*.Len*/ = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { continue; } /* not a leaf node */ + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]/*.Freq*/; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); + } + } + if (overflow === 0) { return; } + + // Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { bits--; } + s.bl_count[bits]--; /* move one leaf down the tree */ + s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { continue; } + if (tree[m * 2 + 1]/*.Len*/ !== bits) { + // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; + tree[m * 2 + 1]/*.Len*/ = bits; + } + n--; + } + } +} + + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +function gen_codes(tree, max_code, bl_count) +// ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ + var code = 0; /* running code value */ + var bits; /* bit index */ + var n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits - 1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = code; + } + } + //Assert (length == 256, "tr_static_init: length != 256"); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: dist != 256"); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1]/*.Len*/ = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1]/*.Len*/ = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes(static_ltree, L_CODES + 1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1]/*.Len*/ = 5; + static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); + } + + // Now data ready and we can init static trees + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + //static_init_done = true; +} + + +/* =========================================================================== + * Initialize a new block. + */ +function init_block(s) { + var n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } + + s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} + + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +function bi_windup(s) +{ + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +function copy_block(s, buf, len, header) +//DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } +// while (len--) { +// put_byte(s, *buf++); +// } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || + (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); +} + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +function pqdownheap(s, tree, k) +// deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; /* left son of k */ + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && + smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s.heap[j], s.depth)) { break; } + + /* Exchange v with the smallest son */ + s.heap[k] = s.heap[j]; + k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s.heap[k] = v; +} + + +// inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +function compress_block(s, ltree, dtree) +// deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; /* distance of matched string */ + var lc; /* match length or unmatched char (if dist == 0) */ + var lx = 0; /* running index in l_buf */ + var code; /* the code to send */ + var extra; /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + //Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // "pendingBuf overflow"); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} + + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +function build_tree(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; /* iterate over heap elements */ + var max_code = -1; /* largest code with non zero frequency */ + var node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2]/*.Freq*/ !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + + } else { + tree[n * 2 + 1]/*.Len*/ = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); + tree[node * 2]/*.Freq*/ = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1]/*.Len*/; + } + /* node is 0 or 1 so it does not have extra bits */ + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + /*** pqremove ***/ + n = s.heap[1/*SMALLEST*/]; + s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1/*SMALLEST*/); + /***/ + + m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ + s.heap[--s.heap_max] = m; + + /* Create a new node father of n and m */ + tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; + + /* and insert the new node in the heap */ + s.heap[1/*SMALLEST*/] = node++; + pqdownheap(s, tree, 1/*SMALLEST*/); + + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes(tree, max_code, s.bl_count); +} + + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +function scan_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + s.bl_tree[curlen * 2]/*.Freq*/ += count; + + } else if (curlen !== 0) { + + if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } + s.bl_tree[REP_3_6 * 2]/*.Freq*/++; + + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; + + } else { + s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +function send_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); + + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + //Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +function build_bl_tree(s) { + var max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + // s->opt_len, s->static_len)); + + return max_blindex; +} + + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +function send_all_trees(s, lcodes, dcodes, blcodes) +// deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; /* index in bl_order */ + + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // "too many codes"); + //Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); + } + //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ + //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ + //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { + return Z_BINARY; + } + } + + /* Check for textual ("white-listed") bytes. */ + if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || + s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + } + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + + +var static_init_done = false; + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +function _tr_init(s) +{ + + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + + s.bi_buf = 0; + s.bi_valid = 0; + + /* Initialize the first block of the first file: */ + init_block(s); +} + + +/* =========================================================================== + * Send a stored block + */ +function _tr_stored_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ + copy_block(s, buf, stored_len, true); /* with header */ +} + + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} + + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +function _tr_flush_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + var max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s.level > 0) { + + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + + /* Construct the literal and distance trees */ + build_tree(s, s.l_desc); + // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); + // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s.opt_len + 3 + 7) >>> 3; + static_lenb = (s.static_len + 3 + 7) >>> 3; + + // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } + + } else { + // Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + + if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); + } + // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + // s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +function _tr_tally(s, dist, lc) +// deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + + s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + /* lc is the unmatched char */ + s.dyn_ltree[lc * 2]/*.Freq*/++; + } else { + s.matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + //Assert((ush)dist < (ush)MAX_DIST(s) && + // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; + } + +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility + +//#ifdef TRUNCATE_BLOCK +// /* Try to guess if it is profitable to stop the current block here */ +// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { +// /* Compute an upper bound for the compressed length */ +// out_length = s.last_lit*8; +// in_length = s.strstart - s.block_start; +// +// for (dcode = 0; dcode < D_CODES; dcode++) { +// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); +// } +// out_length >>>= 3; +// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", +// // s->last_lit, in_length, out_length, +// // 100L - out_length*100L/in_length)); +// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { +// return true; +// } +// } +//#endif + + return (s.last_lit === s.lit_bufsize - 1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; + +},{"../utils/common":3}],15:[function(require,module,exports){ +'use strict'; + + +function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + this.next_in = 0; + /* number of bytes available at input */ + this.avail_in = 0; + /* total number of input bytes read so far */ + this.total_in = 0; + /* next output byte should be put there */ + this.output = null; // JS specific, because we have no pointers + this.next_out = 0; + /* remaining free space at output */ + this.avail_out = 0; + /* total number of bytes output so far */ + this.total_out = 0; + /* last error message, NULL if no error */ + this.msg = ''/*Z_NULL*/; + /* not visible by applications */ + this.state = null; + /* best guess about the data type: binary or text */ + this.data_type = 2/*Z_UNKNOWN*/; + /* adler32 value of the uncompressed data */ + this.adler = 0; +} + +module.exports = ZStream; + +},{}],"/":[function(require,module,exports){ +// Top level file is just a mixin of submodules & constants +'use strict'; + +var assign = require('./lib/utils/common').assign; + +var deflate = require('./lib/deflate'); +var inflate = require('./lib/inflate'); +var constants = require('./lib/zlib/constants'); + +var pako = {}; + +assign(pako, deflate, inflate, constants); + +module.exports = pako; + +},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/") +}); \ No newline at end of file diff --git a/node_modules/pako/dist/pako.min.js b/node_modules/pako/dist/pako.min.js new file mode 100644 index 0000000..c2b86b6 --- /dev/null +++ b/node_modules/pako/dist/pako.min.js @@ -0,0 +1,3 @@ +/* pako 0.2.9 nodeca/pako */ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.pako=t()}}(function(){return function t(e,a,i){function n(s,o){if(!a[s]){if(!e[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(r)return r(s,!0);var h=new Error("Cannot find module '"+s+"'");throw h.code="MODULE_NOT_FOUND",h}var d=a[s]={exports:{}};e[s][0].call(d.exports,function(t){var a=e[s][1][t];return n(a?a:t)},d,d.exports,t,e,a,i)}return a[s].exports}for(var r="function"==typeof require&&require,s=0;s0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var a=o.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==b)throw new Error(d[a]);if(e.header&&o.deflateSetHeader(this.strm,e.header),e.dictionary){var n;if(n="string"==typeof e.dictionary?h.string2buf(e.dictionary):"[object ArrayBuffer]"===_.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=o.deflateSetDictionary(this.strm,n),a!==b)throw new Error(d[a]);this._dict_set=!0}}function n(t,e){var a=new i(e);if(a.push(t,!0),a.err)throw a.msg;return a.result}function r(t,e){return e=e||{},e.raw=!0,n(t,e)}function s(t,e){return e=e||{},e.gzip=!0,n(t,e)}var o=t("./zlib/deflate"),l=t("./utils/common"),h=t("./utils/strings"),d=t("./zlib/messages"),f=t("./zlib/zstream"),_=Object.prototype.toString,u=0,c=4,b=0,g=1,m=2,w=-1,p=0,v=8;i.prototype.push=function(t,e){var a,i,n=this.strm,r=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:e===!0?c:u,"string"==typeof t?n.input=h.string2buf(t):"[object ArrayBuffer]"===_.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new l.Buf8(r),n.next_out=0,n.avail_out=r),a=o.deflate(n,i),a!==g&&a!==b)return this.onEnd(a),this.ended=!0,!1;0!==n.avail_out&&(0!==n.avail_in||i!==c&&i!==m)||("string"===this.options.to?this.onData(h.buf2binstring(l.shrinkBuf(n.output,n.next_out))):this.onData(l.shrinkBuf(n.output,n.next_out)))}while((n.avail_in>0||0===n.avail_out)&&a!==g);return i===c?(a=o.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===b):i!==m||(this.onEnd(b),n.avail_out=0,!0)},i.prototype.onData=function(t){this.chunks.push(t)},i.prototype.onEnd=function(t){t===b&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Deflate=i,a.deflate=n,a.deflateRaw=r,a.gzip=s},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(t,e,a){"use strict";function i(t){if(!(this instanceof i))return new i(t);this.options=o.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0===(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var a=s.inflateInit2(this.strm,e.windowBits);if(a!==h.Z_OK)throw new Error(d[a]);this.header=new _,s.inflateGetHeader(this.strm,this.header)}function n(t,e){var a=new i(e);if(a.push(t,!0),a.err)throw a.msg;return a.result}function r(t,e){return e=e||{},e.raw=!0,n(t,e)}var s=t("./zlib/inflate"),o=t("./utils/common"),l=t("./utils/strings"),h=t("./zlib/constants"),d=t("./zlib/messages"),f=t("./zlib/zstream"),_=t("./zlib/gzheader"),u=Object.prototype.toString;i.prototype.push=function(t,e){var a,i,n,r,d,f,_=this.strm,c=this.options.chunkSize,b=this.options.dictionary,g=!1;if(this.ended)return!1;i=e===~~e?e:e===!0?h.Z_FINISH:h.Z_NO_FLUSH,"string"==typeof t?_.input=l.binstring2buf(t):"[object ArrayBuffer]"===u.call(t)?_.input=new Uint8Array(t):_.input=t,_.next_in=0,_.avail_in=_.input.length;do{if(0===_.avail_out&&(_.output=new o.Buf8(c),_.next_out=0,_.avail_out=c),a=s.inflate(_,h.Z_NO_FLUSH),a===h.Z_NEED_DICT&&b&&(f="string"==typeof b?l.string2buf(b):"[object ArrayBuffer]"===u.call(b)?new Uint8Array(b):b,a=s.inflateSetDictionary(this.strm,f)),a===h.Z_BUF_ERROR&&g===!0&&(a=h.Z_OK,g=!1),a!==h.Z_STREAM_END&&a!==h.Z_OK)return this.onEnd(a),this.ended=!0,!1;_.next_out&&(0!==_.avail_out&&a!==h.Z_STREAM_END&&(0!==_.avail_in||i!==h.Z_FINISH&&i!==h.Z_SYNC_FLUSH)||("string"===this.options.to?(n=l.utf8border(_.output,_.next_out),r=_.next_out-n,d=l.buf2string(_.output,n),_.next_out=r,_.avail_out=c-r,r&&o.arraySet(_.output,_.output,n,r,0),this.onData(d)):this.onData(o.shrinkBuf(_.output,_.next_out)))),0===_.avail_in&&0===_.avail_out&&(g=!0)}while((_.avail_in>0||0===_.avail_out)&&a!==h.Z_STREAM_END);return a===h.Z_STREAM_END&&(i=h.Z_FINISH),i===h.Z_FINISH?(a=s.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===h.Z_OK):i!==h.Z_SYNC_FLUSH||(this.onEnd(h.Z_OK),_.avail_out=0,!0)},i.prototype.onData=function(t){this.chunks.push(t)},i.prototype.onEnd=function(t){t===h.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Inflate=i,a.inflate=n,a.inflateRaw=r,a.ungzip=n},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(t,e,a){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;a.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(var i in a)a.hasOwnProperty(i)&&(t[i]=a[i])}}return t},a.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,a,i,n){if(e.subarray&&t.subarray)return void t.set(e.subarray(a,a+i),n);for(var r=0;r=252?6:l>=248?5:l>=240?4:l>=224?3:l>=192?2:1;o[254]=o[254]=1,a.string2buf=function(t){var e,a,i,r,s,o=t.length,l=0;for(r=0;r>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},a.buf2binstring=function(t){return i(t,t.length)},a.binstring2buf=function(t){for(var e=new n.Buf8(t.length),a=0,i=e.length;a4)h[n++]=65533,a+=s-1;else{for(r&=2===s?31:3===s?15:7;s>1&&a1?h[n++]=65533:r<65536?h[n++]=r:(r-=65536,h[n++]=55296|r>>10&1023,h[n++]=56320|1023&r)}return i(h,n)},a.utf8border=function(t,e){var a;for(e=e||t.length,e>t.length&&(e=t.length),a=e-1;a>=0&&128===(192&t[a]);)a--;return a<0?e:0===a?e:a+o[t[a]]>e?a:e}},{"./common":3}],5:[function(t,e,a){"use strict";function i(t,e,a,i){for(var n=65535&t|0,r=t>>>16&65535|0,s=0;0!==a;){s=a>2e3?2e3:a,a-=s;do n=n+e[i++]|0,r=r+n|0;while(--s);n%=65521,r%=65521}return n|r<<16|0}e.exports=i},{}],6:[function(t,e,a){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],7:[function(t,e,a){"use strict";function i(){for(var t,e=[],a=0;a<256;a++){t=a;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}function n(t,e,a,i){var n=r,s=i+a;t^=-1;for(var o=i;o>>8^n[255&(t^e[o])];return t^-1}var r=i();e.exports=n},{}],8:[function(t,e,a){"use strict";function i(t,e){return t.msg=D[e],e}function n(t){return(t<<1)-(t>4?9:0)}function r(t){for(var e=t.length;--e>=0;)t[e]=0}function s(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(R.arraySet(t.output,e.pending_buf,e.pending_out,a,t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))}function o(t,e){C._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,s(t.strm)}function l(t,e){t.pending_buf[t.pending++]=e}function h(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function d(t,e,a,i){var n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,R.arraySet(e,t.input,t.next_in,n,a),1===t.state.wrap?t.adler=N(t.adler,e,n,a):2===t.state.wrap&&(t.adler=O(t.adler,e,n,a)),t.next_in+=n,t.total_in+=n,n)}function f(t,e){var a,i,n=t.max_chain_length,r=t.strstart,s=t.prev_length,o=t.nice_match,l=t.strstart>t.w_size-ft?t.strstart-(t.w_size-ft):0,h=t.window,d=t.w_mask,f=t.prev,_=t.strstart+dt,u=h[r+s-1],c=h[r+s];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do if(a=e,h[a+s]===c&&h[a+s-1]===u&&h[a]===h[r]&&h[++a]===h[r+1]){r+=2,a++;do;while(h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&r<_);if(i=dt-(_-r),r=_-dt,i>s){if(t.match_start=e,s=i,i>=o)break;u=h[r+s-1],c=h[r+s]}}while((e=f[e&d])>l&&0!==--n);return s<=t.lookahead?s:t.lookahead}function _(t){var e,a,i,n,r,s=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=s+(s-ft)){R.arraySet(t.window,t.window,s,s,0),t.match_start-=s,t.strstart-=s,t.block_start-=s,a=t.hash_size,e=a;do i=t.head[--e],t.head[e]=i>=s?i-s:0;while(--a);a=s,e=a;do i=t.prev[--e],t.prev[e]=i>=s?i-s:0;while(--a);n+=s}if(0===t.strm.avail_in)break;if(a=d(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=a,t.lookahead+t.insert>=ht)for(r=t.strstart-t.insert,t.ins_h=t.window[r],t.ins_h=(t.ins_h<t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(_(t),0===t.lookahead&&e===I)return vt;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+a;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,o(t,!1),0===t.strm.avail_out))return vt;if(t.strstart-t.block_start>=t.w_size-ft&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.strstart>t.block_start&&(o(t,!1),0===t.strm.avail_out)?vt:vt}function c(t,e){for(var a,i;;){if(t.lookahead=ht&&(t.ins_h=(t.ins_h<=ht)if(i=C._tr_tally(t,t.strstart-t.match_start,t.match_length-ht),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=ht){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<=ht&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=ht-1)),t.prev_length>=ht&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-ht,i=C._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-ht),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=n&&(t.ins_h=(t.ins_h<=ht&&t.strstart>0&&(n=t.strstart-1,i=s[n],i===s[++n]&&i===s[++n]&&i===s[++n])){r=t.strstart+dt;do;while(i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&nt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=ht?(a=C._tr_tally(t,1,t.match_length-ht),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=C._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?vt:kt}function m(t,e){for(var a;;){if(0===t.lookahead&&(_(t),0===t.lookahead)){if(e===I)return vt;break}if(t.match_length=0,a=C._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?vt:kt}function w(t,e,a,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=i,this.func=n}function p(t){t.window_size=2*t.w_size,r(t.head),t.max_lazy_match=Z[t.level].max_lazy,t.good_match=Z[t.level].good_length,t.nice_match=Z[t.level].nice_length,t.max_chain_length=Z[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=ht-1,t.match_available=0,t.ins_h=0}function v(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=V,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new R.Buf16(2*ot),this.dyn_dtree=new R.Buf16(2*(2*rt+1)),this.bl_tree=new R.Buf16(2*(2*st+1)),r(this.dyn_ltree),r(this.dyn_dtree),r(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new R.Buf16(lt+1),this.heap=new R.Buf16(2*nt+1),r(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new R.Buf16(2*nt+1),r(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function k(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=Q,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?ut:wt,t.adler=2===e.wrap?0:1,e.last_flush=I,C._tr_init(e),H):i(t,K)}function y(t){var e=k(t);return e===H&&p(t.state),e}function x(t,e){return t&&t.state?2!==t.state.wrap?K:(t.state.gzhead=e,H):K}function z(t,e,a,n,r,s){if(!t)return K;var o=1;if(e===Y&&(e=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),r<1||r>$||a!==V||n<8||n>15||e<0||e>9||s<0||s>W)return i(t,K);8===n&&(n=9);var l=new v;return t.state=l,l.strm=t,l.wrap=o,l.gzhead=null,l.w_bits=n,l.w_size=1<L||e<0)return t?i(t,K):K;if(o=t.state,!t.output||!t.input&&0!==t.avail_in||o.status===pt&&e!==F)return i(t,0===t.avail_out?P:K);if(o.strm=t,a=o.last_flush,o.last_flush=e,o.status===ut)if(2===o.wrap)t.adler=0,l(o,31),l(o,139),l(o,8),o.gzhead?(l(o,(o.gzhead.text?1:0)+(o.gzhead.hcrc?2:0)+(o.gzhead.extra?4:0)+(o.gzhead.name?8:0)+(o.gzhead.comment?16:0)),l(o,255&o.gzhead.time),l(o,o.gzhead.time>>8&255),l(o,o.gzhead.time>>16&255),l(o,o.gzhead.time>>24&255),l(o,9===o.level?2:o.strategy>=G||o.level<2?4:0),l(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(l(o,255&o.gzhead.extra.length),l(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(t.adler=O(t.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=ct):(l(o,0),l(o,0),l(o,0),l(o,0),l(o,0),l(o,9===o.level?2:o.strategy>=G||o.level<2?4:0),l(o,zt),o.status=wt);else{var _=V+(o.w_bits-8<<4)<<8,u=-1;u=o.strategy>=G||o.level<2?0:o.level<6?1:6===o.level?2:3,_|=u<<6,0!==o.strstart&&(_|=_t),_+=31-_%31,o.status=wt,h(o,_),0!==o.strstart&&(h(o,t.adler>>>16),h(o,65535&t.adler)),t.adler=1}if(o.status===ct)if(o.gzhead.extra){for(d=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending!==o.pending_buf_size));)l(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=bt)}else o.status=bt;if(o.status===bt)if(o.gzhead.name){d=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindexd&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),0===f&&(o.gzindex=0,o.status=gt)}else o.status=gt;if(o.status===gt)if(o.gzhead.comment){d=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindexd&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),0===f&&(o.status=mt)}else o.status=mt;if(o.status===mt&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&s(t),o.pending+2<=o.pending_buf_size&&(l(o,255&t.adler),l(o,t.adler>>8&255),t.adler=0,o.status=wt)):o.status=wt),0!==o.pending){if(s(t),0===t.avail_out)return o.last_flush=-1,H}else if(0===t.avail_in&&n(e)<=n(a)&&e!==F)return i(t,P);if(o.status===pt&&0!==t.avail_in)return i(t,P);if(0!==t.avail_in||0!==o.lookahead||e!==I&&o.status!==pt){var c=o.strategy===G?m(o,e):o.strategy===X?g(o,e):Z[o.level].func(o,e);if(c!==yt&&c!==xt||(o.status=pt),c===vt||c===yt)return 0===t.avail_out&&(o.last_flush=-1),H;if(c===kt&&(e===U?C._tr_align(o):e!==L&&(C._tr_stored_block(o,0,0,!1),e===T&&(r(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),s(t),0===t.avail_out))return o.last_flush=-1,H}return e!==F?H:o.wrap<=0?j:(2===o.wrap?(l(o,255&t.adler),l(o,t.adler>>8&255),l(o,t.adler>>16&255),l(o,t.adler>>24&255),l(o,255&t.total_in),l(o,t.total_in>>8&255),l(o,t.total_in>>16&255),l(o,t.total_in>>24&255)):(h(o,t.adler>>>16),h(o,65535&t.adler)),s(t),o.wrap>0&&(o.wrap=-o.wrap),0!==o.pending?H:j)}function E(t){var e;return t&&t.state?(e=t.state.status,e!==ut&&e!==ct&&e!==bt&&e!==gt&&e!==mt&&e!==wt&&e!==pt?i(t,K):(t.state=null,e===wt?i(t,M):H)):K}function A(t,e){var a,i,n,s,o,l,h,d,f=e.length;if(!t||!t.state)return K;if(a=t.state,s=a.wrap,2===s||1===s&&a.status!==ut||a.lookahead)return K;for(1===s&&(t.adler=N(t.adler,e,f,0)),a.wrap=0,f>=a.w_size&&(0===s&&(r(a.head),a.strstart=0,a.block_start=0,a.insert=0),d=new R.Buf8(a.w_size),R.arraySet(d,e,f-a.w_size,a.w_size,0),e=d,f=a.w_size),o=t.avail_in,l=t.next_in,h=t.input,t.avail_in=f,t.next_in=0,t.input=e,_(a);a.lookahead>=ht;){i=a.strstart,n=a.lookahead-(ht-1);do a.ins_h=(a.ins_h<>>24,b>>>=y,g-=y,y=k>>>16&255,0===y)A[o++]=65535&k;else{if(!(16&y)){if(0===(64&y)){k=m[(65535&k)+(b&(1<>>=y,g-=y),g<15&&(b+=E[r++]<>>24,b>>>=y,g-=y,y=k>>>16&255,!(16&y)){if(0===(64&y)){k=w[(65535&k)+(b&(1<d){t.msg="invalid distance too far back",a.mode=i;break t}if(b>>>=y,g-=y,y=o-l,z>y){if(y=z-y,y>_&&a.sane){t.msg="invalid distance too far back",a.mode=i;break t}if(B=0,S=c,0===u){if(B+=f-y,y2;)A[o++]=S[B++],A[o++]=S[B++],A[o++]=S[B++],x-=3;x&&(A[o++]=S[B++],x>1&&(A[o++]=S[B++]))}else{B=o-z;do A[o++]=A[B++],A[o++]=A[B++],A[o++]=A[B++],x-=3;while(x>2);x&&(A[o++]=A[B++],x>1&&(A[o++]=A[B++]))}break}}break}}while(r>3,r-=x,g-=x<<3,b&=(1<>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function n(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new w.Buf16(320),this.work=new w.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function r(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=T,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new w.Buf32(bt),e.distcode=e.distdyn=new w.Buf32(gt),e.sane=1,e.back=-1,Z):N}function s(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,r(t)):N}function o(t,e){var a,i;return t&&t.state?(i=t.state,e<0?(a=0,e=-e):(a=(e>>4)+1,e<48&&(e&=15)),e&&(e<8||e>15)?N:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=a,i.wbits=e,s(t))):N}function l(t,e){var a,i;return t?(i=new n,t.state=i,i.window=null,a=o(t,e),a!==Z&&(t.state=null),a):N}function h(t){return l(t,wt)}function d(t){if(pt){var e;for(g=new w.Buf32(512),m=new w.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(y(z,t.lens,0,288,g,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;y(B,t.lens,0,32,m,0,t.work,{bits:5}),pt=!1}t.lencode=g,t.lenbits=9,t.distcode=m,t.distbits=5}function f(t,e,a,i){var n,r=t.state;return null===r.window&&(r.wsize=1<=r.wsize?(w.arraySet(r.window,e,a-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n=r.wsize-r.wnext,n>i&&(n=i),w.arraySet(r.window,e,a-i,n,r.wnext),i-=n,i?(w.arraySet(r.window,e,a-i,i,0),r.wnext=i,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,a.check=v(a.check,Et,2,0),_=0,u=0,a.mode=F;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&_)<<8)+(_>>8))%31){t.msg="incorrect header check",a.mode=_t;break}if((15&_)!==U){t.msg="unknown compression method",a.mode=_t;break}if(_>>>=4,u-=4,yt=(15&_)+8,0===a.wbits)a.wbits=yt;else if(yt>a.wbits){t.msg="invalid window size",a.mode=_t;break}a.dmax=1<>8&1),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0,a.mode=L;case L:for(;u<32;){if(0===l)break t;l--,_+=n[s++]<>>8&255,Et[2]=_>>>16&255,Et[3]=_>>>24&255,a.check=v(a.check,Et,4,0)),_=0,u=0,a.mode=H;case H:for(;u<16;){if(0===l)break t;l--,_+=n[s++]<>8),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0,a.mode=j;case j:if(1024&a.flags){for(;u<16;){if(0===l)break t;l--,_+=n[s++]<>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0}else a.head&&(a.head.extra=null);a.mode=K;case K:if(1024&a.flags&&(g=a.length,g>l&&(g=l),g&&(a.head&&(yt=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),w.arraySet(a.head.extra,n,s,g,yt)),512&a.flags&&(a.check=v(a.check,n,g,s)),l-=g,s+=g,a.length-=g),a.length))break t;a.length=0,a.mode=M;case M:if(2048&a.flags){if(0===l)break t;g=0;do yt=n[s+g++],a.head&&yt&&a.length<65536&&(a.head.name+=String.fromCharCode(yt));while(yt&&g>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=X;break;case q:for(;u<32;){if(0===l)break t;l--,_+=n[s++]<>>=7&u,u-=7&u,a.mode=ht;break}for(;u<3;){if(0===l)break t;l--,_+=n[s++]<>>=1,u-=1,3&_){case 0:a.mode=J;break;case 1:if(d(a),a.mode=at,e===A){_>>>=2,u-=2;break t}break;case 2:a.mode=$;break;case 3:t.msg="invalid block type",a.mode=_t}_>>>=2,u-=2;break;case J:for(_>>>=7&u,u-=7&u;u<32;){if(0===l)break t;l--,_+=n[s++]<>>16^65535)){t.msg="invalid stored block lengths",a.mode=_t;break}if(a.length=65535&_,_=0,u=0,a.mode=Q,e===A)break t;case Q:a.mode=V;case V:if(g=a.length){if(g>l&&(g=l),g>h&&(g=h),0===g)break t;w.arraySet(r,n,s,g,o),l-=g,s+=g,h-=g,o+=g,a.length-=g;break}a.mode=X;break;case $:for(;u<14;){if(0===l)break t; +l--,_+=n[s++]<>>=5,u-=5,a.ndist=(31&_)+1,_>>>=5,u-=5,a.ncode=(15&_)+4,_>>>=4,u-=4,a.nlen>286||a.ndist>30){t.msg="too many length or distance symbols",a.mode=_t;break}a.have=0,a.mode=tt;case tt:for(;a.have>>=3,u-=3}for(;a.have<19;)a.lens[At[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,zt={bits:a.lenbits},xt=y(x,a.lens,0,19,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg="invalid code lengths set",a.mode=_t;break}a.have=0,a.mode=et;case et:for(;a.have>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<>>=gt,u-=gt,a.lens[a.have++]=wt;else{if(16===wt){for(Bt=gt+2;u>>=gt,u-=gt,0===a.have){t.msg="invalid bit length repeat",a.mode=_t;break}yt=a.lens[a.have-1],g=3+(3&_),_>>>=2,u-=2}else if(17===wt){for(Bt=gt+3;u>>=gt,u-=gt,yt=0,g=3+(7&_),_>>>=3,u-=3}else{for(Bt=gt+7;u>>=gt,u-=gt,yt=0,g=11+(127&_),_>>>=7,u-=7}if(a.have+g>a.nlen+a.ndist){t.msg="invalid bit length repeat",a.mode=_t;break}for(;g--;)a.lens[a.have++]=yt}}if(a.mode===_t)break;if(0===a.lens[256]){t.msg="invalid code -- missing end-of-block",a.mode=_t;break}if(a.lenbits=9,zt={bits:a.lenbits},xt=y(z,a.lens,0,a.nlen,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg="invalid literal/lengths set",a.mode=_t;break}if(a.distbits=6,a.distcode=a.distdyn,zt={bits:a.distbits},xt=y(B,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,zt),a.distbits=zt.bits,xt){t.msg="invalid distances set",a.mode=_t;break}if(a.mode=at,e===A)break t;case at:a.mode=it;case it:if(l>=6&&h>=258){t.next_out=o,t.avail_out=h,t.next_in=s,t.avail_in=l,a.hold=_,a.bits=u,k(t,b),o=t.next_out,r=t.output,h=t.avail_out,s=t.next_in,n=t.input,l=t.avail_in,_=a.hold,u=a.bits,a.mode===X&&(a.back=-1);break}for(a.back=0;St=a.lencode[_&(1<>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<>pt)],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(pt+gt<=u);){if(0===l)break t;l--,_+=n[s++]<>>=pt,u-=pt,a.back+=pt}if(_>>>=gt,u-=gt,a.back+=gt,a.length=wt,0===mt){a.mode=lt;break}if(32&mt){a.back=-1,a.mode=X;break}if(64&mt){t.msg="invalid literal/length code",a.mode=_t;break}a.extra=15&mt,a.mode=nt;case nt:if(a.extra){for(Bt=a.extra;u>>=a.extra,u-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=rt;case rt:for(;St=a.distcode[_&(1<>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<>pt)],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(pt+gt<=u);){if(0===l)break t;l--,_+=n[s++]<>>=pt,u-=pt,a.back+=pt}if(_>>>=gt,u-=gt,a.back+=gt,64&mt){t.msg="invalid distance code",a.mode=_t;break}a.offset=wt,a.extra=15&mt,a.mode=st;case st:if(a.extra){for(Bt=a.extra;u>>=a.extra,u-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg="invalid distance too far back",a.mode=_t;break}a.mode=ot;case ot:if(0===h)break t;if(g=b-h,a.offset>g){if(g=a.offset-g,g>a.whave&&a.sane){t.msg="invalid distance too far back",a.mode=_t;break}g>a.wnext?(g-=a.wnext,m=a.wsize-g):m=a.wnext-g,g>a.length&&(g=a.length),bt=a.window}else bt=r,m=o-a.offset,g=a.length;g>h&&(g=h),h-=g,a.length-=g;do r[o++]=bt[m++];while(--g);0===a.length&&(a.mode=it);break;case lt:if(0===h)break t;r[o++]=a.length,h--,a.mode=it;break;case ht:if(a.wrap){for(;u<32;){if(0===l)break t;l--,_|=n[s++]<=1&&0===j[N];N--);if(O>N&&(O=N),0===N)return b[g++]=20971520,b[g++]=20971520,w.bits=1,0;for(C=1;C0&&(t===o||1!==N))return-1;for(K[1]=0,Z=1;Zr||t===h&&T>s)return 1;for(var Y=0;;){Y++,B=Z-I,m[R]z?(S=M[P+m[R]],E=L[H+m[R]]):(S=96,E=0),p=1<>I)+v]=B<<24|S<<16|E|0;while(0!==v);for(p=1<>=1;if(0!==p?(F&=p-1,F+=p):F=0,R++,0===--j[Z]){if(Z===N)break;Z=e[a+m[R]]}if(Z>O&&(F&y)!==k){for(0===I&&(I=O),x+=C,D=Z-I,U=1<r||t===h&&T>s)return 1;k=F&y,b[k]=O<<24|D<<16|x-g|0}}return 0!==F&&(b[x+F]=Z-I<<24|64<<16|0),w.bits=O,0}},{"../utils/common":3}],13:[function(t,e,a){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],14:[function(t,e,a){"use strict";function i(t){for(var e=t.length;--e>=0;)t[e]=0}function n(t,e,a,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function r(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function s(t){return t<256?lt[t]:lt[256+(t>>>7)]}function o(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function l(t,e,a){t.bi_valid>W-a?(t.bi_buf|=e<>W-t.bi_valid,t.bi_valid+=a-W):(t.bi_buf|=e<>>=1,a<<=1;while(--e>0);return a>>>1}function f(t){16===t.bi_valid?(o(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function _(t,e){var a,i,n,r,s,o,l=e.dyn_tree,h=e.max_code,d=e.stat_desc.static_tree,f=e.stat_desc.has_stree,_=e.stat_desc.extra_bits,u=e.stat_desc.extra_base,c=e.stat_desc.max_length,b=0;for(r=0;r<=X;r++)t.bl_count[r]=0;for(l[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;ac&&(r=c,b++),l[2*i+1]=r,i>h||(t.bl_count[r]++,s=0,i>=u&&(s=_[i-u]),o=l[2*i],t.opt_len+=o*(r+s),f&&(t.static_len+=o*(d[2*i+1]+s)));if(0!==b){do{for(r=c-1;0===t.bl_count[r];)r--;t.bl_count[r]--,t.bl_count[r+1]+=2,t.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(i=t.bl_count[r];0!==i;)n=t.heap[--a],n>h||(l[2*n+1]!==r&&(t.opt_len+=(r-l[2*n+1])*l[2*n],l[2*n+1]=r),i--)}}function u(t,e,a){var i,n,r=new Array(X+1),s=0;for(i=1;i<=X;i++)r[i]=s=s+a[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=d(r[o]++,o))}}function c(){var t,e,a,i,r,s=new Array(X+1);for(a=0,i=0;i>=7;i8?o(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function m(t,e,a,i){g(t),i&&(o(t,a),o(t,~a)),N.arraySet(t.pending_buf,t.window,e,a,t.pending),t.pending+=a}function w(t,e,a,i){var n=2*e,r=2*a;return t[n]>1;a>=1;a--)p(t,r,a);n=l;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],p(t,r,1),i=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=i,r[2*n]=r[2*a]+r[2*i],t.depth[n]=(t.depth[a]>=t.depth[i]?t.depth[a]:t.depth[i])+1,r[2*a+1]=r[2*i+1]=n,t.heap[1]=n++,p(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],_(t,e),u(r,h,t.bl_count)}function y(t,e,a){var i,n,r=-1,s=e[1],o=0,l=7,h=4;for(0===s&&(l=138,h=3),e[2*(a+1)+1]=65535,i=0;i<=a;i++)n=s,s=e[2*(i+1)+1],++o=3&&0===t.bl_tree[2*nt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function B(t,e,a,i){var n;for(l(t,e-257,5),l(t,a-1,5),l(t,i-4,4),n=0;n>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return D;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return I;for(e=32;e0?(t.strm.data_type===U&&(t.strm.data_type=S(t)),k(t,t.l_desc),k(t,t.d_desc),s=z(t),n=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=n&&(n=r)):n=r=a+5,a+4<=n&&e!==-1?A(t,e,a,i):t.strategy===O||r===n?(l(t,(F<<1)+(i?1:0),3),v(t,st,ot)):(l(t,(L<<1)+(i?1:0),3),B(t,t.l_desc.max_code+1,t.d_desc.max_code+1,s+1),v(t,t.dyn_ltree,t.dyn_dtree)),b(t),i&&g(t)}function C(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(ht[a]+M+1)]++,t.dyn_dtree[2*s(e)]++),t.last_lit===t.lit_bufsize-1}var N=t("../utils/common"),O=4,D=0,I=1,U=2,T=0,F=1,L=2,H=3,j=258,K=29,M=256,P=M+1+K,Y=30,q=19,G=2*P+1,X=15,W=16,J=7,Q=256,V=16,$=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],at=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],it=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],nt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],rt=512,st=new Array(2*(P+2));i(st);var ot=new Array(2*Y);i(ot);var lt=new Array(rt);i(lt);var ht=new Array(j-H+1);i(ht);var dt=new Array(K);i(dt);var ft=new Array(Y);i(ft);var _t,ut,ct,bt=!1;a._tr_init=E,a._tr_stored_block=A,a._tr_flush_block=R,a._tr_tally=C,a._tr_align=Z},{"../utils/common":3}],15:[function(t,e,a){"use strict";function i(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}e.exports=i},{}],"/":[function(t,e,a){"use strict";var i=t("./lib/utils/common").assign,n=t("./lib/deflate"),r=t("./lib/inflate"),s=t("./lib/zlib/constants"),o={};i(o,n,r,s),e.exports=o},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/")}); diff --git a/node_modules/pako/dist/pako_deflate.js b/node_modules/pako/dist/pako_deflate.js new file mode 100644 index 0000000..a5f9572 --- /dev/null +++ b/node_modules/pako/dist/pako_deflate.js @@ -0,0 +1,3879 @@ +/* pako 0.2.9 nodeca/pako */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start + + +// convert string to array (typed, when possible) +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + buf = new utils.Buf8(buf_len); + + // convert + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Helper (used in 2 places) +function buf2binstring(buf, len) { + // use fallback for big arrays to avoid stack overflow + if (len < 65537) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} + + +// Convert byte array to binary string +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; + + +// Convert binary string (typed, when possible) +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; + + +// convert array to string +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len * 2); + + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + // quick process ascii + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + // skip 5 & 6 byte codes + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; + + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +},{"./common":1}],3:[function(require,module,exports){ +'use strict'; + +// Note: adler32 takes 12% for level 0 and 2% for level 6. +// It doesn't worth to make additional optimizationa as in original. +// Small size is preferable. + +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + + while (len !== 0) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} + + +module.exports = adler32; + +},{}],4:[function(require,module,exports){ +'use strict'; + +// Note: we can't get significant speed boost here. +// So write code to minimize size - no pregenerated tables +// and array tools dependencies. + + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; + +},{}],5:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils/common'); +var trees = require('./trees'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var msg = require('./messages'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +//var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +//var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +//var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + + +/* compression levels */ +//var Z_NO_COMPRESSION = 0; +//var Z_BEST_SPEED = 1; +//var Z_BEST_COMPRESSION = 9; +var Z_DEFAULT_COMPRESSION = -1; + + +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +//var Z_BINARY = 0; +//var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + + +/* The deflate compression method */ +var Z_DEFLATED = 8; + +/*============================================================================*/ + + +var MAX_MEM_LEVEL = 9; +/* Maximum value for memLevel in deflateInit2 */ +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_MEM_LEVEL = 8; + + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ +var LITERALS = 256; +/* number of literal bytes 0..255 */ +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ +var D_CODES = 30; +/* number of distance codes */ +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + +var PRESET_DICT = 0x20; + +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; + +var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ +var BS_BLOCK_DONE = 2; /* block flush performed */ +var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ +var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ + +var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return ((f) << 1) - ((f) > 4 ? 9 : 0); +} + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->output buffer and copying into it. + * (See also read_buf()). + */ +function flush_pending(strm) { + var s = strm.state; + + //_tr_flush_bits(s); + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { return; } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } +} + + +function flush_block_only(s, last) { + trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); + s.block_start = s.strstart; + flush_pending(s.strm); +} + + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} + + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +function putShortMSB(s, b) { +// put_byte(s, (Byte)(b >> 8)); +// put_byte(s, (Byte)(b & 0xff)); + s.pending_buf[s.pending++] = (b >>> 8) & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} + + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->input buffer and copying from it. + * (See also flush_pending()). + */ +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { len = size; } + if (len === 0) { return 0; } + + strm.avail_in -= len; + + // zmemcpy(buf, strm->next_in, len); + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } + + else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + + return len; +} + + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; /* max hash chain length */ + var scan = s.strstart; /* current string */ + var match; /* matched string */ + var len; /* length of current match */ + var best_len = s.prev_length; /* best match length so far */ + var nice_match = s.nice_match; /* stop if match long enough */ + var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? + s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; + + var _win = s.window; // shortcut + + var wmask = s.w_mask; + var prev = s.prev; + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if (nice_match > s.lookahead) { nice_match = s.lookahead; } + + // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + // Assert(cur_match < s->strstart, "no future"); + match = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ + + if (_win[match + best_len] !== scan_end || + _win[match + best_len - 1] !== scan_end1 || + _win[match] !== _win[scan] || + _win[++match] !== _win[scan + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2; + match++; + // Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + /*jshint noempty:false*/ + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + scan < strend); + + // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; +} + + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + + //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = s.window_size - s.lookahead - s.strstart; + + // JS ints have 32 bit, block below not needed + /* Deal with !@#$% 64K limit: */ + //if (sizeof(int) <= 2) { + // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + // more = wsize; + // + // } else if (more == (unsigned)(-1)) { + // /* Very unlikely, but possible on 16 bit machine if + // * strstart == 0 && lookahead == 1 (input done a byte at time) + // */ + // more--; + // } + //} + + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + /* we now have strstart >= MAX_DIST */ + s.block_start -= _w_size; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = (m >= _w_size ? m - _w_size : 0); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); + + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + //Assert(more >= 2, "more < 2"); + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + + /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; +//#if MIN_MATCH != 3 +// Call update_hash() MIN_MATCH-3 more times +//#endif + while (s.insert) { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ +// if (s.high_water < s.window_size) { +// var curr = s.strstart + s.lookahead; +// var init = 0; +// +// if (s.high_water < curr) { +// /* Previous high water mark below current data -- zero WIN_INIT +// * bytes or up to end of window, whichever is less. +// */ +// init = s.window_size - curr; +// if (init > WIN_INIT) +// init = WIN_INIT; +// zmemzero(s->window + curr, (unsigned)init); +// s->high_water = curr + init; +// } +// else if (s->high_water < (ulg)curr + WIN_INIT) { +// /* High water mark at or above current data, but below current data +// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up +// * to end of window, whichever is less. +// */ +// init = (ulg)curr + WIN_INIT - s->high_water; +// if (init > s->window_size - s->high_water) +// init = s->window_size - s->high_water; +// zmemzero(s->window + s->high_water, (unsigned)init); +// s->high_water += init; +// } +// } +// +// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +// "not enough room for search"); +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +function deflate_stored(s, flush) { + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s.lookahead <= 1) { + + //Assert(s->strstart < s->w_size+MAX_DIST(s) || + // s->block_start >= (long)s->w_size, "slide too late"); +// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || +// s.block_start >= s.w_size)) { +// throw new Error("slide too late"); +// } + + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + } + //Assert(s->block_start >= 0L, "block gone"); +// if (s.block_start < 0) throw new Error("block gone"); + + s.strstart += s.lookahead; + s.lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + var max_start = s.block_start + max_block_size; + + if (s.strstart === 0 || s.strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_NEED_MORE; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +function deflate_fast(s, flush) { + var hash_head; /* head of the hash chain */ + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; /* flush the current block */ + } + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + } + if (s.match_length >= MIN_MATCH) { + // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only + + /*** _tr_tally_dist(s, s.strstart - s.match_start, + s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { + s.match_length--; /* string at strstart already in table */ + do { + s.strstart++; + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s.match_length !== 0); + s.strstart++; + } else + { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; + +//#if MIN_MATCH != 3 +// Call UPDATE_HASH() MIN_MATCH-3 more times +//#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s.window[s.strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +function deflate_slow(s, flush) { + var hash_head; /* head of hash chain */ + var bflush; /* set if current block must be flushed */ + + var max_insert; + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + */ + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && + s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + + if (s.match_length <= 5 && + (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s.match_length = MIN_MATCH - 1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + //check_match(s, s.strstart-1, s.prev_match, s.prev_length); + + /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, + s.prev_length - MIN_MATCH, bflush);***/ + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + } else if (s.match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + if (bflush) { + /*** FLUSH_BLOCK_ONLY(s, 0) ***/ + flush_block_only(s, false); + /***/ + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + //Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s.match_available) { + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_BLOCK_DONE; +} + + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +function deflate_rle(s, flush) { + var bflush; /* set if current block must be flushed */ + var prev; /* byte at distance one to match */ + var scan, strend; /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +function deflate_huff(s, flush) { + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s.match_length = 0; + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; + +configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), /* 3 */ + + new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ +]; + + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +function lm_init(s) { + s.window_size = 2 * s.w_size; + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + + +function DeflateState() { + this.strm = null; /* pointer back to this zlib stream */ + this.status = 0; /* as the name implies */ + this.pending_buf = null; /* output still pending */ + this.pending_buf_size = 0; /* size of pending_buf */ + this.pending_out = 0; /* next pending byte to output to the stream */ + this.pending = 0; /* nb of bytes in the pending buffer */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.gzhead = null; /* gzip header information to write */ + this.gzindex = 0; /* where in extra, name, or comment */ + this.method = Z_DEFLATED; /* can only be DEFLATED */ + this.last_flush = -1; /* value of flush param for previous deflate call */ + + this.w_size = 0; /* LZ77 window size (32K by default) */ + this.w_bits = 0; /* log2(w_size) (8..16) */ + this.w_mask = 0; /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; /* hash index of string to be inserted */ + this.hash_size = 0; /* number of elements in hash table */ + this.hash_bits = 0; /* log2(hash_size) */ + this.hash_mask = 0; /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; /* length of best match */ + this.prev_match = 0; /* previous match */ + this.match_available = 0; /* set if previous match exists */ + this.strstart = 0; /* start of string to insert */ + this.match_start = 0; /* start of matching string */ + this.lookahead = 0; /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; /* compression level (1..9) */ + this.strategy = 0; /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + + this.l_desc = null; /* desc. for literal tree */ + this.d_desc = null; /* desc. for distance tree */ + this.bl_desc = null; /* desc. for bit length tree */ + + //ush bl_count[MAX_BITS+1]; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ + zero(this.heap); + + this.heap_len = 0; /* number of elements in the heap */ + this.heap_max = 0; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; /* bit length of current block with optimal trees */ + this.static_len = 0; /* bit length of current block with static trees */ + this.matches = 0; /* number of string matches in current block */ + this.insert = 0; /* bytes at end of window left to insert */ + + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + s.status = (s.wrap ? INIT_STATE : BUSY_STATE); + strm.adler = (s.wrap === 2) ? + 0 // crc32(0, Z_NULL, 0) + : + 1; // adler32(0, Z_NULL, 0) + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; +} + + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; +} + + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } + strm.state.gzhead = head; + return Z_OK; +} + + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { // === Z_NULL + return Z_STREAM_ERROR; + } + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } + + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } + + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + var s = new DeflateState(); + + strm.state = s; + s.strm = strm; + + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + + // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; + + //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + + // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s.d_buf = 1 * s.lit_bufsize; + + //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + + s.level = level; + s.strategy = strategy; + s.method = method; + + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || + flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || + (!strm.input && strm.avail_in !== 0) || + (s.status === FINISH_STATE && flush !== Z_FINISH)) { + return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; /* just in case */ + old_flush = s.last_flush; + s.last_flush = flush; + + /* Write the header */ + if (s.status === INIT_STATE) { + + if (s.wrap === 2) { // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } + else { + put_byte(s, (s.gzhead.text ? 1 : 0) + + (s.gzhead.hcrc ? 2 : 0) + + (!s.gzhead.extra ? 0 : 4) + + (!s.gzhead.name ? 0 : 8) + + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, (s.gzhead.time >> 8) & 0xff); + put_byte(s, (s.gzhead.time >> 16) & 0xff); + put_byte(s, (s.gzhead.time >> 24) & 0xff); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, s.gzhead.os & 0xff); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } + else // DEFLATE header + { + var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= (level_flags << 6); + if (s.strstart !== 0) { header |= PRESET_DICT; } + header += 31 - (header % 31); + + s.status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } + +//#ifdef GZIP + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } + else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } + else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } + else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + s.status = BUSY_STATE; + } + } + else { + s.status = BUSY_STATE; + } + } +//#endif + + /* Flush as much pending output as possible */ + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && + flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm.avail_in !== 0 || s.lookahead !== 0 || + (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { + var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : + (s.strategy === Z_RLE ? deflate_rle(s, flush) : + configuration_table[s.level].func(s, flush)); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } + else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + //Assert(strm->avail_out > 0, "bug2"); + //if (strm.avail_out <= 0) { throw new Error("bug2");} + + if (flush !== Z_FINISH) { return Z_OK; } + if (s.wrap <= 0) { return Z_STREAM_END; } + + /* Write the trailer */ + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + put_byte(s, (strm.adler >> 16) & 0xff); + put_byte(s, (strm.adler >> 24) & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, (strm.total_in >> 8) & 0xff); + put_byte(s, (strm.total_in >> 16) & 0xff); + put_byte(s, (strm.total_in >> 24) & 0xff); + } + else + { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s.wrap > 0) { s.wrap = -s.wrap; } + /* write the trailer only once! */ + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + if (status !== INIT_STATE && + status !== EXTRA_STATE && + status !== NAME_STATE && + status !== COMMENT_STATE && + status !== HCRC_STATE && + status !== BUSY_STATE && + status !== FINISH_STATE + ) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} + + +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { + return Z_STREAM_ERROR; + } + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s.w_size) { + if (wrap === 0) { /* already empty otherwise */ + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; + +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ + +},{"../utils/common":1,"./adler32":3,"./crc32":4,"./messages":6,"./trees":7}],6:[function(require,module,exports){ +'use strict'; + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; + +},{}],7:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; +var Z_FIXED = 4; +//var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +var Z_BINARY = 0; +var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + +/*============================================================================*/ + + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +// From zutil.h + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ + +// From deflate.h +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ +var extra_lbits = /* extra bits for each length code */ + [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; + +var extra_dbits = /* extra bits for each distance code */ + [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; + +var extra_blbits = /* extra bits for each bit length code */ + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; + +var bl_order = + [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ + +// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1 +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + + this.static_tree = static_tree; /* static tree or NULL */ + this.extra_bits = extra_bits; /* extra bits for each code or NULL */ + this.extra_base = extra_base; /* base index for extra_bits */ + this.elems = elems; /* max number of elements in the tree */ + this.max_length = max_length; /* max bit length for the codes */ + + // show if `static_tree` has data or dummy - needed for monomorphic objects + this.has_stree = static_tree && static_tree.length; +} + + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; /* the dynamic tree */ + this.max_code = 0; /* largest code with non zero frequency */ + this.stat_desc = stat_desc; /* the corresponding static tree */ +} + + + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +function put_short(s, w) { +// put_byte(s, (uch)((w) & 0xff)); +// put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = (w) & 0xff; + s.pending_buf[s.pending++] = (w >>> 8) & 0xff; +} + + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +function send_bits(s, value, length) { + if (s.bi_valid > (Buf_size - length)) { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> (Buf_size - s.bi_valid); + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + s.bi_valid += length; + } +} + + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); +} + + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; +} + + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} + + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +function gen_bitlen(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; /* heap index */ + var n, m; /* iterate over the tree elements */ + var bits; /* bit length */ + var xbits; /* extra bits */ + var f; /* frequency */ + var overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1]/*.Len*/ = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { continue; } /* not a leaf node */ + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]/*.Freq*/; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); + } + } + if (overflow === 0) { return; } + + // Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { bits--; } + s.bl_count[bits]--; /* move one leaf down the tree */ + s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { continue; } + if (tree[m * 2 + 1]/*.Len*/ !== bits) { + // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; + tree[m * 2 + 1]/*.Len*/ = bits; + } + n--; + } + } +} + + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +function gen_codes(tree, max_code, bl_count) +// ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ + var code = 0; /* running code value */ + var bits; /* bit index */ + var n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits - 1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = code; + } + } + //Assert (length == 256, "tr_static_init: length != 256"); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: dist != 256"); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1]/*.Len*/ = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1]/*.Len*/ = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes(static_ltree, L_CODES + 1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1]/*.Len*/ = 5; + static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); + } + + // Now data ready and we can init static trees + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + //static_init_done = true; +} + + +/* =========================================================================== + * Initialize a new block. + */ +function init_block(s) { + var n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } + + s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} + + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +function bi_windup(s) +{ + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +function copy_block(s, buf, len, header) +//DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } +// while (len--) { +// put_byte(s, *buf++); +// } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || + (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); +} + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +function pqdownheap(s, tree, k) +// deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; /* left son of k */ + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && + smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s.heap[j], s.depth)) { break; } + + /* Exchange v with the smallest son */ + s.heap[k] = s.heap[j]; + k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s.heap[k] = v; +} + + +// inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +function compress_block(s, ltree, dtree) +// deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; /* distance of matched string */ + var lc; /* match length or unmatched char (if dist == 0) */ + var lx = 0; /* running index in l_buf */ + var code; /* the code to send */ + var extra; /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + //Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // "pendingBuf overflow"); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} + + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +function build_tree(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; /* iterate over heap elements */ + var max_code = -1; /* largest code with non zero frequency */ + var node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2]/*.Freq*/ !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + + } else { + tree[n * 2 + 1]/*.Len*/ = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); + tree[node * 2]/*.Freq*/ = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1]/*.Len*/; + } + /* node is 0 or 1 so it does not have extra bits */ + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + /*** pqremove ***/ + n = s.heap[1/*SMALLEST*/]; + s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1/*SMALLEST*/); + /***/ + + m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ + s.heap[--s.heap_max] = m; + + /* Create a new node father of n and m */ + tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; + + /* and insert the new node in the heap */ + s.heap[1/*SMALLEST*/] = node++; + pqdownheap(s, tree, 1/*SMALLEST*/); + + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes(tree, max_code, s.bl_count); +} + + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +function scan_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + s.bl_tree[curlen * 2]/*.Freq*/ += count; + + } else if (curlen !== 0) { + + if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } + s.bl_tree[REP_3_6 * 2]/*.Freq*/++; + + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; + + } else { + s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +function send_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); + + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + //Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +function build_bl_tree(s) { + var max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + // s->opt_len, s->static_len)); + + return max_blindex; +} + + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +function send_all_trees(s, lcodes, dcodes, blcodes) +// deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; /* index in bl_order */ + + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // "too many codes"); + //Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); + } + //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ + //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ + //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { + return Z_BINARY; + } + } + + /* Check for textual ("white-listed") bytes. */ + if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || + s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + } + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + + +var static_init_done = false; + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +function _tr_init(s) +{ + + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + + s.bi_buf = 0; + s.bi_valid = 0; + + /* Initialize the first block of the first file: */ + init_block(s); +} + + +/* =========================================================================== + * Send a stored block + */ +function _tr_stored_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ + copy_block(s, buf, stored_len, true); /* with header */ +} + + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} + + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +function _tr_flush_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + var max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s.level > 0) { + + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + + /* Construct the literal and distance trees */ + build_tree(s, s.l_desc); + // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); + // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s.opt_len + 3 + 7) >>> 3; + static_lenb = (s.static_len + 3 + 7) >>> 3; + + // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } + + } else { + // Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + + if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); + } + // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + // s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +function _tr_tally(s, dist, lc) +// deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + + s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + /* lc is the unmatched char */ + s.dyn_ltree[lc * 2]/*.Freq*/++; + } else { + s.matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + //Assert((ush)dist < (ush)MAX_DIST(s) && + // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; + } + +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility + +//#ifdef TRUNCATE_BLOCK +// /* Try to guess if it is profitable to stop the current block here */ +// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { +// /* Compute an upper bound for the compressed length */ +// out_length = s.last_lit*8; +// in_length = s.strstart - s.block_start; +// +// for (dcode = 0; dcode < D_CODES; dcode++) { +// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); +// } +// out_length >>>= 3; +// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", +// // s->last_lit, in_length, out_length, +// // 100L - out_length*100L/in_length)); +// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { +// return true; +// } +// } +//#endif + + return (s.last_lit === s.lit_bufsize - 1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; + +},{"../utils/common":1}],8:[function(require,module,exports){ +'use strict'; + + +function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + this.next_in = 0; + /* number of bytes available at input */ + this.avail_in = 0; + /* total number of input bytes read so far */ + this.total_in = 0; + /* next output byte should be put there */ + this.output = null; // JS specific, because we have no pointers + this.next_out = 0; + /* remaining free space at output */ + this.avail_out = 0; + /* total number of bytes output so far */ + this.total_out = 0; + /* last error message, NULL if no error */ + this.msg = ''/*Z_NULL*/; + /* not visible by applications */ + this.state = null; + /* best guess about the data type: binary or text */ + this.data_type = 2/*Z_UNKNOWN*/; + /* adler32 value of the uncompressed data */ + this.adler = 0; +} + +module.exports = ZStream; + +},{}],"/lib/deflate.js":[function(require,module,exports){ +'use strict'; + + +var zlib_deflate = require('./zlib/deflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); + +var toString = Object.prototype.toString; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + +var Z_NO_FLUSH = 0; +var Z_FINISH = 4; + +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_SYNC_FLUSH = 2; + +var Z_DEFAULT_COMPRESSION = -1; + +var Z_DEFAULT_STRATEGY = 0; + +var Z_DEFLATED = 8; + +/* ===========================================================================*/ + + +/** + * class Deflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[deflate]], + * [[deflateRaw]] and [[gzip]]. + **/ + +/* internal + * Deflate.chunks -> Array + * + * Chunks of output data, if [[Deflate#onData]] not overriden. + **/ + +/** + * Deflate.result -> Uint8Array|Array + * + * Compressed result, generated by default [[Deflate#onData]] + * and [[Deflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Deflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Deflate.err -> Number + * + * Error code after deflate finished. 0 (Z_OK) on success. + * You will not need it in real life, because deflate errors + * are possible only on wrong options or bad `onData` / `onEnd` + * custom handlers. + **/ + +/** + * Deflate.msg -> String + * + * Error message, if [[Deflate.err]] != 0 + **/ + + +/** + * new Deflate(options) + * - options (Object): zlib deflate options. + * + * Creates new deflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `level` + * - `windowBits` + * - `memLevel` + * - `strategy` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw deflate + * - `gzip` (Boolean) - create gzip wrapper + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * - `header` (Object) - custom header for gzip + * - `text` (Boolean) - true if compressed data believed to be text + * - `time` (Number) - modification time, unix timestamp + * - `os` (Number) - operation system code + * - `extra` (Array) - array of bytes with extra data (max 65536) + * - `name` (String) - file name (binary string) + * - `comment` (String) - comment (binary string) + * - `hcrc` (Boolean) - true if header crc should be added + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var deflate = new pako.Deflate({ level: 3}); + * + * deflate.push(chunk1, false); + * deflate.push(chunk2, true); // true -> last chunk + * + * if (deflate.err) { throw new Error(deflate.err); } + * + * console.log(deflate.result); + * ``` + **/ +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + + var opt = this.options; + + if (opt.raw && (opt.windowBits > 0)) { + opt.windowBits = -opt.windowBits; + } + + else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + + if (opt.dictionary) { + var dict; + // Convert data if needed + if (typeof opt.dictionary === 'string') { + // If we need to compress text, change encoding to utf8. + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} + +/** + * Deflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be + * converted to utf8 byte sequence. + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. + * + * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with + * new compressed chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the compression context. + * + * On fail call [[Deflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * array format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + + if (this.ended) { return false; } + + _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // If we need to compress text, change encoding to utf8. + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + + // Finalize on the last chunk. + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Deflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): ouput data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Deflate#onEnd(status) -> Void + * - status (Number): deflate status. 0 (Z_OK) on success, + * other if not. + * + * Called once after you tell deflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * deflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * Compress `data` with deflate algorithm and `options`. + * + * Supported options are: + * + * - level + * - windowBits + * - memLevel + * - strategy + * - dictionary + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); + * + * console.log(pako.deflate(data)); + * ``` + **/ +function deflate(input, options) { + var deflator = new Deflate(options); + + deflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (deflator.err) { throw deflator.msg; } + + return deflator.result; +} + + +/** + * deflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} + + +/** + * gzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but create gzip wrapper instead of + * deflate one. + **/ +function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate(input, options); +} + + +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; + +},{"./utils/common":1,"./utils/strings":2,"./zlib/deflate":5,"./zlib/messages":6,"./zlib/zstream":8}]},{},[])("/lib/deflate.js") +}); \ No newline at end of file diff --git a/node_modules/pako/dist/pako_deflate.min.js b/node_modules/pako/dist/pako_deflate.min.js new file mode 100644 index 0000000..b307f85 --- /dev/null +++ b/node_modules/pako/dist/pako_deflate.min.js @@ -0,0 +1,2 @@ +/* pako 0.2.9 nodeca/pako */ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.pako=t()}}(function(){return function t(e,a,n){function r(s,h){if(!a[s]){if(!e[s]){var l="function"==typeof require&&require;if(!h&&l)return l(s,!0);if(i)return i(s,!0);var o=new Error("Cannot find module '"+s+"'");throw o.code="MODULE_NOT_FOUND",o}var _=a[s]={exports:{}};e[s][0].call(_.exports,function(t){var a=e[s][1][t];return r(a?a:t)},_,_.exports,t,e,a,n)}return a[s].exports}for(var i="function"==typeof require&&require,s=0;s=252?6:l>=248?5:l>=240?4:l>=224?3:l>=192?2:1;h[254]=h[254]=1,a.string2buf=function(t){var e,a,n,i,s,h=t.length,l=0;for(i=0;i>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},a.buf2binstring=function(t){return n(t,t.length)},a.binstring2buf=function(t){for(var e=new r.Buf8(t.length),a=0,n=e.length;a4)o[r++]=65533,a+=s-1;else{for(i&=2===s?31:3===s?15:7;s>1&&a1?o[r++]=65533:i<65536?o[r++]=i:(i-=65536,o[r++]=55296|i>>10&1023,o[r++]=56320|1023&i)}return n(o,r)},a.utf8border=function(t,e){var a;for(e=e||t.length,e>t.length&&(e=t.length),a=e-1;a>=0&&128===(192&t[a]);)a--;return a<0?e:0===a?e:a+h[t[a]]>e?a:e}},{"./common":1}],3:[function(t,e,a){"use strict";function n(t,e,a,n){for(var r=65535&t|0,i=t>>>16&65535|0,s=0;0!==a;){s=a>2e3?2e3:a,a-=s;do r=r+e[n++]|0,i=i+r|0;while(--s);r%=65521,i%=65521}return r|i<<16|0}e.exports=n},{}],4:[function(t,e,a){"use strict";function n(){for(var t,e=[],a=0;a<256;a++){t=a;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}function r(t,e,a,n){var r=i,s=n+a;t^=-1;for(var h=n;h>>8^r[255&(t^e[h])];return t^-1}var i=n();e.exports=r},{}],5:[function(t,e,a){"use strict";function n(t,e){return t.msg=O[e],e}function r(t){return(t<<1)-(t>4?9:0)}function i(t){for(var e=t.length;--e>=0;)t[e]=0}function s(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(j.arraySet(t.output,e.pending_buf,e.pending_out,a,t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))}function h(t,e){U._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,s(t.strm)}function l(t,e){t.pending_buf[t.pending++]=e}function o(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function _(t,e,a,n){var r=t.avail_in;return r>n&&(r=n),0===r?0:(t.avail_in-=r,j.arraySet(e,t.input,t.next_in,r,a),1===t.state.wrap?t.adler=D(t.adler,e,r,a):2===t.state.wrap&&(t.adler=I(t.adler,e,r,a)),t.next_in+=r,t.total_in+=r,r)}function d(t,e){var a,n,r=t.max_chain_length,i=t.strstart,s=t.prev_length,h=t.nice_match,l=t.strstart>t.w_size-dt?t.strstart-(t.w_size-dt):0,o=t.window,_=t.w_mask,d=t.prev,u=t.strstart+_t,f=o[i+s-1],c=o[i+s];t.prev_length>=t.good_match&&(r>>=2),h>t.lookahead&&(h=t.lookahead);do if(a=e,o[a+s]===c&&o[a+s-1]===f&&o[a]===o[i]&&o[++a]===o[i+1]){i+=2,a++;do;while(o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&is){if(t.match_start=e,s=n,n>=h)break;f=o[i+s-1],c=o[i+s]}}while((e=d[e&_])>l&&0!==--r);return s<=t.lookahead?s:t.lookahead}function u(t){var e,a,n,r,i,s=t.w_size;do{if(r=t.window_size-t.lookahead-t.strstart,t.strstart>=s+(s-dt)){j.arraySet(t.window,t.window,s,s,0),t.match_start-=s,t.strstart-=s,t.block_start-=s,a=t.hash_size,e=a;do n=t.head[--e],t.head[e]=n>=s?n-s:0;while(--a);a=s,e=a;do n=t.prev[--e],t.prev[e]=n>=s?n-s:0;while(--a);r+=s}if(0===t.strm.avail_in)break;if(a=_(t.strm,t.window,t.strstart+t.lookahead,r),t.lookahead+=a,t.lookahead+t.insert>=ot)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=(t.ins_h<t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(u(t),0===t.lookahead&&e===q)return vt;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+a;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,h(t,!1),0===t.strm.avail_out))return vt;if(t.strstart-t.block_start>=t.w_size-dt&&(h(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===N?(h(t,!0),0===t.strm.avail_out?kt:zt):t.strstart>t.block_start&&(h(t,!1),0===t.strm.avail_out)?vt:vt}function c(t,e){for(var a,n;;){if(t.lookahead=ot&&(t.ins_h=(t.ins_h<=ot)if(n=U._tr_tally(t,t.strstart-t.match_start,t.match_length-ot),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=ot){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<=ot&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=ot-1)),t.prev_length>=ot&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-ot,n=U._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-ot),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=r&&(t.ins_h=(t.ins_h<=ot&&t.strstart>0&&(r=t.strstart-1,n=s[r],n===s[++r]&&n===s[++r]&&n===s[++r])){i=t.strstart+_t;do;while(n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&rt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=ot?(a=U._tr_tally(t,1,t.match_length-ot),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=U._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(h(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===N?(h(t,!0),0===t.strm.avail_out?kt:zt):t.last_lit&&(h(t,!1),0===t.strm.avail_out)?vt:yt}function m(t,e){for(var a;;){if(0===t.lookahead&&(u(t),0===t.lookahead)){if(e===q)return vt;break}if(t.match_length=0,a=U._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(h(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===N?(h(t,!0),0===t.strm.avail_out?kt:zt):t.last_lit&&(h(t,!1),0===t.strm.avail_out)?vt:yt}function b(t,e,a,n,r){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=n,this.func=r}function w(t){t.window_size=2*t.w_size,i(t.head),t.max_lazy_match=E[t.level].max_lazy,t.good_match=E[t.level].good_length,t.nice_match=E[t.level].nice_length,t.max_chain_length=E[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=ot-1,t.match_available=0,t.ins_h=0}function v(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Z,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new j.Buf16(2*ht),this.dyn_dtree=new j.Buf16(2*(2*it+1)),this.bl_tree=new j.Buf16(2*(2*st+1)),i(this.dyn_ltree),i(this.dyn_dtree),i(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new j.Buf16(lt+1),this.heap=new j.Buf16(2*rt+1),i(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new j.Buf16(2*rt+1),i(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function y(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=Y,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?ft:bt,t.adler=2===e.wrap?0:1,e.last_flush=q,U._tr_init(e),H):n(t,K)}function k(t){var e=y(t);return e===H&&w(t.state),e}function z(t,e){return t&&t.state?2!==t.state.wrap?K:(t.state.gzhead=e,H):K}function x(t,e,a,r,i,s){if(!t)return K;var h=1;if(e===G&&(e=6),r<0?(h=0,r=-r):r>15&&(h=2,r-=16),i<1||i>$||a!==Z||r<8||r>15||e<0||e>9||s<0||s>W)return n(t,K);8===r&&(r=9);var l=new v;return t.state=l,l.strm=t,l.wrap=h,l.gzhead=null,l.w_bits=r,l.w_size=1<R||e<0)return t?n(t,K):K;if(h=t.state,!t.output||!t.input&&0!==t.avail_in||h.status===wt&&e!==N)return n(t,0===t.avail_out?P:K);if(h.strm=t,a=h.last_flush,h.last_flush=e,h.status===ft)if(2===h.wrap)t.adler=0,l(h,31),l(h,139),l(h,8),h.gzhead?(l(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),l(h,255&h.gzhead.time),l(h,h.gzhead.time>>8&255),l(h,h.gzhead.time>>16&255),l(h,h.gzhead.time>>24&255),l(h,9===h.level?2:h.strategy>=Q||h.level<2?4:0),l(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(l(h,255&h.gzhead.extra.length),l(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(t.adler=I(t.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=ct):(l(h,0),l(h,0),l(h,0),l(h,0),l(h,0),l(h,9===h.level?2:h.strategy>=Q||h.level<2?4:0),l(h,xt),h.status=bt);else{var u=Z+(h.w_bits-8<<4)<<8,f=-1;f=h.strategy>=Q||h.level<2?0:h.level<6?1:6===h.level?2:3,u|=f<<6,0!==h.strstart&&(u|=ut),u+=31-u%31,h.status=bt,o(h,u),0!==h.strstart&&(o(h,t.adler>>>16),o(h,65535&t.adler)),t.adler=1}if(h.status===ct)if(h.gzhead.extra){for(_=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),s(t),_=h.pending,h.pending!==h.pending_buf_size));)l(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pt)}else h.status=pt;if(h.status===pt)if(h.gzhead.name){_=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),s(t),_=h.pending,h.pending===h.pending_buf_size)){d=1;break}d=h.gzindex_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),0===d&&(h.gzindex=0,h.status=gt)}else h.status=gt;if(h.status===gt)if(h.gzhead.comment){_=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),s(t),_=h.pending,h.pending===h.pending_buf_size)){d=1;break}d=h.gzindex_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),0===d&&(h.status=mt)}else h.status=mt;if(h.status===mt&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&s(t),h.pending+2<=h.pending_buf_size&&(l(h,255&t.adler),l(h,t.adler>>8&255),t.adler=0,h.status=bt)):h.status=bt),0!==h.pending){if(s(t),0===t.avail_out)return h.last_flush=-1,H}else if(0===t.avail_in&&r(e)<=r(a)&&e!==N)return n(t,P);if(h.status===wt&&0!==t.avail_in)return n(t,P);if(0!==t.avail_in||0!==h.lookahead||e!==q&&h.status!==wt){var c=h.strategy===Q?m(h,e):h.strategy===V?g(h,e):E[h.level].func(h,e);if(c!==kt&&c!==zt||(h.status=wt),c===vt||c===kt)return 0===t.avail_out&&(h.last_flush=-1),H;if(c===yt&&(e===T?U._tr_align(h):e!==R&&(U._tr_stored_block(h,0,0,!1),e===L&&(i(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),s(t),0===t.avail_out))return h.last_flush=-1,H}return e!==N?H:h.wrap<=0?F:(2===h.wrap?(l(h,255&t.adler),l(h,t.adler>>8&255),l(h,t.adler>>16&255),l(h,t.adler>>24&255),l(h,255&t.total_in),l(h,t.total_in>>8&255),l(h,t.total_in>>16&255),l(h,t.total_in>>24&255)):(o(h,t.adler>>>16),o(h,65535&t.adler)),s(t),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?H:F)}function C(t){var e;return t&&t.state?(e=t.state.status,e!==ft&&e!==ct&&e!==pt&&e!==gt&&e!==mt&&e!==bt&&e!==wt?n(t,K):(t.state=null,e===bt?n(t,M):H)):K}function S(t,e){var a,n,r,s,h,l,o,_,d=e.length;if(!t||!t.state)return K;if(a=t.state,s=a.wrap,2===s||1===s&&a.status!==ft||a.lookahead)return K;for(1===s&&(t.adler=D(t.adler,e,d,0)),a.wrap=0,d>=a.w_size&&(0===s&&(i(a.head),a.strstart=0,a.block_start=0,a.insert=0),_=new j.Buf8(a.w_size),j.arraySet(_,e,d-a.w_size,a.w_size,0),e=_,d=a.w_size),h=t.avail_in,l=t.next_in,o=t.input,t.avail_in=d,t.next_in=0,t.input=e,u(a);a.lookahead>=ot;){n=a.strstart,r=a.lookahead-(ot-1);do a.ins_h=(a.ins_h<=0;)t[e]=0}function r(t,e,a,n,r){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=n,this.max_length=r,this.has_stree=t&&t.length}function i(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function s(t){return t<256?lt[t]:lt[256+(t>>>7)]}function h(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function l(t,e,a){t.bi_valid>W-a?(t.bi_buf|=e<>W-t.bi_valid,t.bi_valid+=a-W):(t.bi_buf|=e<>>=1,a<<=1;while(--e>0);return a>>>1}function d(t){16===t.bi_valid?(h(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function u(t,e){var a,n,r,i,s,h,l=e.dyn_tree,o=e.max_code,_=e.stat_desc.static_tree,d=e.stat_desc.has_stree,u=e.stat_desc.extra_bits,f=e.stat_desc.extra_base,c=e.stat_desc.max_length,p=0;for(i=0;i<=V;i++)t.bl_count[i]=0;for(l[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;ac&&(i=c,p++),l[2*n+1]=i,n>o||(t.bl_count[i]++,s=0,n>=f&&(s=u[n-f]),h=l[2*n],t.opt_len+=h*(i+s),d&&(t.static_len+=h*(_[2*n+1]+s)));if(0!==p){do{for(i=c-1;0===t.bl_count[i];)i--;t.bl_count[i]--,t.bl_count[i+1]+=2,t.bl_count[c]--,p-=2}while(p>0);for(i=c;0!==i;i--)for(n=t.bl_count[i];0!==n;)r=t.heap[--a],r>o||(l[2*r+1]!==i&&(t.opt_len+=(i-l[2*r+1])*l[2*r],l[2*r+1]=i),n--)}}function f(t,e,a){var n,r,i=new Array(V+1),s=0;for(n=1;n<=V;n++)i[n]=s=s+a[n-1]<<1;for(r=0;r<=e;r++){var h=t[2*r+1];0!==h&&(t[2*r]=_(i[h]++,h))}}function c(){var t,e,a,n,i,s=new Array(V+1);for(a=0,n=0;n>=7;n8?h(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function m(t,e,a,n){g(t),n&&(h(t,a),h(t,~a)),D.arraySet(t.pending_buf,t.window,e,a,t.pending),t.pending+=a}function b(t,e,a,n){var r=2*e,i=2*a;return t[r]>1;a>=1;a--)w(t,i,a);r=l;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],w(t,i,1),n=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=n,i[2*r]=i[2*a]+i[2*n],t.depth[r]=(t.depth[a]>=t.depth[n]?t.depth[a]:t.depth[n])+1,i[2*a+1]=i[2*n+1]=r,t.heap[1]=r++,w(t,i,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],u(t,e),f(i,o,t.bl_count)}function k(t,e,a){var n,r,i=-1,s=e[1],h=0,l=7,o=4;for(0===s&&(l=138,o=3),e[2*(a+1)+1]=65535,n=0;n<=a;n++)r=s,s=e[2*(n+1)+1],++h=3&&0===t.bl_tree[2*rt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function B(t,e,a,n){var r;for(l(t,e-257,5),l(t,a-1,5),l(t,n-4,4),r=0;r>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return O;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return q;for(e=32;e0?(t.strm.data_type===T&&(t.strm.data_type=A(t)),y(t,t.l_desc),y(t,t.d_desc),s=x(t),r=t.opt_len+3+7>>>3,i=t.static_len+3+7>>>3,i<=r&&(r=i)):r=i=a+5,a+4<=r&&e!==-1?S(t,e,a,n):t.strategy===I||i===r?(l(t,(N<<1)+(n?1:0),3),v(t,st,ht)):(l(t,(R<<1)+(n?1:0),3),B(t,t.l_desc.max_code+1,t.d_desc.max_code+1,s+1),v(t,t.dyn_ltree,t.dyn_dtree)),p(t),n&&g(t)}function U(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(ot[a]+M+1)]++,t.dyn_dtree[2*s(e)]++),t.last_lit===t.lit_bufsize-1}var D=t("../utils/common"),I=4,O=0,q=1,T=2,L=0,N=1,R=2,H=3,F=258,K=29,M=256,P=M+1+K,G=30,J=19,Q=2*P+1,V=15,W=16,X=7,Y=256,Z=16,$=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],at=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],nt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],rt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],it=512,st=new Array(2*(P+2));n(st);var ht=new Array(2*G);n(ht);var lt=new Array(it);n(lt);var ot=new Array(F-H+1);n(ot);var _t=new Array(K);n(_t);var dt=new Array(G);n(dt);var ut,ft,ct,pt=!1;a._tr_init=C,a._tr_stored_block=S,a._tr_flush_block=j,a._tr_tally=U,a._tr_align=E},{"../utils/common":1}],8:[function(t,e,a){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}e.exports=n},{}],"/lib/deflate.js":[function(t,e,a){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.options=l.assign({level:b,method:v,chunkSize:16384,windowBits:15,memLevel:8,strategy:w,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new d,this.strm.avail_out=0;var a=h.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==p)throw new Error(_[a]);if(e.header&&h.deflateSetHeader(this.strm,e.header),e.dictionary){var r;if(r="string"==typeof e.dictionary?o.string2buf(e.dictionary):"[object ArrayBuffer]"===u.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=h.deflateSetDictionary(this.strm,r),a!==p)throw new Error(_[a]);this._dict_set=!0}}function r(t,e){var a=new n(e);if(a.push(t,!0),a.err)throw a.msg;return a.result}function i(t,e){return e=e||{},e.raw=!0,r(t,e)}function s(t,e){return e=e||{},e.gzip=!0,r(t,e)}var h=t("./zlib/deflate"),l=t("./utils/common"),o=t("./utils/strings"),_=t("./zlib/messages"),d=t("./zlib/zstream"),u=Object.prototype.toString,f=0,c=4,p=0,g=1,m=2,b=-1,w=0,v=8;n.prototype.push=function(t,e){var a,n,r=this.strm,i=this.options.chunkSize;if(this.ended)return!1;n=e===~~e?e:e===!0?c:f,"string"==typeof t?r.input=o.string2buf(t):"[object ArrayBuffer]"===u.call(t)?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;do{if(0===r.avail_out&&(r.output=new l.Buf8(i),r.next_out=0,r.avail_out=i),a=h.deflate(r,n),a!==g&&a!==p)return this.onEnd(a),this.ended=!0,!1;0!==r.avail_out&&(0!==r.avail_in||n!==c&&n!==m)||("string"===this.options.to?this.onData(o.buf2binstring(l.shrinkBuf(r.output,r.next_out))):this.onData(l.shrinkBuf(r.output,r.next_out)))}while((r.avail_in>0||0===r.avail_out)&&a!==g);return n===c?(a=h.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===p):n!==m||(this.onEnd(p),r.avail_out=0,!0)},n.prototype.onData=function(t){this.chunks.push(t)},n.prototype.onEnd=function(t){t===p&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Deflate=n,a.deflate=r,a.deflateRaw=i,a.gzip=s},{"./utils/common":1,"./utils/strings":2,"./zlib/deflate":5,"./zlib/messages":6,"./zlib/zstream":8}]},{},[])("/lib/deflate.js")}); diff --git a/node_modules/pako/dist/pako_inflate.js b/node_modules/pako/dist/pako_inflate.js new file mode 100644 index 0000000..c3e2e0e --- /dev/null +++ b/node_modules/pako/dist/pako_inflate.js @@ -0,0 +1,3127 @@ +/* pako 0.2.9 nodeca/pako */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start + + +// convert string to array (typed, when possible) +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + buf = new utils.Buf8(buf_len); + + // convert + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Helper (used in 2 places) +function buf2binstring(buf, len) { + // use fallback for big arrays to avoid stack overflow + if (len < 65537) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} + + +// Convert byte array to binary string +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; + + +// Convert binary string (typed, when possible) +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; + + +// convert array to string +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len * 2); + + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + // quick process ascii + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + // skip 5 & 6 byte codes + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; + + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +},{"./common":1}],3:[function(require,module,exports){ +'use strict'; + +// Note: adler32 takes 12% for level 0 and 2% for level 6. +// It doesn't worth to make additional optimizationa as in original. +// Small size is preferable. + +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + + while (len !== 0) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} + + +module.exports = adler32; + +},{}],4:[function(require,module,exports){ +'use strict'; + + +module.exports = { + + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + + + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type +}; + +},{}],5:[function(require,module,exports){ +'use strict'; + +// Note: we can't get significant speed boost here. +// So write code to minimize size - no pregenerated tables +// and array tools dependencies. + + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; + +},{}],6:[function(require,module,exports){ +'use strict'; + + +function GZheader() { + /* true if compressed data believed to be text */ + this.text = 0; + /* modification time */ + this.time = 0; + /* extra flags (not used when writing a gzip file) */ + this.xflags = 0; + /* operating system */ + this.os = 0; + /* pointer to extra field or Z_NULL if none */ + this.extra = null; + /* extra field length (valid if extra != Z_NULL) */ + this.extra_len = 0; // Actually, we don't need it in JS, + // but leave for few code modifications + + // + // Setup limits is not necessary because in js we should not preallocate memory + // for inflate use constant limit in 65536 bytes + // + + /* space at extra (only when reading header) */ + // this.extra_max = 0; + /* pointer to zero-terminated file name or Z_NULL */ + this.name = ''; + /* space at name (only when reading header) */ + // this.name_max = 0; + /* pointer to zero-terminated comment or Z_NULL */ + this.comment = ''; + /* space at comment (only when reading header) */ + // this.comm_max = 0; + /* true if there was or will be a header crc */ + this.hcrc = 0; + /* true when done reading gzip header (not used when writing a gzip file) */ + this.done = false; +} + +module.exports = GZheader; + +},{}],7:[function(require,module,exports){ +'use strict'; + +// See state defs from inflate.js +var BAD = 30; /* got a data error -- remain here until reset */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state.mode === LEN + strm.avail_in >= 6 + strm.avail_out >= 258 + start >= strm.avail_out + state.bits < 8 + + On return, state.mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm.avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm.avail_out >= 258 for each loop to avoid checking for + output space. + */ +module.exports = function inflate_fast(strm, start) { + var state; + var _in; /* local strm.input */ + var last; /* have enough input while in < last */ + var _out; /* local strm.output */ + var beg; /* inflate()'s initial strm.output */ + var end; /* while out < end, enough space available */ +//#ifdef INFLATE_STRICT + var dmax; /* maximum distance from zlib header */ +//#endif + var wsize; /* window size or zero if not using window */ + var whave; /* valid bytes in the window */ + var wnext; /* window write index */ + // Use `s_window` instead `window`, avoid conflict with instrumentation tools + var s_window; /* allocated sliding window, if wsize != 0 */ + var hold; /* local strm.hold */ + var bits; /* local strm.bits */ + var lcode; /* local strm.lencode */ + var dcode; /* local strm.distcode */ + var lmask; /* mask for first level of length codes */ + var dmask; /* mask for first level of distance codes */ + var here; /* retrieved table entry */ + var op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + var len; /* match length, unused bytes */ + var dist; /* match distance */ + var from; /* where to copy match from */ + var from_source; + + + var input, output; // JS specific, because we have no pointers + + /* copy state to local variables */ + state = strm.state; + //here = state.here; + _in = strm.next_in; + input = strm.input; + last = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); +//#ifdef INFLATE_STRICT + dmax = state.dmax; +//#endif + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + top: + do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + + here = lcode[hold & lmask]; + + dolen: + for (;;) { // Goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + if (op === 0) { /* literal */ + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + output[_out++] = here & 0xffff/*here.val*/; + } + else if (op & 16) { /* length base */ + len = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & ((1 << op) - 1); + hold >>>= op; + bits -= op; + } + //Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + + dodist: + for (;;) { // goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + + if (op & 16) { /* distance base */ + dist = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & ((1 << op) - 1); +//#ifdef INFLATE_STRICT + if (dist > dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } +//#endif + hold >>>= op; + bits -= op; + //Tracevv((stderr, "inflate: distance %u\n", dist)); + op = _out - beg; /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } + +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// if (len <= op - whave) { +// do { +// output[_out++] = 0; +// } while (--len); +// continue top; +// } +// len -= op - whave; +// do { +// output[_out++] = 0; +// } while (--op > whave); +// if (op === 0) { +// from = _out - dist; +// do { +// output[_out++] = output[from++]; +// } while (--len); +// continue top; +// } +//#endif + } + from = 0; // window index + from_source = s_window; + if (wnext === 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } + else { + from = _out - dist; /* copy direct from output */ + do { /* minimum length is three */ + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } + else if ((op & 64) === 0) { /* 2nd level distance code */ + here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dodist; + } + else { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } + else if ((op & 64) === 0) { /* 2nd level length code */ + here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dolen; + } + else if (op & 32) { /* end-of-block */ + //Tracevv((stderr, "inflate: end of block\n")); + state.mode = TYPE; + break top; + } + else { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } while (_in < last && _out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + + /* update state and return */ + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); + strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); + state.hold = hold; + state.bits = bits; + return; +}; + +},{}],8:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var inflate_fast = require('./inffast'); +var inflate_table = require('./inftrees'); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +//var Z_NO_FLUSH = 0; +//var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +//var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + +/* The deflate compression method */ +var Z_DEFLATED = 8; + + +/* STATES ====================================================================*/ +/* ===========================================================================*/ + + +var HEAD = 1; /* i: waiting for magic header */ +var FLAGS = 2; /* i: waiting for method and flags (gzip) */ +var TIME = 3; /* i: waiting for modification time (gzip) */ +var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ +var EXLEN = 5; /* i: waiting for extra length (gzip) */ +var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ +var NAME = 7; /* i: waiting for end of file name (gzip) */ +var COMMENT = 8; /* i: waiting for end of comment (gzip) */ +var HCRC = 9; /* i: waiting for header crc (gzip) */ +var DICTID = 10; /* i: waiting for dictionary check value */ +var DICT = 11; /* waiting for inflateSetDictionary() call */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ +var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ +var STORED = 14; /* i: waiting for stored size (length and complement) */ +var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ +var COPY = 16; /* i/o: waiting for input or output to copy stored block */ +var TABLE = 17; /* i: waiting for dynamic block table lengths */ +var LENLENS = 18; /* i: waiting for code length code lengths */ +var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ +var LEN_ = 20; /* i: same as LEN below, but only first time in */ +var LEN = 21; /* i: waiting for length/lit/eob code */ +var LENEXT = 22; /* i: waiting for length extra bits */ +var DIST = 23; /* i: waiting for distance code */ +var DISTEXT = 24; /* i: waiting for distance extra bits */ +var MATCH = 25; /* o: waiting for output space to copy string */ +var LIT = 26; /* o: waiting for output space to write literal */ +var CHECK = 27; /* i: waiting for 32-bit check value */ +var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ +var DONE = 29; /* finished check, done -- remain here until reset */ +var BAD = 30; /* got a data error -- remain here until reset */ +var MEM = 31; /* got an inflate() memory error -- remain here until reset */ +var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ + +/* ===========================================================================*/ + + + +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_WBITS = MAX_WBITS; + + +function zswap32(q) { + return (((q >>> 24) & 0xff) + + ((q >>> 8) & 0xff00) + + ((q & 0xff00) << 8) + + ((q & 0xff) << 24)); +} + + +function InflateState() { + this.mode = 0; /* current inflate mode */ + this.last = false; /* true if processing last block */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.havedict = false; /* true if dictionary provided */ + this.flags = 0; /* gzip header method and flags (0 if zlib) */ + this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ + this.check = 0; /* protected copy of check value */ + this.total = 0; /* protected copy of output count */ + // TODO: may be {} + this.head = null; /* where to save gzip header information */ + + /* sliding window */ + this.wbits = 0; /* log base 2 of requested window size */ + this.wsize = 0; /* window size or zero if not using window */ + this.whave = 0; /* valid bytes in the window */ + this.wnext = 0; /* window write index */ + this.window = null; /* allocated sliding window, if needed */ + + /* bit accumulator */ + this.hold = 0; /* input bit accumulator */ + this.bits = 0; /* number of bits in "in" */ + + /* for string and stored block copying */ + this.length = 0; /* literal or length of data to copy */ + this.offset = 0; /* distance back to copy string from */ + + /* for table and code decoding */ + this.extra = 0; /* extra bits needed */ + + /* fixed and dynamic code tables */ + this.lencode = null; /* starting table for length/literal codes */ + this.distcode = null; /* starting table for distance codes */ + this.lenbits = 0; /* index bits for lencode */ + this.distbits = 0; /* index bits for distcode */ + + /* dynamic table building */ + this.ncode = 0; /* number of code length code lengths */ + this.nlen = 0; /* number of length code lengths */ + this.ndist = 0; /* number of distance code lengths */ + this.have = 0; /* number of code lengths in lens[] */ + this.next = null; /* next available space in codes[] */ + + this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ + this.work = new utils.Buf16(288); /* work area for code table building */ + + /* + because we don't have pointers in js, we use lencode and distcode directly + as buffers so we don't need codes + */ + //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ + this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ + this.distdyn = null; /* dynamic table for distance codes (JS specific) */ + this.sane = 0; /* if false, allow invalid distance too far */ + this.back = 0; /* bits back of last unprocessed length/lit */ + this.was = 0; /* initial length of match */ +} + +function inflateResetKeep(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ''; /*Z_NULL*/ + if (state.wrap) { /* to support ill-conceived Java test suite */ + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null/*Z_NULL*/; + state.hold = 0; + state.bits = 0; + //state.lencode = state.distcode = state.next = state.codes; + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + + state.sane = 1; + state.back = -1; + //Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +function inflateReset(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + +} + +function inflateReset2(strm, windowBits) { + var wrap; + var state; + + /* get the state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + + /* update state and reset the rest of it */ + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); +} + +function inflateInit2(strm, windowBits) { + var ret; + var state; + + if (!strm) { return Z_STREAM_ERROR; } + //strm.msg = Z_NULL; /* in case we return an error */ + + state = new InflateState(); + + //if (state === Z_NULL) return Z_MEM_ERROR; + //Tracev((stderr, "inflate: allocated\n")); + strm.state = state; + state.window = null/*Z_NULL*/; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null/*Z_NULL*/; + } + return ret; +} + +function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); +} + + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +var virgin = true; + +var lenfix, distfix; // We have no pointers in JS, so keep tables separate + +function fixedtables(state) { + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + var sym; + + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + + /* literal/length table */ + sym = 0; + while (sym < 144) { state.lens[sym++] = 8; } + while (sym < 256) { state.lens[sym++] = 9; } + while (sym < 280) { state.lens[sym++] = 7; } + while (sym < 288) { state.lens[sym++] = 8; } + + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); + + /* distance table */ + sym = 0; + while (sym < 32) { state.lens[sym++] = 5; } + + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); + + /* do this just once */ + virgin = false; + } + + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; +} + + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + + /* if it hasn't been done already, allocate space for the window */ + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + + state.window = new utils.Buf8(state.wsize); + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } + else { + dist = state.wsize - state.wnext; + if (dist > copy) { + dist = copy; + } + //zmemcpy(state->window + state->wnext, end - copy, dist); + utils.arraySet(state.window, src, end - copy, dist, state.wnext); + copy -= dist; + if (copy) { + //zmemcpy(state->window, end - copy, copy); + utils.arraySet(state.window, src, end - copy, copy, 0); + state.wnext = copy; + state.whave = state.wsize; + } + else { + state.wnext += dist; + if (state.wnext === state.wsize) { state.wnext = 0; } + if (state.whave < state.wsize) { state.whave += dist; } + } + } + return 0; +} + +function inflate(strm, flush) { + var state; + var input, output; // input/output buffers + var next; /* next input INDEX */ + var put; /* next output INDEX */ + var have, left; /* available input and output */ + var hold; /* bit buffer */ + var bits; /* bits in bit buffer */ + var _in, _out; /* save starting available input and output */ + var copy; /* number of stored or match bytes to copy */ + var from; /* where to copy match bytes from */ + var from_source; + var here = 0; /* current decoding table entry */ + var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) + //var last; /* parent table entry */ + var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) + var len; /* length to copy for repeats, bits to drop */ + var ret; /* return code */ + var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ + var opts; + + var n; // temporary var for NEED_BITS + + var order = /* permutation of code lengths */ + [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; + + + if (!strm || !strm.state || !strm.output || + (!strm.input && strm.avail_in !== 0)) { + return Z_STREAM_ERROR; + } + + state = strm.state; + if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ + + + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + _in = have; + _out = left; + ret = Z_OK; + + inf_leave: // goto emulation + for (;;) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + //=== NEEDBITS(16); + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ + state.check = 0/*crc32(0L, Z_NULL, 0)*/; + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = FLAGS; + break; + } + state.flags = 0; /* expect zlib header */ + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || /* check if zlib header allowed */ + (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { + strm.msg = 'incorrect header check'; + state.mode = BAD; + break; + } + if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// + len = (hold & 0x0f)/*BITS(4)*/ + 8; + if (state.wbits === 0) { + state.wbits = len; + } + else if (len > state.wbits) { + strm.msg = 'invalid window size'; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + //Tracev((stderr, "inflate: zlib header ok\n")); + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = hold & 0x200 ? DICTID : TYPE; + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + break; + case FLAGS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.flags = hold; + if ((state.flags & 0xff) !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + if (state.flags & 0xe000) { + strm.msg = 'unknown header flags set'; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = ((hold >> 8) & 1); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = TIME; + /* falls through */ + case TIME: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.time = hold; + } + if (state.flags & 0x0200) { + //=== CRC4(state.check, hold) + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + hbuf[2] = (hold >>> 16) & 0xff; + hbuf[3] = (hold >>> 24) & 0xff; + state.check = crc32(state.check, hbuf, 4, 0); + //=== + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = OS; + /* falls through */ + case OS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.xflags = (hold & 0xff); + state.head.os = (hold >> 8); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = EXLEN; + /* falls through */ + case EXLEN: + if (state.flags & 0x0400) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + else if (state.head) { + state.head.extra = null/*Z_NULL*/; + } + state.mode = EXTRA; + /* falls through */ + case EXTRA: + if (state.flags & 0x0400) { + copy = state.length; + if (copy > have) { copy = have; } + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + // Use untyped array for more conveniend processing later + state.head.extra = new Array(state.head.extra_len); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + //zmemcpy(state.head.extra + len, next, + // len + copy > state.head.extra_max ? + // state.head.extra_max - len : copy); + } + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + state.length -= copy; + } + if (state.length) { break inf_leave; } + } + state.length = 0; + state.mode = NAME; + /* falls through */ + case NAME: + if (state.flags & 0x0800) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + // TODO: 2 or 1 bytes? + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.name_max*/)) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + /* falls through */ + case COMMENT: + if (state.flags & 0x1000) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.comm_max*/)) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + /* falls through */ + case HCRC: + if (state.flags & 0x0200) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.check & 0xffff)) { + strm.msg = 'header crc mismatch'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + if (state.head) { + state.head.hcrc = ((state.flags >> 9) & 1); + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + strm.adler = state.check = zswap32(hold); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = DICT; + /* falls through */ + case DICT: + if (state.havedict === 0) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + return Z_NEED_DICT; + } + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = TYPE; + /* falls through */ + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } + /* falls through */ + case TYPEDO: + if (state.last) { + //--- BYTEBITS() ---// + hold >>>= bits & 7; + bits -= bits & 7; + //---// + state.mode = CHECK; + break; + } + //=== NEEDBITS(3); */ + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.last = (hold & 0x01)/*BITS(1)*/; + //--- DROPBITS(1) ---// + hold >>>= 1; + bits -= 1; + //---// + + switch ((hold & 0x03)/*BITS(2)*/) { + case 0: /* stored block */ + //Tracev((stderr, "inflate: stored block%s\n", + // state.last ? " (last)" : "")); + state.mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + //Tracev((stderr, "inflate: fixed codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = LEN_; /* decode codes */ + if (flush === Z_TREES) { + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break inf_leave; + } + break; + case 2: /* dynamic block */ + //Tracev((stderr, "inflate: dynamic codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = TABLE; + break; + case 3: + strm.msg = 'invalid block type'; + state.mode = BAD; + } + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break; + case STORED: + //--- BYTEBITS() ---// /* go to byte boundary */ + hold >>>= bits & 7; + bits -= bits & 7; + //---// + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { + strm.msg = 'invalid stored block lengths'; + state.mode = BAD; + break; + } + state.length = hold & 0xffff; + //Tracev((stderr, "inflate: stored length %u\n", + // state.length)); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = COPY_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case COPY_: + state.mode = COPY; + /* falls through */ + case COPY: + copy = state.length; + if (copy) { + if (copy > have) { copy = have; } + if (copy > left) { copy = left; } + if (copy === 0) { break inf_leave; } + //--- zmemcpy(put, next, copy); --- + utils.arraySet(output, input, next, copy, put); + //---// + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + //Tracev((stderr, "inflate: stored end\n")); + state.mode = TYPE; + break; + case TABLE: + //=== NEEDBITS(14); */ + while (bits < 14) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// +//#ifndef PKZIP_BUG_WORKAROUND + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = 'too many length or distance symbols'; + state.mode = BAD; + break; + } +//#endif + //Tracev((stderr, "inflate: table sizes ok\n")); + state.have = 0; + state.mode = LENLENS; + /* falls through */ + case LENLENS: + while (state.have < state.ncode) { + //=== NEEDBITS(3); + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + // We have separate tables & no pointers. 2 commented lines below not needed. + //state.next = state.codes; + //state.lencode = state.next; + // Switch to use dynamic table + state.lencode = state.lendyn; + state.lenbits = 7; + + opts = { bits: state.lenbits }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + + if (ret) { + strm.msg = 'invalid code lengths set'; + state.mode = BAD; + break; + } + //Tracev((stderr, "inflate: code lengths ok\n")); + state.have = 0; + state.mode = CODELENS; + /* falls through */ + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_val < 16) { + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.lens[state.have++] = here_val; + } + else { + if (here_val === 16) { + //=== NEEDBITS(here.bits + 2); + n = here_bits + 2; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + if (state.have === 0) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy = 3 + (hold & 0x03);//BITS(2); + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + } + else if (here_val === 17) { + //=== NEEDBITS(here.bits + 3); + n = here_bits + 3; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 3 + (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + else { + //=== NEEDBITS(here.bits + 7); + n = here_bits + 7; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 11 + (hold & 0x7f);//BITS(7); + //--- DROPBITS(7) ---// + hold >>>= 7; + bits -= 7; + //---// + } + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + while (copy--) { + state.lens[state.have++] = len; + } + } + } + + /* handle error breaks in while */ + if (state.mode === BAD) { break; } + + /* check for end-of-block code (better have one) */ + if (state.lens[256] === 0) { + strm.msg = 'invalid code -- missing end-of-block'; + state.mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state.lenbits = 9; + + opts = { bits: state.lenbits }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.lenbits = opts.bits; + // state.lencode = state.next; + + if (ret) { + strm.msg = 'invalid literal/lengths set'; + state.mode = BAD; + break; + } + + state.distbits = 6; + //state.distcode.copy(state.codes); + // Switch to use dynamic table + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.distbits = opts.bits; + // state.distcode = state.next; + + if (ret) { + strm.msg = 'invalid distances set'; + state.mode = BAD; + break; + } + //Tracev((stderr, 'inflate: codes ok\n')); + state.mode = LEN_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case LEN_: + state.mode = LEN; + /* falls through */ + case LEN: + if (have >= 6 && left >= 258) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + inflate_fast(strm, _out); + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_op && (here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.lencode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + state.mode = LIT; + break; + } + if (here_op & 32) { + //Tracevv((stderr, "inflate: end of block\n")); + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + /* falls through */ + case LENEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } + //Tracevv((stderr, "inflate: length %u\n", state.length)); + state.was = state.length; + state.mode = DIST; + /* falls through */ + case DIST: + for (;;) { + here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if ((here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.distcode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + if (here_op & 64) { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = (here_op) & 15; + state.mode = DISTEXT; + /* falls through */ + case DISTEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } +//#ifdef INFLATE_STRICT + if (state.offset > state.dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +//#endif + //Tracevv((stderr, "inflate: distance %u\n", state.offset)); + state.mode = MATCH; + /* falls through */ + case MATCH: + if (left === 0) { break inf_leave; } + copy = _out - left; + if (state.offset > copy) { /* copy from window */ + copy = state.offset - copy; + if (copy > state.whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// Trace((stderr, "inflate.c too far\n")); +// copy -= state.whave; +// if (copy > state.length) { copy = state.length; } +// if (copy > left) { copy = left; } +// left -= copy; +// state.length -= copy; +// do { +// output[put++] = 0; +// } while (--copy); +// if (state.length === 0) { state.mode = LEN; } +// break; +//#endif + } + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } + else { + from = state.wnext - copy; + } + if (copy > state.length) { copy = state.length; } + from_source = state.window; + } + else { /* copy from output */ + from_source = output; + from = put - state.offset; + copy = state.length; + } + if (copy > left) { copy = left; } + left -= copy; + state.length -= copy; + do { + output[put++] = from_source[from++]; + } while (--copy); + if (state.length === 0) { state.mode = LEN; } + break; + case LIT: + if (left === 0) { break inf_leave; } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + // Use '|' insdead of '+' to make sure that result is signed + hold |= input[next++] << bits; + bits += 8; + } + //===// + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = + /*UPDATE(state.check, put - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); + + } + _out = left; + // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = 'incorrect data check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: check matches trailer\n")); + } + state.mode = LENGTH; + /* falls through */ + case LENGTH: + if (state.wrap && state.flags) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.total & 0xffffffff)) { + strm.msg = 'incorrect length check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: length matches trailer\n")); + } + state.mode = DONE; + /* falls through */ + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* falls through */ + default: + return Z_STREAM_ERROR; + } + } + + // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + + if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && + (state.mode < CHECK || flush !== Z_FINISH))) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + + (state.mode === TYPE ? 128 : 0) + + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; +} + +function inflateEnd(strm) { + + if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { + return Z_STREAM_ERROR; + } + + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; +} + +function inflateGetHeader(strm, head) { + var state; + + /* check state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } + + /* save header structure */ + state.head = head; + head.done = false; + return Z_OK; +} + +function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var state; + var dictid; + var ret; + + /* check state */ + if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } + state = strm.state; + + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + + /* check for correct dictionary identifier */ + if (state.mode === DICT) { + dictid = 1; /* adler32(0, null, 0)*/ + /* dictid = adler32(dictid, dictionary, dictLength); */ + dictid = adler32(dictid, dictionary, dictLength, 0); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow(strm, dictionary, dictLength, dictLength); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + // Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +exports.inflateReset = inflateReset; +exports.inflateReset2 = inflateReset2; +exports.inflateResetKeep = inflateResetKeep; +exports.inflateInit = inflateInit; +exports.inflateInit2 = inflateInit2; +exports.inflate = inflate; +exports.inflateEnd = inflateEnd; +exports.inflateGetHeader = inflateGetHeader; +exports.inflateSetDictionary = inflateSetDictionary; +exports.inflateInfo = 'pako inflate (from Nodeca project)'; + +/* Not implemented +exports.inflateCopy = inflateCopy; +exports.inflateGetDictionary = inflateGetDictionary; +exports.inflateMark = inflateMark; +exports.inflatePrime = inflatePrime; +exports.inflateSync = inflateSync; +exports.inflateSyncPoint = inflateSyncPoint; +exports.inflateUndermine = inflateUndermine; +*/ + +},{"../utils/common":1,"./adler32":3,"./crc32":5,"./inffast":7,"./inftrees":9}],9:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); + +var MAXBITS = 15; +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +var lbase = [ /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 +]; + +var lext = [ /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 +]; + +var dbase = [ /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0 +]; + +var dext = [ /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64 +]; + +module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) +{ + var bits = opts.bits; + //here = opts.here; /* table entry for duplication */ + + var len = 0; /* a code's length in bits */ + var sym = 0; /* index of code symbols */ + var min = 0, max = 0; /* minimum and maximum code lengths */ + var root = 0; /* number of index bits for root table */ + var curr = 0; /* number of index bits for current table */ + var drop = 0; /* code bits to drop for sub-table */ + var left = 0; /* number of prefix codes available */ + var used = 0; /* code entries in table used */ + var huff = 0; /* Huffman code */ + var incr; /* for incrementing code, index */ + var fill; /* index for replicating entries */ + var low; /* low bits for current root entry */ + var mask; /* mask for low root bits */ + var next; /* next available space in table */ + var base = null; /* base value table to use */ + var base_index = 0; +// var shoextra; /* extra bits table to use */ + var end; /* use base and extra for symbol > end */ + var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ + var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ + var extra = null; + var extra_index = 0; + + var here_bits, here_op, here_val; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + + /* bound code lengths, force root to be within code lengths */ + root = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { break; } + } + if (root > max) { + root = max; + } + if (max === 0) { /* no symbols to code at all */ + //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ + //table.bits[opts.table_index] = 1; //here.bits = (var char)1; + //table.val[opts.table_index++] = 0; //here.val = (var short)0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + + //table.op[opts.table_index] = 64; + //table.bits[opts.table_index] = 1; + //table.val[opts.table_index++] = 0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + opts.bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { break; } + } + if (root < min) { + root = min; + } + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } /* over-subscribed */ + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; /* incomplete set */ + } + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + // poor man optimization - use if-else instead of switch, + // to avoid deopts in old v8 + if (type === CODES) { + base = extra = work; /* dummy value--not used */ + end = 19; + + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + + } else { /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize opts for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = table_index; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = -1; /* trigger new sub-table when len > root */ + used = 1 << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + var i = 0; + /* process all codes and make table entries */ + for (;;) { + i++; + /* create table entry */ + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } + else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } + else { + here_op = 32 + 64; /* end of block */ + here_val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1 << (len - drop); + fill = 1 << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; + } while (fill !== 0); + + /* backwards increment the len-bit code huff */ + incr = 1 << (len - 1); + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + + /* go to next symbol, update count, len */ + sym++; + if (--count[len] === 0) { + if (len === max) { break; } + len = lens[lens_index + work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) !== low) { + /* if first time, transition to sub-tables */ + if (drop === 0) { + drop = root; + } + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { break; } + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1 << curr; + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + /* point entry in root table to sub-table */ + low = huff & mask; + /*table.op[low] = curr; + table.bits[low] = root; + table.val[low] = next - opts.table_index;*/ + table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff !== 0) { + //table.op[next + huff] = 64; /* invalid code marker */ + //table.bits[next + huff] = len - drop; + //table.val[next + huff] = 0; + table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; + } + + /* set return parameters */ + //opts.table_index += used; + opts.bits = root; + return 0; +}; + +},{"../utils/common":1}],10:[function(require,module,exports){ +'use strict'; + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; + +},{}],11:[function(require,module,exports){ +'use strict'; + + +function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + this.next_in = 0; + /* number of bytes available at input */ + this.avail_in = 0; + /* total number of input bytes read so far */ + this.total_in = 0; + /* next output byte should be put there */ + this.output = null; // JS specific, because we have no pointers + this.next_out = 0; + /* remaining free space at output */ + this.avail_out = 0; + /* total number of bytes output so far */ + this.total_out = 0; + /* last error message, NULL if no error */ + this.msg = ''/*Z_NULL*/; + /* not visible by applications */ + this.state = null; + /* best guess about the data type: binary or text */ + this.data_type = 2/*Z_UNKNOWN*/; + /* adler32 value of the uncompressed data */ + this.adler = 0; +} + +module.exports = ZStream; + +},{}],"/lib/inflate.js":[function(require,module,exports){ +'use strict'; + + +var zlib_inflate = require('./zlib/inflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var c = require('./zlib/constants'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); +var GZheader = require('./zlib/gzheader'); + +var toString = Object.prototype.toString; + +/** + * class Inflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[inflate]] + * and [[inflateRaw]]. + **/ + +/* internal + * inflate.chunks -> Array + * + * Chunks of output data, if [[Inflate#onData]] not overriden. + **/ + +/** + * Inflate.result -> Uint8Array|Array|String + * + * Uncompressed result, generated by default [[Inflate#onData]] + * and [[Inflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Inflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Inflate.err -> Number + * + * Error code after inflate finished. 0 (Z_OK) on success. + * Should be checked if broken data possible. + **/ + +/** + * Inflate.msg -> String + * + * Error message, if [[Inflate.err]] != 0 + **/ + + +/** + * new Inflate(options) + * - options (Object): zlib inflate options. + * + * Creates new inflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `windowBits` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw inflate + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * By default, when no options set, autodetect deflate/gzip data format via + * wrapper header. + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var inflate = new pako.Inflate({ level: 3}); + * + * inflate.push(chunk1, false); + * inflate.push(chunk2, true); // true -> last chunk + * + * if (inflate.err) { throw new Error(inflate.err); } + * + * console.log(inflate.result); + * ``` + **/ +function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: '' + }, options || {}); + + var opt = this.options; + + // Force window size for `raw` data, if not set directly, + // because we have no header for autodetect. + if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { opt.windowBits = -15; } + } + + // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate + if ((opt.windowBits >= 0) && (opt.windowBits < 16) && + !(options && options.windowBits)) { + opt.windowBits += 32; + } + + // Gzip header has no info about windows size, we can do autodetect only + // for deflate. So, if window size not set, force it to max when gzip possible + if ((opt.windowBits > 15) && (opt.windowBits < 48)) { + // bit 3 (16) -> gzipped data + // bit 4 (32) -> autodetect gzip/deflate + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + + this.header = new GZheader(); + + zlib_inflate.inflateGetHeader(this.strm, this.header); +} + +/** + * Inflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. + * + * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with + * new output chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the decompression context. + * + * On fail call [[Inflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Inflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + var dict; + + // Flag to properly process Z_BUF_ERROR on testing inflate call + // when we check that all output data was flushed. + var allowBufError = false; + + if (this.ended) { return false; } + _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // Only binary strings can be decompressed on practice + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ + + if (status === c.Z_NEED_DICT && dictionary) { + // Convert data if needed + if (typeof dictionary === 'string') { + dict = strings.string2buf(dictionary); + } else if (toString.call(dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(dictionary); + } else { + dict = dictionary; + } + + status = zlib_inflate.inflateSetDictionary(this.strm, dict); + + } + + if (status === c.Z_BUF_ERROR && allowBufError === true) { + status = c.Z_OK; + allowBufError = false; + } + + if (status !== c.Z_STREAM_END && status !== c.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + + if (strm.next_out) { + if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { + + if (this.options.to === 'string') { + + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); + + // move tail + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } + + this.onData(utf8str); + + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } + + // When no more input data, we should check that internal inflate buffers + // are flushed. The only way to do it when avail_out = 0 - run one more + // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. + // Here we set flag to process this error properly. + // + // NOTE. Deflate does not return error in this case and does not needs such + // logic. + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); + + if (status === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } + + // Finalize on the last chunk. + if (_mode === c.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c.Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Inflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): ouput data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Inflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Inflate#onEnd(status) -> Void + * - status (Number): inflate status. 0 (Z_OK) on success, + * other if not. + * + * Called either after you tell inflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Inflate.prototype.onEnd = function (status) { + // On success - join + if (status === c.Z_OK) { + if (this.options.to === 'string') { + // Glue & convert here, until we teach pako to send + // utf8 alligned strings to onData + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * inflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Decompress `data` with inflate/ungzip and `options`. Autodetect + * format via wrapper header by default. That's why we don't provide + * separate `ungzip` method. + * + * Supported options are: + * + * - windowBits + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) + * , output; + * + * try { + * output = pako.inflate(input); + * } catch (err) + * console.log(err); + * } + * ``` + **/ +function inflate(input, options) { + var inflator = new Inflate(options); + + inflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (inflator.err) { throw inflator.msg; } + + return inflator.result; +} + + +/** + * inflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * The same as [[inflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); +} + + +/** + * ungzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Just shortcut to [[inflate]], because it autodetects format + * by header.content. Done for convenience. + **/ + + +exports.Inflate = Inflate; +exports.inflate = inflate; +exports.inflateRaw = inflateRaw; +exports.ungzip = inflate; + +},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js") +}); \ No newline at end of file diff --git a/node_modules/pako/dist/pako_inflate.min.js b/node_modules/pako/dist/pako_inflate.min.js new file mode 100644 index 0000000..d423de9 --- /dev/null +++ b/node_modules/pako/dist/pako_inflate.min.js @@ -0,0 +1,2 @@ +/* pako 0.2.9 nodeca/pako */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.pako=e()}}(function(){return function e(t,i,n){function a(o,s){if(!i[o]){if(!t[o]){var f="function"==typeof require&&require;if(!s&&f)return f(o,!0);if(r)return r(o,!0);var l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}var d=i[o]={exports:{}};t[o][0].call(d.exports,function(e){var i=t[o][1][e];return a(i?i:e)},d,d.exports,e,t,i,n)}return i[o].exports}for(var r="function"==typeof require&&require,o=0;o=252?6:f>=248?5:f>=240?4:f>=224?3:f>=192?2:1;s[254]=s[254]=1,i.string2buf=function(e){var t,i,n,r,o,s=e.length,f=0;for(r=0;r>>6,t[o++]=128|63&i):i<65536?(t[o++]=224|i>>>12,t[o++]=128|i>>>6&63,t[o++]=128|63&i):(t[o++]=240|i>>>18,t[o++]=128|i>>>12&63,t[o++]=128|i>>>6&63,t[o++]=128|63&i);return t},i.buf2binstring=function(e){return n(e,e.length)},i.binstring2buf=function(e){for(var t=new a.Buf8(e.length),i=0,n=t.length;i4)l[a++]=65533,i+=o-1;else{for(r&=2===o?31:3===o?15:7;o>1&&i1?l[a++]=65533:r<65536?l[a++]=r:(r-=65536,l[a++]=55296|r>>10&1023,l[a++]=56320|1023&r)}return n(l,a)},i.utf8border=function(e,t){var i;for(t=t||e.length,t>e.length&&(t=e.length),i=t-1;i>=0&&128===(192&e[i]);)i--;return i<0?t:0===i?t:i+s[e[i]]>t?i:t}},{"./common":1}],3:[function(e,t,i){"use strict";function n(e,t,i,n){for(var a=65535&e|0,r=e>>>16&65535|0,o=0;0!==i;){o=i>2e3?2e3:i,i-=o;do a=a+t[n++]|0,r=r+a|0;while(--o);a%=65521,r%=65521}return a|r<<16|0}t.exports=n},{}],4:[function(e,t,i){"use strict";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],5:[function(e,t,i){"use strict";function n(){for(var e,t=[],i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t}function a(e,t,i,n){var a=r,o=n+i;e^=-1;for(var s=n;s>>8^a[255&(e^t[s])];return e^-1}var r=n();t.exports=a},{}],6:[function(e,t,i){"use strict";function n(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}t.exports=n},{}],7:[function(e,t,i){"use strict";var n=30,a=12;t.exports=function(e,t){var i,r,o,s,f,l,d,u,c,h,b,w,m,k,_,g,v,p,x,y,S,E,B,Z,A;i=e.state,r=e.next_in,Z=e.input,o=r+(e.avail_in-5),s=e.next_out,A=e.output,f=s-(t-e.avail_out),l=s+(e.avail_out-257),d=i.dmax,u=i.wsize,c=i.whave,h=i.wnext,b=i.window,w=i.hold,m=i.bits,k=i.lencode,_=i.distcode,g=(1<>>24,w>>>=x,m-=x,x=p>>>16&255,0===x)A[s++]=65535&p;else{if(!(16&x)){if(0===(64&x)){p=k[(65535&p)+(w&(1<>>=x,m-=x),m<15&&(w+=Z[r++]<>>24,w>>>=x,m-=x,x=p>>>16&255,!(16&x)){if(0===(64&x)){p=_[(65535&p)+(w&(1<d){e.msg="invalid distance too far back",i.mode=n;break e}if(w>>>=x,m-=x,x=s-f,S>x){if(x=S-x,x>c&&i.sane){e.msg="invalid distance too far back",i.mode=n;break e}if(E=0,B=b,0===h){if(E+=u-x,x2;)A[s++]=B[E++],A[s++]=B[E++],A[s++]=B[E++],y-=3;y&&(A[s++]=B[E++],y>1&&(A[s++]=B[E++]))}else{E=s-S;do A[s++]=A[E++],A[s++]=A[E++],A[s++]=A[E++],y-=3;while(y>2);y&&(A[s++]=A[E++],y>1&&(A[s++]=A[E++]))}break}}break}}while(r>3,r-=y,m-=y<<3,w&=(1<>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function a(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new _.Buf16(320),this.work=new _.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function r(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=D,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new _.Buf32(we),t.distcode=t.distdyn=new _.Buf32(me),t.sane=1,t.back=-1,z):C}function o(e){var t;return e&&e.state?(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,r(e)):C}function s(e,t){var i,n;return e&&e.state?(n=e.state,t<0?(i=0,t=-t):(i=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15)?C:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,o(e))):C}function f(e,t){var i,n;return e?(n=new a,e.state=n,n.window=null,i=s(e,t),i!==z&&(e.state=null),i):C}function l(e){return f(e,_e)}function d(e){if(ge){var t;for(m=new _.Buf32(512),k=new _.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(x(S,e.lens,0,288,m,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;x(E,e.lens,0,32,k,0,e.work,{bits:5}),ge=!1}e.lencode=m,e.lenbits=9,e.distcode=k,e.distbits=5}function u(e,t,i,n){var a,r=e.state;return null===r.window&&(r.wsize=1<=r.wsize?(_.arraySet(r.window,t,i-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(a=r.wsize-r.wnext,a>n&&(a=n),_.arraySet(r.window,t,i-n,a,r.wnext),n-=a,n?(_.arraySet(r.window,t,i-n,n,0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,i.check=v(i.check,Ze,2,0),c=0,h=0,i.mode=F;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&c)<<8)+(c>>8))%31){e.msg="incorrect header check",i.mode=ce;break}if((15&c)!==U){e.msg="unknown compression method",i.mode=ce;break}if(c>>>=4,h-=4,xe=(15&c)+8,0===i.wbits)i.wbits=xe;else if(xe>i.wbits){e.msg="invalid window size",i.mode=ce;break}i.dmax=1<>8&1),512&i.flags&&(Ze[0]=255&c,Ze[1]=c>>>8&255,i.check=v(i.check,Ze,2,0)),c=0,h=0,i.mode=L;case L:for(;h<32;){if(0===f)break e;f--,c+=a[o++]<>>8&255,Ze[2]=c>>>16&255,Ze[3]=c>>>24&255,i.check=v(i.check,Ze,4,0)),c=0,h=0,i.mode=H;case H:for(;h<16;){if(0===f)break e;f--,c+=a[o++]<>8),512&i.flags&&(Ze[0]=255&c,Ze[1]=c>>>8&255,i.check=v(i.check,Ze,2,0)),c=0,h=0,i.mode=M;case M:if(1024&i.flags){for(;h<16;){if(0===f)break e;f--,c+=a[o++]<>>8&255,i.check=v(i.check,Ze,2,0)),c=0,h=0}else i.head&&(i.head.extra=null);i.mode=j;case j:if(1024&i.flags&&(m=i.length,m>f&&(m=f),m&&(i.head&&(xe=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),_.arraySet(i.head.extra,a,o,m,xe)),512&i.flags&&(i.check=v(i.check,a,m,o)),f-=m,o+=m,i.length-=m),i.length))break e;i.length=0,i.mode=K;case K:if(2048&i.flags){if(0===f)break e;m=0;do xe=a[o+m++],i.head&&xe&&i.length<65536&&(i.head.name+=String.fromCharCode(xe));while(xe&&m>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=X;break;case q:for(;h<32;){if(0===f)break e;f--,c+=a[o++]<>>=7&h,h-=7&h,i.mode=le;break}for(;h<3;){if(0===f)break e;f--,c+=a[o++]<>>=1,h-=1,3&c){case 0:i.mode=J;break;case 1:if(d(i),i.mode=ie,t===A){c>>>=2,h-=2;break e}break;case 2:i.mode=$;break;case 3:e.msg="invalid block type",i.mode=ce}c>>>=2,h-=2;break;case J:for(c>>>=7&h,h-=7&h;h<32;){if(0===f)break e;f--,c+=a[o++]<>>16^65535)){e.msg="invalid stored block lengths",i.mode=ce;break}if(i.length=65535&c,c=0,h=0,i.mode=Q,t===A)break e;case Q:i.mode=V;case V:if(m=i.length){if(m>f&&(m=f),m>l&&(m=l),0===m)break e;_.arraySet(r,a,o,m,s),f-=m,o+=m,l-=m,s+=m,i.length-=m;break}i.mode=X;break;case $:for(;h<14;){if(0===f)break e;f--,c+=a[o++]<>>=5,h-=5,i.ndist=(31&c)+1,c>>>=5,h-=5,i.ncode=(15&c)+4,c>>>=4,h-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=ce;break}i.have=0,i.mode=ee;case ee:for(;i.have>>=3,h-=3}for(;i.have<19;)i.lens[Ae[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,Se={bits:i.lenbits},ye=x(y,i.lens,0,19,i.lencode,0,i.work,Se),i.lenbits=Se.bits,ye){e.msg="invalid code lengths set",i.mode=ce;break}i.have=0,i.mode=te;case te:for(;i.have>>24,ke=Be>>>16&255,_e=65535&Be,!(me<=h);){if(0===f)break e;f--,c+=a[o++]<>>=me,h-=me,i.lens[i.have++]=_e;else{if(16===_e){for(Ee=me+2;h>>=me,h-=me,0===i.have){e.msg="invalid bit length repeat",i.mode=ce;break}xe=i.lens[i.have-1],m=3+(3&c),c>>>=2,h-=2}else if(17===_e){for(Ee=me+3;h>>=me,h-=me,xe=0,m=3+(7&c),c>>>=3,h-=3}else{for(Ee=me+7;h>>=me,h-=me,xe=0,m=11+(127&c),c>>>=7,h-=7}if(i.have+m>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=ce;break}for(;m--;)i.lens[i.have++]=xe}}if(i.mode===ce)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=ce;break}if(i.lenbits=9,Se={bits:i.lenbits},ye=x(S,i.lens,0,i.nlen,i.lencode,0,i.work,Se),i.lenbits=Se.bits,ye){e.msg="invalid literal/lengths set",i.mode=ce;break}if(i.distbits=6,i.distcode=i.distdyn,Se={bits:i.distbits},ye=x(E,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,Se),i.distbits=Se.bits,ye){e.msg="invalid distances set",i.mode=ce;break}if(i.mode=ie,t===A)break e;case ie:i.mode=ne;case ne:if(f>=6&&l>=258){e.next_out=s,e.avail_out=l,e.next_in=o,e.avail_in=f,i.hold=c,i.bits=h,p(e,w),s=e.next_out,r=e.output,l=e.avail_out,o=e.next_in,a=e.input,f=e.avail_in,c=i.hold,h=i.bits,i.mode===X&&(i.back=-1);break}for(i.back=0;Be=i.lencode[c&(1<>>24,ke=Be>>>16&255,_e=65535&Be,!(me<=h);){if(0===f)break e;f--,c+=a[o++]<>ge)],me=Be>>>24,ke=Be>>>16&255,_e=65535&Be,!(ge+me<=h);){if(0===f)break e;f--,c+=a[o++]<>>=ge,h-=ge,i.back+=ge}if(c>>>=me,h-=me,i.back+=me,i.length=_e,0===ke){i.mode=fe;break}if(32&ke){i.back=-1,i.mode=X;break}if(64&ke){e.msg="invalid literal/length code",i.mode=ce;break}i.extra=15&ke,i.mode=ae;case ae:if(i.extra){for(Ee=i.extra;h>>=i.extra,h-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=re;case re:for(;Be=i.distcode[c&(1<>>24,ke=Be>>>16&255,_e=65535&Be,!(me<=h);){if(0===f)break e;f--,c+=a[o++]<>ge)],me=Be>>>24,ke=Be>>>16&255,_e=65535&Be,!(ge+me<=h);){if(0===f)break e;f--,c+=a[o++]<>>=ge,h-=ge,i.back+=ge}if(c>>>=me,h-=me,i.back+=me,64&ke){e.msg="invalid distance code",i.mode=ce;break}i.offset=_e,i.extra=15&ke,i.mode=oe;case oe:if(i.extra){for(Ee=i.extra;h>>=i.extra,h-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=ce;break}i.mode=se;case se:if(0===l)break e;if(m=w-l,i.offset>m){if(m=i.offset-m,m>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=ce;break}m>i.wnext?(m-=i.wnext,k=i.wsize-m):k=i.wnext-m,m>i.length&&(m=i.length),we=i.window}else we=r,k=s-i.offset,m=i.length;m>l&&(m=l),l-=m,i.length-=m;do r[s++]=we[k++];while(--m);0===i.length&&(i.mode=ne);break;case fe:if(0===l)break e;r[s++]=i.length,l--,i.mode=ne;break;case le:if(i.wrap){for(;h<32;){if(0===f)break e;f--,c|=a[o++]<=1&&0===M[C];C--);if(O>C&&(O=C),0===C)return w[m++]=20971520,w[m++]=20971520,_.bits=1,0;for(N=1;N0&&(e===s||1!==C))return-1;for(j[1]=0,z=1;zr||e===l&&D>o)return 1;for(var Y=0;;){Y++,E=z-T,k[R]S?(B=K[P+k[R]],Z=L[H+k[R]]):(B=96,Z=0),g=1<>T)+v]=E<<24|B<<16|Z|0;while(0!==v);for(g=1<>=1;if(0!==g?(F&=g-1,F+=g):F=0,R++,0===--M[z]){if(z===C)break;z=t[i+k[R]]}if(z>O&&(F&x)!==p){for(0===T&&(T=O),y+=N,I=z-T,U=1<r||e===l&&D>o)return 1;p=F&x,w[p]=O<<24|I<<16|y-m|0}}return 0!==F&&(w[y+F]=z-T<<24|64<<16|0),_.bits=O,0}},{"../utils/common":1}],10:[function(e,t,i){"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],11:[function(e,t,i){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}t.exports=n},{}],"/lib/inflate.js":[function(e,t,i){"use strict";function n(e){if(!(this instanceof n))return new n(e);this.options=s.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0===(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new u,this.strm.avail_out=0;var i=o.inflateInit2(this.strm,t.windowBits);if(i!==l.Z_OK)throw new Error(d[i]);this.header=new c,o.inflateGetHeader(this.strm,this.header)}function a(e,t){var i=new n(t);if(i.push(e,!0),i.err)throw i.msg;return i.result}function r(e,t){return t=t||{},t.raw=!0,a(e,t)}var o=e("./zlib/inflate"),s=e("./utils/common"),f=e("./utils/strings"),l=e("./zlib/constants"),d=e("./zlib/messages"),u=e("./zlib/zstream"),c=e("./zlib/gzheader"),h=Object.prototype.toString;n.prototype.push=function(e,t){var i,n,a,r,d,u,c=this.strm,b=this.options.chunkSize,w=this.options.dictionary,m=!1;if(this.ended)return!1;n=t===~~t?t:t===!0?l.Z_FINISH:l.Z_NO_FLUSH,"string"==typeof e?c.input=f.binstring2buf(e):"[object ArrayBuffer]"===h.call(e)?c.input=new Uint8Array(e):c.input=e,c.next_in=0,c.avail_in=c.input.length;do{if(0===c.avail_out&&(c.output=new s.Buf8(b),c.next_out=0,c.avail_out=b),i=o.inflate(c,l.Z_NO_FLUSH),i===l.Z_NEED_DICT&&w&&(u="string"==typeof w?f.string2buf(w):"[object ArrayBuffer]"===h.call(w)?new Uint8Array(w):w,i=o.inflateSetDictionary(this.strm,u)),i===l.Z_BUF_ERROR&&m===!0&&(i=l.Z_OK,m=!1),i!==l.Z_STREAM_END&&i!==l.Z_OK)return this.onEnd(i),this.ended=!0,!1;c.next_out&&(0!==c.avail_out&&i!==l.Z_STREAM_END&&(0!==c.avail_in||n!==l.Z_FINISH&&n!==l.Z_SYNC_FLUSH)||("string"===this.options.to?(a=f.utf8border(c.output,c.next_out),r=c.next_out-a,d=f.buf2string(c.output,a),c.next_out=r,c.avail_out=b-r,r&&s.arraySet(c.output,c.output,a,r,0),this.onData(d)):this.onData(s.shrinkBuf(c.output,c.next_out)))),0===c.avail_in&&0===c.avail_out&&(m=!0)}while((c.avail_in>0||0===c.avail_out)&&i!==l.Z_STREAM_END);return i===l.Z_STREAM_END&&(n=l.Z_FINISH),n===l.Z_FINISH?(i=o.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===l.Z_OK):n!==l.Z_SYNC_FLUSH||(this.onEnd(l.Z_OK),c.avail_out=0,!0)},n.prototype.onData=function(e){this.chunks.push(e)},n.prototype.onEnd=function(e){e===l.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},i.Inflate=n,i.inflate=a,i.inflateRaw=r,i.ungzip=a},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js")}); diff --git a/node_modules/pako/index.js b/node_modules/pako/index.js new file mode 100644 index 0000000..cd07251 --- /dev/null +++ b/node_modules/pako/index.js @@ -0,0 +1,14 @@ +// Top level file is just a mixin of submodules & constants +'use strict'; + +var assign = require('./lib/utils/common').assign; + +var deflate = require('./lib/deflate'); +var inflate = require('./lib/inflate'); +var constants = require('./lib/zlib/constants'); + +var pako = {}; + +assign(pako, deflate, inflate, constants); + +module.exports = pako; diff --git a/node_modules/pako/lib/deflate.js b/node_modules/pako/lib/deflate.js new file mode 100644 index 0000000..11040d4 --- /dev/null +++ b/node_modules/pako/lib/deflate.js @@ -0,0 +1,400 @@ +'use strict'; + + +var zlib_deflate = require('./zlib/deflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); + +var toString = Object.prototype.toString; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + +var Z_NO_FLUSH = 0; +var Z_FINISH = 4; + +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_SYNC_FLUSH = 2; + +var Z_DEFAULT_COMPRESSION = -1; + +var Z_DEFAULT_STRATEGY = 0; + +var Z_DEFLATED = 8; + +/* ===========================================================================*/ + + +/** + * class Deflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[deflate]], + * [[deflateRaw]] and [[gzip]]. + **/ + +/* internal + * Deflate.chunks -> Array + * + * Chunks of output data, if [[Deflate#onData]] not overriden. + **/ + +/** + * Deflate.result -> Uint8Array|Array + * + * Compressed result, generated by default [[Deflate#onData]] + * and [[Deflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Deflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Deflate.err -> Number + * + * Error code after deflate finished. 0 (Z_OK) on success. + * You will not need it in real life, because deflate errors + * are possible only on wrong options or bad `onData` / `onEnd` + * custom handlers. + **/ + +/** + * Deflate.msg -> String + * + * Error message, if [[Deflate.err]] != 0 + **/ + + +/** + * new Deflate(options) + * - options (Object): zlib deflate options. + * + * Creates new deflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `level` + * - `windowBits` + * - `memLevel` + * - `strategy` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw deflate + * - `gzip` (Boolean) - create gzip wrapper + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * - `header` (Object) - custom header for gzip + * - `text` (Boolean) - true if compressed data believed to be text + * - `time` (Number) - modification time, unix timestamp + * - `os` (Number) - operation system code + * - `extra` (Array) - array of bytes with extra data (max 65536) + * - `name` (String) - file name (binary string) + * - `comment` (String) - comment (binary string) + * - `hcrc` (Boolean) - true if header crc should be added + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var deflate = new pako.Deflate({ level: 3}); + * + * deflate.push(chunk1, false); + * deflate.push(chunk2, true); // true -> last chunk + * + * if (deflate.err) { throw new Error(deflate.err); } + * + * console.log(deflate.result); + * ``` + **/ +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + + var opt = this.options; + + if (opt.raw && (opt.windowBits > 0)) { + opt.windowBits = -opt.windowBits; + } + + else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + + if (opt.dictionary) { + var dict; + // Convert data if needed + if (typeof opt.dictionary === 'string') { + // If we need to compress text, change encoding to utf8. + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} + +/** + * Deflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be + * converted to utf8 byte sequence. + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. + * + * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with + * new compressed chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the compression context. + * + * On fail call [[Deflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * array format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + + if (this.ended) { return false; } + + _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // If we need to compress text, change encoding to utf8. + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + + // Finalize on the last chunk. + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Deflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): ouput data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Deflate#onEnd(status) -> Void + * - status (Number): deflate status. 0 (Z_OK) on success, + * other if not. + * + * Called once after you tell deflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * deflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * Compress `data` with deflate algorithm and `options`. + * + * Supported options are: + * + * - level + * - windowBits + * - memLevel + * - strategy + * - dictionary + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); + * + * console.log(pako.deflate(data)); + * ``` + **/ +function deflate(input, options) { + var deflator = new Deflate(options); + + deflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (deflator.err) { throw deflator.msg; } + + return deflator.result; +} + + +/** + * deflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} + + +/** + * gzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but create gzip wrapper instead of + * deflate one. + **/ +function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate(input, options); +} + + +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; diff --git a/node_modules/pako/lib/inflate.js b/node_modules/pako/lib/inflate.js new file mode 100644 index 0000000..0ed4999 --- /dev/null +++ b/node_modules/pako/lib/inflate.js @@ -0,0 +1,418 @@ +'use strict'; + + +var zlib_inflate = require('./zlib/inflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var c = require('./zlib/constants'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); +var GZheader = require('./zlib/gzheader'); + +var toString = Object.prototype.toString; + +/** + * class Inflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[inflate]] + * and [[inflateRaw]]. + **/ + +/* internal + * inflate.chunks -> Array + * + * Chunks of output data, if [[Inflate#onData]] not overriden. + **/ + +/** + * Inflate.result -> Uint8Array|Array|String + * + * Uncompressed result, generated by default [[Inflate#onData]] + * and [[Inflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Inflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Inflate.err -> Number + * + * Error code after inflate finished. 0 (Z_OK) on success. + * Should be checked if broken data possible. + **/ + +/** + * Inflate.msg -> String + * + * Error message, if [[Inflate.err]] != 0 + **/ + + +/** + * new Inflate(options) + * - options (Object): zlib inflate options. + * + * Creates new inflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `windowBits` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw inflate + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * By default, when no options set, autodetect deflate/gzip data format via + * wrapper header. + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var inflate = new pako.Inflate({ level: 3}); + * + * inflate.push(chunk1, false); + * inflate.push(chunk2, true); // true -> last chunk + * + * if (inflate.err) { throw new Error(inflate.err); } + * + * console.log(inflate.result); + * ``` + **/ +function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: '' + }, options || {}); + + var opt = this.options; + + // Force window size for `raw` data, if not set directly, + // because we have no header for autodetect. + if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { opt.windowBits = -15; } + } + + // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate + if ((opt.windowBits >= 0) && (opt.windowBits < 16) && + !(options && options.windowBits)) { + opt.windowBits += 32; + } + + // Gzip header has no info about windows size, we can do autodetect only + // for deflate. So, if window size not set, force it to max when gzip possible + if ((opt.windowBits > 15) && (opt.windowBits < 48)) { + // bit 3 (16) -> gzipped data + // bit 4 (32) -> autodetect gzip/deflate + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + + this.header = new GZheader(); + + zlib_inflate.inflateGetHeader(this.strm, this.header); +} + +/** + * Inflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. + * + * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with + * new output chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the decompression context. + * + * On fail call [[Inflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Inflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + var dict; + + // Flag to properly process Z_BUF_ERROR on testing inflate call + // when we check that all output data was flushed. + var allowBufError = false; + + if (this.ended) { return false; } + _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // Only binary strings can be decompressed on practice + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ + + if (status === c.Z_NEED_DICT && dictionary) { + // Convert data if needed + if (typeof dictionary === 'string') { + dict = strings.string2buf(dictionary); + } else if (toString.call(dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(dictionary); + } else { + dict = dictionary; + } + + status = zlib_inflate.inflateSetDictionary(this.strm, dict); + + } + + if (status === c.Z_BUF_ERROR && allowBufError === true) { + status = c.Z_OK; + allowBufError = false; + } + + if (status !== c.Z_STREAM_END && status !== c.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + + if (strm.next_out) { + if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { + + if (this.options.to === 'string') { + + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); + + // move tail + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } + + this.onData(utf8str); + + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } + + // When no more input data, we should check that internal inflate buffers + // are flushed. The only way to do it when avail_out = 0 - run one more + // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. + // Here we set flag to process this error properly. + // + // NOTE. Deflate does not return error in this case and does not needs such + // logic. + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); + + if (status === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } + + // Finalize on the last chunk. + if (_mode === c.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c.Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Inflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): ouput data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Inflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Inflate#onEnd(status) -> Void + * - status (Number): inflate status. 0 (Z_OK) on success, + * other if not. + * + * Called either after you tell inflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Inflate.prototype.onEnd = function (status) { + // On success - join + if (status === c.Z_OK) { + if (this.options.to === 'string') { + // Glue & convert here, until we teach pako to send + // utf8 alligned strings to onData + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * inflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Decompress `data` with inflate/ungzip and `options`. Autodetect + * format via wrapper header by default. That's why we don't provide + * separate `ungzip` method. + * + * Supported options are: + * + * - windowBits + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) + * , output; + * + * try { + * output = pako.inflate(input); + * } catch (err) + * console.log(err); + * } + * ``` + **/ +function inflate(input, options) { + var inflator = new Inflate(options); + + inflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (inflator.err) { throw inflator.msg; } + + return inflator.result; +} + + +/** + * inflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * The same as [[inflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); +} + + +/** + * ungzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Just shortcut to [[inflate]], because it autodetects format + * by header.content. Done for convenience. + **/ + + +exports.Inflate = Inflate; +exports.inflate = inflate; +exports.inflateRaw = inflateRaw; +exports.ungzip = inflate; diff --git a/node_modules/pako/lib/utils/common.js b/node_modules/pako/lib/utils/common.js new file mode 100644 index 0000000..1e159fe --- /dev/null +++ b/node_modules/pako/lib/utils/common.js @@ -0,0 +1,102 @@ +'use strict'; + + +var TYPED_OK = (typeof Uint8Array !== 'undefined') && + (typeof Uint16Array !== 'undefined') && + (typeof Int32Array !== 'undefined'); + + +exports.assign = function (obj /*from1, from2, from3, ...*/) { + var sources = Array.prototype.slice.call(arguments, 1); + while (sources.length) { + var source = sources.shift(); + if (!source) { continue; } + + if (typeof source !== 'object') { + throw new TypeError(source + 'must be non-object'); + } + + for (var p in source) { + if (source.hasOwnProperty(p)) { + obj[p] = source[p]; + } + } + } + + return obj; +}; + + +// reduce buffer size, avoiding mem copy +exports.shrinkBuf = function (buf, size) { + if (buf.length === size) { return buf; } + if (buf.subarray) { return buf.subarray(0, size); } + buf.length = size; + return buf; +}; + + +var fnTyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set(src.subarray(src_offs, src_offs + len), dest_offs); + return; + } + // Fallback to ordinary array + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + var i, l, len, pos, chunk, result; + + // calculate data length + len = 0; + for (i = 0, l = chunks.length; i < l; i++) { + len += chunks[i].length; + } + + // join chunks + result = new Uint8Array(len); + pos = 0; + for (i = 0, l = chunks.length; i < l; i++) { + chunk = chunks[i]; + result.set(chunk, pos); + pos += chunk.length; + } + + return result; + } +}; + +var fnUntyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + return [].concat.apply([], chunks); + } +}; + + +// Enable/Disable typed arrays use, for testing +// +exports.setTyped = function (on) { + if (on) { + exports.Buf8 = Uint8Array; + exports.Buf16 = Uint16Array; + exports.Buf32 = Int32Array; + exports.assign(exports, fnTyped); + } else { + exports.Buf8 = Array; + exports.Buf16 = Array; + exports.Buf32 = Array; + exports.assign(exports, fnUntyped); + } +}; + +exports.setTyped(TYPED_OK); diff --git a/node_modules/pako/lib/utils/strings.js b/node_modules/pako/lib/utils/strings.js new file mode 100644 index 0000000..1a0499c --- /dev/null +++ b/node_modules/pako/lib/utils/strings.js @@ -0,0 +1,185 @@ +// String encode/decode helpers +'use strict'; + + +var utils = require('./common'); + + +// Quick check if we can use fast array to bin string conversion +// +// - apply(Array) can fail on Android 2.2 +// - apply(Uint8Array) can fail on iOS 5.1 Safary +// +var STR_APPLY_OK = true; +var STR_APPLY_UIA_OK = true; + +try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } +try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } + + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new utils.Buf8(256); +for (var q = 0; q < 256; q++) { + _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start + + +// convert string to array (typed, when possible) +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + buf = new utils.Buf8(buf_len); + + // convert + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Helper (used in 2 places) +function buf2binstring(buf, len) { + // use fallback for big arrays to avoid stack overflow + if (len < 65537) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} + + +// Convert byte array to binary string +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; + + +// Convert binary string (typed, when possible) +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; + + +// convert array to string +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len * 2); + + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + // quick process ascii + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + // skip 5 & 6 byte codes + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; + + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; diff --git a/node_modules/pako/lib/zlib/adler32.js b/node_modules/pako/lib/zlib/adler32.js new file mode 100644 index 0000000..dcefe93 --- /dev/null +++ b/node_modules/pako/lib/zlib/adler32.js @@ -0,0 +1,32 @@ +'use strict'; + +// Note: adler32 takes 12% for level 0 and 2% for level 6. +// It doesn't worth to make additional optimizationa as in original. +// Small size is preferable. + +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + + while (len !== 0) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} + + +module.exports = adler32; diff --git a/node_modules/pako/lib/zlib/constants.js b/node_modules/pako/lib/zlib/constants.js new file mode 100644 index 0000000..ece6700 --- /dev/null +++ b/node_modules/pako/lib/zlib/constants.js @@ -0,0 +1,50 @@ +'use strict'; + + +module.exports = { + + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + + + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type +}; diff --git a/node_modules/pako/lib/zlib/crc32.js b/node_modules/pako/lib/zlib/crc32.js new file mode 100644 index 0000000..0768b1c --- /dev/null +++ b/node_modules/pako/lib/zlib/crc32.js @@ -0,0 +1,41 @@ +'use strict'; + +// Note: we can't get significant speed boost here. +// So write code to minimize size - no pregenerated tables +// and array tools dependencies. + + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; diff --git a/node_modules/pako/lib/zlib/deflate.js b/node_modules/pako/lib/zlib/deflate.js new file mode 100644 index 0000000..e461fb8 --- /dev/null +++ b/node_modules/pako/lib/zlib/deflate.js @@ -0,0 +1,1855 @@ +'use strict'; + +var utils = require('../utils/common'); +var trees = require('./trees'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var msg = require('./messages'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +//var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +//var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +//var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + + +/* compression levels */ +//var Z_NO_COMPRESSION = 0; +//var Z_BEST_SPEED = 1; +//var Z_BEST_COMPRESSION = 9; +var Z_DEFAULT_COMPRESSION = -1; + + +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +//var Z_BINARY = 0; +//var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + + +/* The deflate compression method */ +var Z_DEFLATED = 8; + +/*============================================================================*/ + + +var MAX_MEM_LEVEL = 9; +/* Maximum value for memLevel in deflateInit2 */ +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_MEM_LEVEL = 8; + + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ +var LITERALS = 256; +/* number of literal bytes 0..255 */ +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ +var D_CODES = 30; +/* number of distance codes */ +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + +var PRESET_DICT = 0x20; + +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; + +var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ +var BS_BLOCK_DONE = 2; /* block flush performed */ +var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ +var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ + +var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return ((f) << 1) - ((f) > 4 ? 9 : 0); +} + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->output buffer and copying into it. + * (See also read_buf()). + */ +function flush_pending(strm) { + var s = strm.state; + + //_tr_flush_bits(s); + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { return; } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } +} + + +function flush_block_only(s, last) { + trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); + s.block_start = s.strstart; + flush_pending(s.strm); +} + + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} + + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +function putShortMSB(s, b) { +// put_byte(s, (Byte)(b >> 8)); +// put_byte(s, (Byte)(b & 0xff)); + s.pending_buf[s.pending++] = (b >>> 8) & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} + + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->input buffer and copying from it. + * (See also flush_pending()). + */ +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { len = size; } + if (len === 0) { return 0; } + + strm.avail_in -= len; + + // zmemcpy(buf, strm->next_in, len); + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } + + else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + + return len; +} + + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; /* max hash chain length */ + var scan = s.strstart; /* current string */ + var match; /* matched string */ + var len; /* length of current match */ + var best_len = s.prev_length; /* best match length so far */ + var nice_match = s.nice_match; /* stop if match long enough */ + var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? + s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; + + var _win = s.window; // shortcut + + var wmask = s.w_mask; + var prev = s.prev; + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if (nice_match > s.lookahead) { nice_match = s.lookahead; } + + // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + // Assert(cur_match < s->strstart, "no future"); + match = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ + + if (_win[match + best_len] !== scan_end || + _win[match + best_len - 1] !== scan_end1 || + _win[match] !== _win[scan] || + _win[++match] !== _win[scan + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2; + match++; + // Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + /*jshint noempty:false*/ + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + scan < strend); + + // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; +} + + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + + //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = s.window_size - s.lookahead - s.strstart; + + // JS ints have 32 bit, block below not needed + /* Deal with !@#$% 64K limit: */ + //if (sizeof(int) <= 2) { + // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + // more = wsize; + // + // } else if (more == (unsigned)(-1)) { + // /* Very unlikely, but possible on 16 bit machine if + // * strstart == 0 && lookahead == 1 (input done a byte at time) + // */ + // more--; + // } + //} + + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + /* we now have strstart >= MAX_DIST */ + s.block_start -= _w_size; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = (m >= _w_size ? m - _w_size : 0); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); + + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + //Assert(more >= 2, "more < 2"); + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + + /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; +//#if MIN_MATCH != 3 +// Call update_hash() MIN_MATCH-3 more times +//#endif + while (s.insert) { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ +// if (s.high_water < s.window_size) { +// var curr = s.strstart + s.lookahead; +// var init = 0; +// +// if (s.high_water < curr) { +// /* Previous high water mark below current data -- zero WIN_INIT +// * bytes or up to end of window, whichever is less. +// */ +// init = s.window_size - curr; +// if (init > WIN_INIT) +// init = WIN_INIT; +// zmemzero(s->window + curr, (unsigned)init); +// s->high_water = curr + init; +// } +// else if (s->high_water < (ulg)curr + WIN_INIT) { +// /* High water mark at or above current data, but below current data +// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up +// * to end of window, whichever is less. +// */ +// init = (ulg)curr + WIN_INIT - s->high_water; +// if (init > s->window_size - s->high_water) +// init = s->window_size - s->high_water; +// zmemzero(s->window + s->high_water, (unsigned)init); +// s->high_water += init; +// } +// } +// +// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +// "not enough room for search"); +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +function deflate_stored(s, flush) { + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s.lookahead <= 1) { + + //Assert(s->strstart < s->w_size+MAX_DIST(s) || + // s->block_start >= (long)s->w_size, "slide too late"); +// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || +// s.block_start >= s.w_size)) { +// throw new Error("slide too late"); +// } + + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + } + //Assert(s->block_start >= 0L, "block gone"); +// if (s.block_start < 0) throw new Error("block gone"); + + s.strstart += s.lookahead; + s.lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + var max_start = s.block_start + max_block_size; + + if (s.strstart === 0 || s.strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_NEED_MORE; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +function deflate_fast(s, flush) { + var hash_head; /* head of the hash chain */ + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; /* flush the current block */ + } + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + } + if (s.match_length >= MIN_MATCH) { + // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only + + /*** _tr_tally_dist(s, s.strstart - s.match_start, + s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { + s.match_length--; /* string at strstart already in table */ + do { + s.strstart++; + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s.match_length !== 0); + s.strstart++; + } else + { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; + +//#if MIN_MATCH != 3 +// Call UPDATE_HASH() MIN_MATCH-3 more times +//#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s.window[s.strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +function deflate_slow(s, flush) { + var hash_head; /* head of hash chain */ + var bflush; /* set if current block must be flushed */ + + var max_insert; + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + */ + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && + s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + + if (s.match_length <= 5 && + (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s.match_length = MIN_MATCH - 1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + //check_match(s, s.strstart-1, s.prev_match, s.prev_length); + + /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, + s.prev_length - MIN_MATCH, bflush);***/ + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + } else if (s.match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + if (bflush) { + /*** FLUSH_BLOCK_ONLY(s, 0) ***/ + flush_block_only(s, false); + /***/ + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + //Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s.match_available) { + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_BLOCK_DONE; +} + + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +function deflate_rle(s, flush) { + var bflush; /* set if current block must be flushed */ + var prev; /* byte at distance one to match */ + var scan, strend; /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +function deflate_huff(s, flush) { + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s.match_length = 0; + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; + +configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), /* 3 */ + + new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ +]; + + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +function lm_init(s) { + s.window_size = 2 * s.w_size; + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + + +function DeflateState() { + this.strm = null; /* pointer back to this zlib stream */ + this.status = 0; /* as the name implies */ + this.pending_buf = null; /* output still pending */ + this.pending_buf_size = 0; /* size of pending_buf */ + this.pending_out = 0; /* next pending byte to output to the stream */ + this.pending = 0; /* nb of bytes in the pending buffer */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.gzhead = null; /* gzip header information to write */ + this.gzindex = 0; /* where in extra, name, or comment */ + this.method = Z_DEFLATED; /* can only be DEFLATED */ + this.last_flush = -1; /* value of flush param for previous deflate call */ + + this.w_size = 0; /* LZ77 window size (32K by default) */ + this.w_bits = 0; /* log2(w_size) (8..16) */ + this.w_mask = 0; /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; /* hash index of string to be inserted */ + this.hash_size = 0; /* number of elements in hash table */ + this.hash_bits = 0; /* log2(hash_size) */ + this.hash_mask = 0; /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; /* length of best match */ + this.prev_match = 0; /* previous match */ + this.match_available = 0; /* set if previous match exists */ + this.strstart = 0; /* start of string to insert */ + this.match_start = 0; /* start of matching string */ + this.lookahead = 0; /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; /* compression level (1..9) */ + this.strategy = 0; /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + + this.l_desc = null; /* desc. for literal tree */ + this.d_desc = null; /* desc. for distance tree */ + this.bl_desc = null; /* desc. for bit length tree */ + + //ush bl_count[MAX_BITS+1]; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ + zero(this.heap); + + this.heap_len = 0; /* number of elements in the heap */ + this.heap_max = 0; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; /* bit length of current block with optimal trees */ + this.static_len = 0; /* bit length of current block with static trees */ + this.matches = 0; /* number of string matches in current block */ + this.insert = 0; /* bytes at end of window left to insert */ + + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + s.status = (s.wrap ? INIT_STATE : BUSY_STATE); + strm.adler = (s.wrap === 2) ? + 0 // crc32(0, Z_NULL, 0) + : + 1; // adler32(0, Z_NULL, 0) + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; +} + + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; +} + + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } + strm.state.gzhead = head; + return Z_OK; +} + + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { // === Z_NULL + return Z_STREAM_ERROR; + } + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } + + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } + + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + var s = new DeflateState(); + + strm.state = s; + s.strm = strm; + + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + + // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; + + //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + + // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s.d_buf = 1 * s.lit_bufsize; + + //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + + s.level = level; + s.strategy = strategy; + s.method = method; + + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || + flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || + (!strm.input && strm.avail_in !== 0) || + (s.status === FINISH_STATE && flush !== Z_FINISH)) { + return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; /* just in case */ + old_flush = s.last_flush; + s.last_flush = flush; + + /* Write the header */ + if (s.status === INIT_STATE) { + + if (s.wrap === 2) { // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } + else { + put_byte(s, (s.gzhead.text ? 1 : 0) + + (s.gzhead.hcrc ? 2 : 0) + + (!s.gzhead.extra ? 0 : 4) + + (!s.gzhead.name ? 0 : 8) + + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, (s.gzhead.time >> 8) & 0xff); + put_byte(s, (s.gzhead.time >> 16) & 0xff); + put_byte(s, (s.gzhead.time >> 24) & 0xff); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, s.gzhead.os & 0xff); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } + else // DEFLATE header + { + var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= (level_flags << 6); + if (s.strstart !== 0) { header |= PRESET_DICT; } + header += 31 - (header % 31); + + s.status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } + +//#ifdef GZIP + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } + else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } + else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } + else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + s.status = BUSY_STATE; + } + } + else { + s.status = BUSY_STATE; + } + } +//#endif + + /* Flush as much pending output as possible */ + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && + flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm.avail_in !== 0 || s.lookahead !== 0 || + (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { + var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : + (s.strategy === Z_RLE ? deflate_rle(s, flush) : + configuration_table[s.level].func(s, flush)); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } + else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + //Assert(strm->avail_out > 0, "bug2"); + //if (strm.avail_out <= 0) { throw new Error("bug2");} + + if (flush !== Z_FINISH) { return Z_OK; } + if (s.wrap <= 0) { return Z_STREAM_END; } + + /* Write the trailer */ + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + put_byte(s, (strm.adler >> 16) & 0xff); + put_byte(s, (strm.adler >> 24) & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, (strm.total_in >> 8) & 0xff); + put_byte(s, (strm.total_in >> 16) & 0xff); + put_byte(s, (strm.total_in >> 24) & 0xff); + } + else + { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s.wrap > 0) { s.wrap = -s.wrap; } + /* write the trailer only once! */ + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + if (status !== INIT_STATE && + status !== EXTRA_STATE && + status !== NAME_STATE && + status !== COMMENT_STATE && + status !== HCRC_STATE && + status !== BUSY_STATE && + status !== FINISH_STATE + ) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} + + +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { + return Z_STREAM_ERROR; + } + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s.w_size) { + if (wrap === 0) { /* already empty otherwise */ + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; + +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ diff --git a/node_modules/pako/lib/zlib/gzheader.js b/node_modules/pako/lib/zlib/gzheader.js new file mode 100644 index 0000000..300bdee --- /dev/null +++ b/node_modules/pako/lib/zlib/gzheader.js @@ -0,0 +1,40 @@ +'use strict'; + + +function GZheader() { + /* true if compressed data believed to be text */ + this.text = 0; + /* modification time */ + this.time = 0; + /* extra flags (not used when writing a gzip file) */ + this.xflags = 0; + /* operating system */ + this.os = 0; + /* pointer to extra field or Z_NULL if none */ + this.extra = null; + /* extra field length (valid if extra != Z_NULL) */ + this.extra_len = 0; // Actually, we don't need it in JS, + // but leave for few code modifications + + // + // Setup limits is not necessary because in js we should not preallocate memory + // for inflate use constant limit in 65536 bytes + // + + /* space at extra (only when reading header) */ + // this.extra_max = 0; + /* pointer to zero-terminated file name or Z_NULL */ + this.name = ''; + /* space at name (only when reading header) */ + // this.name_max = 0; + /* pointer to zero-terminated comment or Z_NULL */ + this.comment = ''; + /* space at comment (only when reading header) */ + // this.comm_max = 0; + /* true if there was or will be a header crc */ + this.hcrc = 0; + /* true when done reading gzip header (not used when writing a gzip file) */ + this.done = false; +} + +module.exports = GZheader; diff --git a/node_modules/pako/lib/zlib/inffast.js b/node_modules/pako/lib/zlib/inffast.js new file mode 100644 index 0000000..a419f65 --- /dev/null +++ b/node_modules/pako/lib/zlib/inffast.js @@ -0,0 +1,326 @@ +'use strict'; + +// See state defs from inflate.js +var BAD = 30; /* got a data error -- remain here until reset */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state.mode === LEN + strm.avail_in >= 6 + strm.avail_out >= 258 + start >= strm.avail_out + state.bits < 8 + + On return, state.mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm.avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm.avail_out >= 258 for each loop to avoid checking for + output space. + */ +module.exports = function inflate_fast(strm, start) { + var state; + var _in; /* local strm.input */ + var last; /* have enough input while in < last */ + var _out; /* local strm.output */ + var beg; /* inflate()'s initial strm.output */ + var end; /* while out < end, enough space available */ +//#ifdef INFLATE_STRICT + var dmax; /* maximum distance from zlib header */ +//#endif + var wsize; /* window size or zero if not using window */ + var whave; /* valid bytes in the window */ + var wnext; /* window write index */ + // Use `s_window` instead `window`, avoid conflict with instrumentation tools + var s_window; /* allocated sliding window, if wsize != 0 */ + var hold; /* local strm.hold */ + var bits; /* local strm.bits */ + var lcode; /* local strm.lencode */ + var dcode; /* local strm.distcode */ + var lmask; /* mask for first level of length codes */ + var dmask; /* mask for first level of distance codes */ + var here; /* retrieved table entry */ + var op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + var len; /* match length, unused bytes */ + var dist; /* match distance */ + var from; /* where to copy match from */ + var from_source; + + + var input, output; // JS specific, because we have no pointers + + /* copy state to local variables */ + state = strm.state; + //here = state.here; + _in = strm.next_in; + input = strm.input; + last = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); +//#ifdef INFLATE_STRICT + dmax = state.dmax; +//#endif + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + top: + do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + + here = lcode[hold & lmask]; + + dolen: + for (;;) { // Goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + if (op === 0) { /* literal */ + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + output[_out++] = here & 0xffff/*here.val*/; + } + else if (op & 16) { /* length base */ + len = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & ((1 << op) - 1); + hold >>>= op; + bits -= op; + } + //Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + + dodist: + for (;;) { // goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + + if (op & 16) { /* distance base */ + dist = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & ((1 << op) - 1); +//#ifdef INFLATE_STRICT + if (dist > dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } +//#endif + hold >>>= op; + bits -= op; + //Tracevv((stderr, "inflate: distance %u\n", dist)); + op = _out - beg; /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } + +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// if (len <= op - whave) { +// do { +// output[_out++] = 0; +// } while (--len); +// continue top; +// } +// len -= op - whave; +// do { +// output[_out++] = 0; +// } while (--op > whave); +// if (op === 0) { +// from = _out - dist; +// do { +// output[_out++] = output[from++]; +// } while (--len); +// continue top; +// } +//#endif + } + from = 0; // window index + from_source = s_window; + if (wnext === 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } + else { + from = _out - dist; /* copy direct from output */ + do { /* minimum length is three */ + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } + else if ((op & 64) === 0) { /* 2nd level distance code */ + here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dodist; + } + else { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } + else if ((op & 64) === 0) { /* 2nd level length code */ + here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dolen; + } + else if (op & 32) { /* end-of-block */ + //Tracevv((stderr, "inflate: end of block\n")); + state.mode = TYPE; + break top; + } + else { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } while (_in < last && _out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + + /* update state and return */ + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); + strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); + state.hold = hold; + state.bits = bits; + return; +}; diff --git a/node_modules/pako/lib/zlib/inflate.js b/node_modules/pako/lib/zlib/inflate.js new file mode 100644 index 0000000..3be8b62 --- /dev/null +++ b/node_modules/pako/lib/zlib/inflate.js @@ -0,0 +1,1538 @@ +'use strict'; + + +var utils = require('../utils/common'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var inflate_fast = require('./inffast'); +var inflate_table = require('./inftrees'); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +//var Z_NO_FLUSH = 0; +//var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +//var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + +/* The deflate compression method */ +var Z_DEFLATED = 8; + + +/* STATES ====================================================================*/ +/* ===========================================================================*/ + + +var HEAD = 1; /* i: waiting for magic header */ +var FLAGS = 2; /* i: waiting for method and flags (gzip) */ +var TIME = 3; /* i: waiting for modification time (gzip) */ +var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ +var EXLEN = 5; /* i: waiting for extra length (gzip) */ +var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ +var NAME = 7; /* i: waiting for end of file name (gzip) */ +var COMMENT = 8; /* i: waiting for end of comment (gzip) */ +var HCRC = 9; /* i: waiting for header crc (gzip) */ +var DICTID = 10; /* i: waiting for dictionary check value */ +var DICT = 11; /* waiting for inflateSetDictionary() call */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ +var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ +var STORED = 14; /* i: waiting for stored size (length and complement) */ +var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ +var COPY = 16; /* i/o: waiting for input or output to copy stored block */ +var TABLE = 17; /* i: waiting for dynamic block table lengths */ +var LENLENS = 18; /* i: waiting for code length code lengths */ +var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ +var LEN_ = 20; /* i: same as LEN below, but only first time in */ +var LEN = 21; /* i: waiting for length/lit/eob code */ +var LENEXT = 22; /* i: waiting for length extra bits */ +var DIST = 23; /* i: waiting for distance code */ +var DISTEXT = 24; /* i: waiting for distance extra bits */ +var MATCH = 25; /* o: waiting for output space to copy string */ +var LIT = 26; /* o: waiting for output space to write literal */ +var CHECK = 27; /* i: waiting for 32-bit check value */ +var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ +var DONE = 29; /* finished check, done -- remain here until reset */ +var BAD = 30; /* got a data error -- remain here until reset */ +var MEM = 31; /* got an inflate() memory error -- remain here until reset */ +var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ + +/* ===========================================================================*/ + + + +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_WBITS = MAX_WBITS; + + +function zswap32(q) { + return (((q >>> 24) & 0xff) + + ((q >>> 8) & 0xff00) + + ((q & 0xff00) << 8) + + ((q & 0xff) << 24)); +} + + +function InflateState() { + this.mode = 0; /* current inflate mode */ + this.last = false; /* true if processing last block */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.havedict = false; /* true if dictionary provided */ + this.flags = 0; /* gzip header method and flags (0 if zlib) */ + this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ + this.check = 0; /* protected copy of check value */ + this.total = 0; /* protected copy of output count */ + // TODO: may be {} + this.head = null; /* where to save gzip header information */ + + /* sliding window */ + this.wbits = 0; /* log base 2 of requested window size */ + this.wsize = 0; /* window size or zero if not using window */ + this.whave = 0; /* valid bytes in the window */ + this.wnext = 0; /* window write index */ + this.window = null; /* allocated sliding window, if needed */ + + /* bit accumulator */ + this.hold = 0; /* input bit accumulator */ + this.bits = 0; /* number of bits in "in" */ + + /* for string and stored block copying */ + this.length = 0; /* literal or length of data to copy */ + this.offset = 0; /* distance back to copy string from */ + + /* for table and code decoding */ + this.extra = 0; /* extra bits needed */ + + /* fixed and dynamic code tables */ + this.lencode = null; /* starting table for length/literal codes */ + this.distcode = null; /* starting table for distance codes */ + this.lenbits = 0; /* index bits for lencode */ + this.distbits = 0; /* index bits for distcode */ + + /* dynamic table building */ + this.ncode = 0; /* number of code length code lengths */ + this.nlen = 0; /* number of length code lengths */ + this.ndist = 0; /* number of distance code lengths */ + this.have = 0; /* number of code lengths in lens[] */ + this.next = null; /* next available space in codes[] */ + + this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ + this.work = new utils.Buf16(288); /* work area for code table building */ + + /* + because we don't have pointers in js, we use lencode and distcode directly + as buffers so we don't need codes + */ + //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ + this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ + this.distdyn = null; /* dynamic table for distance codes (JS specific) */ + this.sane = 0; /* if false, allow invalid distance too far */ + this.back = 0; /* bits back of last unprocessed length/lit */ + this.was = 0; /* initial length of match */ +} + +function inflateResetKeep(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ''; /*Z_NULL*/ + if (state.wrap) { /* to support ill-conceived Java test suite */ + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null/*Z_NULL*/; + state.hold = 0; + state.bits = 0; + //state.lencode = state.distcode = state.next = state.codes; + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + + state.sane = 1; + state.back = -1; + //Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +function inflateReset(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + +} + +function inflateReset2(strm, windowBits) { + var wrap; + var state; + + /* get the state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + + /* update state and reset the rest of it */ + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); +} + +function inflateInit2(strm, windowBits) { + var ret; + var state; + + if (!strm) { return Z_STREAM_ERROR; } + //strm.msg = Z_NULL; /* in case we return an error */ + + state = new InflateState(); + + //if (state === Z_NULL) return Z_MEM_ERROR; + //Tracev((stderr, "inflate: allocated\n")); + strm.state = state; + state.window = null/*Z_NULL*/; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null/*Z_NULL*/; + } + return ret; +} + +function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); +} + + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +var virgin = true; + +var lenfix, distfix; // We have no pointers in JS, so keep tables separate + +function fixedtables(state) { + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + var sym; + + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + + /* literal/length table */ + sym = 0; + while (sym < 144) { state.lens[sym++] = 8; } + while (sym < 256) { state.lens[sym++] = 9; } + while (sym < 280) { state.lens[sym++] = 7; } + while (sym < 288) { state.lens[sym++] = 8; } + + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); + + /* distance table */ + sym = 0; + while (sym < 32) { state.lens[sym++] = 5; } + + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); + + /* do this just once */ + virgin = false; + } + + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; +} + + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + + /* if it hasn't been done already, allocate space for the window */ + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + + state.window = new utils.Buf8(state.wsize); + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } + else { + dist = state.wsize - state.wnext; + if (dist > copy) { + dist = copy; + } + //zmemcpy(state->window + state->wnext, end - copy, dist); + utils.arraySet(state.window, src, end - copy, dist, state.wnext); + copy -= dist; + if (copy) { + //zmemcpy(state->window, end - copy, copy); + utils.arraySet(state.window, src, end - copy, copy, 0); + state.wnext = copy; + state.whave = state.wsize; + } + else { + state.wnext += dist; + if (state.wnext === state.wsize) { state.wnext = 0; } + if (state.whave < state.wsize) { state.whave += dist; } + } + } + return 0; +} + +function inflate(strm, flush) { + var state; + var input, output; // input/output buffers + var next; /* next input INDEX */ + var put; /* next output INDEX */ + var have, left; /* available input and output */ + var hold; /* bit buffer */ + var bits; /* bits in bit buffer */ + var _in, _out; /* save starting available input and output */ + var copy; /* number of stored or match bytes to copy */ + var from; /* where to copy match bytes from */ + var from_source; + var here = 0; /* current decoding table entry */ + var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) + //var last; /* parent table entry */ + var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) + var len; /* length to copy for repeats, bits to drop */ + var ret; /* return code */ + var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ + var opts; + + var n; // temporary var for NEED_BITS + + var order = /* permutation of code lengths */ + [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; + + + if (!strm || !strm.state || !strm.output || + (!strm.input && strm.avail_in !== 0)) { + return Z_STREAM_ERROR; + } + + state = strm.state; + if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ + + + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + _in = have; + _out = left; + ret = Z_OK; + + inf_leave: // goto emulation + for (;;) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + //=== NEEDBITS(16); + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ + state.check = 0/*crc32(0L, Z_NULL, 0)*/; + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = FLAGS; + break; + } + state.flags = 0; /* expect zlib header */ + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || /* check if zlib header allowed */ + (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { + strm.msg = 'incorrect header check'; + state.mode = BAD; + break; + } + if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// + len = (hold & 0x0f)/*BITS(4)*/ + 8; + if (state.wbits === 0) { + state.wbits = len; + } + else if (len > state.wbits) { + strm.msg = 'invalid window size'; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + //Tracev((stderr, "inflate: zlib header ok\n")); + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = hold & 0x200 ? DICTID : TYPE; + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + break; + case FLAGS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.flags = hold; + if ((state.flags & 0xff) !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + if (state.flags & 0xe000) { + strm.msg = 'unknown header flags set'; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = ((hold >> 8) & 1); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = TIME; + /* falls through */ + case TIME: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.time = hold; + } + if (state.flags & 0x0200) { + //=== CRC4(state.check, hold) + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + hbuf[2] = (hold >>> 16) & 0xff; + hbuf[3] = (hold >>> 24) & 0xff; + state.check = crc32(state.check, hbuf, 4, 0); + //=== + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = OS; + /* falls through */ + case OS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.xflags = (hold & 0xff); + state.head.os = (hold >> 8); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = EXLEN; + /* falls through */ + case EXLEN: + if (state.flags & 0x0400) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + else if (state.head) { + state.head.extra = null/*Z_NULL*/; + } + state.mode = EXTRA; + /* falls through */ + case EXTRA: + if (state.flags & 0x0400) { + copy = state.length; + if (copy > have) { copy = have; } + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + // Use untyped array for more conveniend processing later + state.head.extra = new Array(state.head.extra_len); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + //zmemcpy(state.head.extra + len, next, + // len + copy > state.head.extra_max ? + // state.head.extra_max - len : copy); + } + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + state.length -= copy; + } + if (state.length) { break inf_leave; } + } + state.length = 0; + state.mode = NAME; + /* falls through */ + case NAME: + if (state.flags & 0x0800) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + // TODO: 2 or 1 bytes? + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.name_max*/)) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + /* falls through */ + case COMMENT: + if (state.flags & 0x1000) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.comm_max*/)) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + /* falls through */ + case HCRC: + if (state.flags & 0x0200) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.check & 0xffff)) { + strm.msg = 'header crc mismatch'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + if (state.head) { + state.head.hcrc = ((state.flags >> 9) & 1); + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + strm.adler = state.check = zswap32(hold); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = DICT; + /* falls through */ + case DICT: + if (state.havedict === 0) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + return Z_NEED_DICT; + } + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = TYPE; + /* falls through */ + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } + /* falls through */ + case TYPEDO: + if (state.last) { + //--- BYTEBITS() ---// + hold >>>= bits & 7; + bits -= bits & 7; + //---// + state.mode = CHECK; + break; + } + //=== NEEDBITS(3); */ + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.last = (hold & 0x01)/*BITS(1)*/; + //--- DROPBITS(1) ---// + hold >>>= 1; + bits -= 1; + //---// + + switch ((hold & 0x03)/*BITS(2)*/) { + case 0: /* stored block */ + //Tracev((stderr, "inflate: stored block%s\n", + // state.last ? " (last)" : "")); + state.mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + //Tracev((stderr, "inflate: fixed codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = LEN_; /* decode codes */ + if (flush === Z_TREES) { + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break inf_leave; + } + break; + case 2: /* dynamic block */ + //Tracev((stderr, "inflate: dynamic codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = TABLE; + break; + case 3: + strm.msg = 'invalid block type'; + state.mode = BAD; + } + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break; + case STORED: + //--- BYTEBITS() ---// /* go to byte boundary */ + hold >>>= bits & 7; + bits -= bits & 7; + //---// + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { + strm.msg = 'invalid stored block lengths'; + state.mode = BAD; + break; + } + state.length = hold & 0xffff; + //Tracev((stderr, "inflate: stored length %u\n", + // state.length)); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = COPY_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case COPY_: + state.mode = COPY; + /* falls through */ + case COPY: + copy = state.length; + if (copy) { + if (copy > have) { copy = have; } + if (copy > left) { copy = left; } + if (copy === 0) { break inf_leave; } + //--- zmemcpy(put, next, copy); --- + utils.arraySet(output, input, next, copy, put); + //---// + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + //Tracev((stderr, "inflate: stored end\n")); + state.mode = TYPE; + break; + case TABLE: + //=== NEEDBITS(14); */ + while (bits < 14) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// +//#ifndef PKZIP_BUG_WORKAROUND + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = 'too many length or distance symbols'; + state.mode = BAD; + break; + } +//#endif + //Tracev((stderr, "inflate: table sizes ok\n")); + state.have = 0; + state.mode = LENLENS; + /* falls through */ + case LENLENS: + while (state.have < state.ncode) { + //=== NEEDBITS(3); + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + // We have separate tables & no pointers. 2 commented lines below not needed. + //state.next = state.codes; + //state.lencode = state.next; + // Switch to use dynamic table + state.lencode = state.lendyn; + state.lenbits = 7; + + opts = { bits: state.lenbits }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + + if (ret) { + strm.msg = 'invalid code lengths set'; + state.mode = BAD; + break; + } + //Tracev((stderr, "inflate: code lengths ok\n")); + state.have = 0; + state.mode = CODELENS; + /* falls through */ + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_val < 16) { + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.lens[state.have++] = here_val; + } + else { + if (here_val === 16) { + //=== NEEDBITS(here.bits + 2); + n = here_bits + 2; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + if (state.have === 0) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy = 3 + (hold & 0x03);//BITS(2); + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + } + else if (here_val === 17) { + //=== NEEDBITS(here.bits + 3); + n = here_bits + 3; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 3 + (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + else { + //=== NEEDBITS(here.bits + 7); + n = here_bits + 7; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 11 + (hold & 0x7f);//BITS(7); + //--- DROPBITS(7) ---// + hold >>>= 7; + bits -= 7; + //---// + } + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + while (copy--) { + state.lens[state.have++] = len; + } + } + } + + /* handle error breaks in while */ + if (state.mode === BAD) { break; } + + /* check for end-of-block code (better have one) */ + if (state.lens[256] === 0) { + strm.msg = 'invalid code -- missing end-of-block'; + state.mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state.lenbits = 9; + + opts = { bits: state.lenbits }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.lenbits = opts.bits; + // state.lencode = state.next; + + if (ret) { + strm.msg = 'invalid literal/lengths set'; + state.mode = BAD; + break; + } + + state.distbits = 6; + //state.distcode.copy(state.codes); + // Switch to use dynamic table + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.distbits = opts.bits; + // state.distcode = state.next; + + if (ret) { + strm.msg = 'invalid distances set'; + state.mode = BAD; + break; + } + //Tracev((stderr, 'inflate: codes ok\n')); + state.mode = LEN_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case LEN_: + state.mode = LEN; + /* falls through */ + case LEN: + if (have >= 6 && left >= 258) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + inflate_fast(strm, _out); + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_op && (here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.lencode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + state.mode = LIT; + break; + } + if (here_op & 32) { + //Tracevv((stderr, "inflate: end of block\n")); + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + /* falls through */ + case LENEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } + //Tracevv((stderr, "inflate: length %u\n", state.length)); + state.was = state.length; + state.mode = DIST; + /* falls through */ + case DIST: + for (;;) { + here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if ((here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.distcode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + if (here_op & 64) { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = (here_op) & 15; + state.mode = DISTEXT; + /* falls through */ + case DISTEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } +//#ifdef INFLATE_STRICT + if (state.offset > state.dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +//#endif + //Tracevv((stderr, "inflate: distance %u\n", state.offset)); + state.mode = MATCH; + /* falls through */ + case MATCH: + if (left === 0) { break inf_leave; } + copy = _out - left; + if (state.offset > copy) { /* copy from window */ + copy = state.offset - copy; + if (copy > state.whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// Trace((stderr, "inflate.c too far\n")); +// copy -= state.whave; +// if (copy > state.length) { copy = state.length; } +// if (copy > left) { copy = left; } +// left -= copy; +// state.length -= copy; +// do { +// output[put++] = 0; +// } while (--copy); +// if (state.length === 0) { state.mode = LEN; } +// break; +//#endif + } + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } + else { + from = state.wnext - copy; + } + if (copy > state.length) { copy = state.length; } + from_source = state.window; + } + else { /* copy from output */ + from_source = output; + from = put - state.offset; + copy = state.length; + } + if (copy > left) { copy = left; } + left -= copy; + state.length -= copy; + do { + output[put++] = from_source[from++]; + } while (--copy); + if (state.length === 0) { state.mode = LEN; } + break; + case LIT: + if (left === 0) { break inf_leave; } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + // Use '|' insdead of '+' to make sure that result is signed + hold |= input[next++] << bits; + bits += 8; + } + //===// + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = + /*UPDATE(state.check, put - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); + + } + _out = left; + // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = 'incorrect data check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: check matches trailer\n")); + } + state.mode = LENGTH; + /* falls through */ + case LENGTH: + if (state.wrap && state.flags) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.total & 0xffffffff)) { + strm.msg = 'incorrect length check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: length matches trailer\n")); + } + state.mode = DONE; + /* falls through */ + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* falls through */ + default: + return Z_STREAM_ERROR; + } + } + + // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + + if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && + (state.mode < CHECK || flush !== Z_FINISH))) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + + (state.mode === TYPE ? 128 : 0) + + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; +} + +function inflateEnd(strm) { + + if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { + return Z_STREAM_ERROR; + } + + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; +} + +function inflateGetHeader(strm, head) { + var state; + + /* check state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } + + /* save header structure */ + state.head = head; + head.done = false; + return Z_OK; +} + +function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var state; + var dictid; + var ret; + + /* check state */ + if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } + state = strm.state; + + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + + /* check for correct dictionary identifier */ + if (state.mode === DICT) { + dictid = 1; /* adler32(0, null, 0)*/ + /* dictid = adler32(dictid, dictionary, dictLength); */ + dictid = adler32(dictid, dictionary, dictLength, 0); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow(strm, dictionary, dictLength, dictLength); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + // Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +exports.inflateReset = inflateReset; +exports.inflateReset2 = inflateReset2; +exports.inflateResetKeep = inflateResetKeep; +exports.inflateInit = inflateInit; +exports.inflateInit2 = inflateInit2; +exports.inflate = inflate; +exports.inflateEnd = inflateEnd; +exports.inflateGetHeader = inflateGetHeader; +exports.inflateSetDictionary = inflateSetDictionary; +exports.inflateInfo = 'pako inflate (from Nodeca project)'; + +/* Not implemented +exports.inflateCopy = inflateCopy; +exports.inflateGetDictionary = inflateGetDictionary; +exports.inflateMark = inflateMark; +exports.inflatePrime = inflatePrime; +exports.inflateSync = inflateSync; +exports.inflateSyncPoint = inflateSyncPoint; +exports.inflateUndermine = inflateUndermine; +*/ diff --git a/node_modules/pako/lib/zlib/inftrees.js b/node_modules/pako/lib/zlib/inftrees.js new file mode 100644 index 0000000..16e4d52 --- /dev/null +++ b/node_modules/pako/lib/zlib/inftrees.js @@ -0,0 +1,327 @@ +'use strict'; + + +var utils = require('../utils/common'); + +var MAXBITS = 15; +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +var lbase = [ /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 +]; + +var lext = [ /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 +]; + +var dbase = [ /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0 +]; + +var dext = [ /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64 +]; + +module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) +{ + var bits = opts.bits; + //here = opts.here; /* table entry for duplication */ + + var len = 0; /* a code's length in bits */ + var sym = 0; /* index of code symbols */ + var min = 0, max = 0; /* minimum and maximum code lengths */ + var root = 0; /* number of index bits for root table */ + var curr = 0; /* number of index bits for current table */ + var drop = 0; /* code bits to drop for sub-table */ + var left = 0; /* number of prefix codes available */ + var used = 0; /* code entries in table used */ + var huff = 0; /* Huffman code */ + var incr; /* for incrementing code, index */ + var fill; /* index for replicating entries */ + var low; /* low bits for current root entry */ + var mask; /* mask for low root bits */ + var next; /* next available space in table */ + var base = null; /* base value table to use */ + var base_index = 0; +// var shoextra; /* extra bits table to use */ + var end; /* use base and extra for symbol > end */ + var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ + var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ + var extra = null; + var extra_index = 0; + + var here_bits, here_op, here_val; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + + /* bound code lengths, force root to be within code lengths */ + root = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { break; } + } + if (root > max) { + root = max; + } + if (max === 0) { /* no symbols to code at all */ + //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ + //table.bits[opts.table_index] = 1; //here.bits = (var char)1; + //table.val[opts.table_index++] = 0; //here.val = (var short)0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + + //table.op[opts.table_index] = 64; + //table.bits[opts.table_index] = 1; + //table.val[opts.table_index++] = 0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + opts.bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { break; } + } + if (root < min) { + root = min; + } + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } /* over-subscribed */ + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; /* incomplete set */ + } + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + // poor man optimization - use if-else instead of switch, + // to avoid deopts in old v8 + if (type === CODES) { + base = extra = work; /* dummy value--not used */ + end = 19; + + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + + } else { /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize opts for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = table_index; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = -1; /* trigger new sub-table when len > root */ + used = 1 << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + var i = 0; + /* process all codes and make table entries */ + for (;;) { + i++; + /* create table entry */ + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } + else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } + else { + here_op = 32 + 64; /* end of block */ + here_val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1 << (len - drop); + fill = 1 << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; + } while (fill !== 0); + + /* backwards increment the len-bit code huff */ + incr = 1 << (len - 1); + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + + /* go to next symbol, update count, len */ + sym++; + if (--count[len] === 0) { + if (len === max) { break; } + len = lens[lens_index + work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) !== low) { + /* if first time, transition to sub-tables */ + if (drop === 0) { + drop = root; + } + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { break; } + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1 << curr; + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + /* point entry in root table to sub-table */ + low = huff & mask; + /*table.op[low] = curr; + table.bits[low] = root; + table.val[low] = next - opts.table_index;*/ + table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff !== 0) { + //table.op[next + huff] = 64; /* invalid code marker */ + //table.bits[next + huff] = len - drop; + //table.val[next + huff] = 0; + table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; + } + + /* set return parameters */ + //opts.table_index += used; + opts.bits = root; + return 0; +}; diff --git a/node_modules/pako/lib/zlib/messages.js b/node_modules/pako/lib/zlib/messages.js new file mode 100644 index 0000000..d022f0f --- /dev/null +++ b/node_modules/pako/lib/zlib/messages.js @@ -0,0 +1,13 @@ +'use strict'; + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; diff --git a/node_modules/pako/lib/zlib/trees.js b/node_modules/pako/lib/zlib/trees.js new file mode 100644 index 0000000..cef5f15 --- /dev/null +++ b/node_modules/pako/lib/zlib/trees.js @@ -0,0 +1,1202 @@ +'use strict'; + + +var utils = require('../utils/common'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; +var Z_FIXED = 4; +//var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +var Z_BINARY = 0; +var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + +/*============================================================================*/ + + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +// From zutil.h + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ + +// From deflate.h +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ +var extra_lbits = /* extra bits for each length code */ + [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; + +var extra_dbits = /* extra bits for each distance code */ + [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; + +var extra_blbits = /* extra bits for each bit length code */ + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; + +var bl_order = + [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ + +// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1 +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + + this.static_tree = static_tree; /* static tree or NULL */ + this.extra_bits = extra_bits; /* extra bits for each code or NULL */ + this.extra_base = extra_base; /* base index for extra_bits */ + this.elems = elems; /* max number of elements in the tree */ + this.max_length = max_length; /* max bit length for the codes */ + + // show if `static_tree` has data or dummy - needed for monomorphic objects + this.has_stree = static_tree && static_tree.length; +} + + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; /* the dynamic tree */ + this.max_code = 0; /* largest code with non zero frequency */ + this.stat_desc = stat_desc; /* the corresponding static tree */ +} + + + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +function put_short(s, w) { +// put_byte(s, (uch)((w) & 0xff)); +// put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = (w) & 0xff; + s.pending_buf[s.pending++] = (w >>> 8) & 0xff; +} + + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +function send_bits(s, value, length) { + if (s.bi_valid > (Buf_size - length)) { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> (Buf_size - s.bi_valid); + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + s.bi_valid += length; + } +} + + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); +} + + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; +} + + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} + + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +function gen_bitlen(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; /* heap index */ + var n, m; /* iterate over the tree elements */ + var bits; /* bit length */ + var xbits; /* extra bits */ + var f; /* frequency */ + var overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1]/*.Len*/ = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { continue; } /* not a leaf node */ + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]/*.Freq*/; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); + } + } + if (overflow === 0) { return; } + + // Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { bits--; } + s.bl_count[bits]--; /* move one leaf down the tree */ + s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { continue; } + if (tree[m * 2 + 1]/*.Len*/ !== bits) { + // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; + tree[m * 2 + 1]/*.Len*/ = bits; + } + n--; + } + } +} + + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +function gen_codes(tree, max_code, bl_count) +// ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ + var code = 0; /* running code value */ + var bits; /* bit index */ + var n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits - 1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = code; + } + } + //Assert (length == 256, "tr_static_init: length != 256"); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: dist != 256"); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1]/*.Len*/ = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1]/*.Len*/ = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes(static_ltree, L_CODES + 1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1]/*.Len*/ = 5; + static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); + } + + // Now data ready and we can init static trees + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + //static_init_done = true; +} + + +/* =========================================================================== + * Initialize a new block. + */ +function init_block(s) { + var n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } + + s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} + + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +function bi_windup(s) +{ + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +function copy_block(s, buf, len, header) +//DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } +// while (len--) { +// put_byte(s, *buf++); +// } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || + (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); +} + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +function pqdownheap(s, tree, k) +// deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; /* left son of k */ + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && + smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s.heap[j], s.depth)) { break; } + + /* Exchange v with the smallest son */ + s.heap[k] = s.heap[j]; + k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s.heap[k] = v; +} + + +// inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +function compress_block(s, ltree, dtree) +// deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; /* distance of matched string */ + var lc; /* match length or unmatched char (if dist == 0) */ + var lx = 0; /* running index in l_buf */ + var code; /* the code to send */ + var extra; /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + //Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // "pendingBuf overflow"); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} + + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +function build_tree(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; /* iterate over heap elements */ + var max_code = -1; /* largest code with non zero frequency */ + var node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2]/*.Freq*/ !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + + } else { + tree[n * 2 + 1]/*.Len*/ = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); + tree[node * 2]/*.Freq*/ = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1]/*.Len*/; + } + /* node is 0 or 1 so it does not have extra bits */ + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + /*** pqremove ***/ + n = s.heap[1/*SMALLEST*/]; + s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1/*SMALLEST*/); + /***/ + + m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ + s.heap[--s.heap_max] = m; + + /* Create a new node father of n and m */ + tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; + + /* and insert the new node in the heap */ + s.heap[1/*SMALLEST*/] = node++; + pqdownheap(s, tree, 1/*SMALLEST*/); + + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes(tree, max_code, s.bl_count); +} + + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +function scan_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + s.bl_tree[curlen * 2]/*.Freq*/ += count; + + } else if (curlen !== 0) { + + if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } + s.bl_tree[REP_3_6 * 2]/*.Freq*/++; + + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; + + } else { + s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +function send_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); + + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + //Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +function build_bl_tree(s) { + var max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + // s->opt_len, s->static_len)); + + return max_blindex; +} + + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +function send_all_trees(s, lcodes, dcodes, blcodes) +// deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; /* index in bl_order */ + + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // "too many codes"); + //Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); + } + //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ + //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ + //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { + return Z_BINARY; + } + } + + /* Check for textual ("white-listed") bytes. */ + if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || + s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + } + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + + +var static_init_done = false; + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +function _tr_init(s) +{ + + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + + s.bi_buf = 0; + s.bi_valid = 0; + + /* Initialize the first block of the first file: */ + init_block(s); +} + + +/* =========================================================================== + * Send a stored block + */ +function _tr_stored_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ + copy_block(s, buf, stored_len, true); /* with header */ +} + + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} + + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +function _tr_flush_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + var max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s.level > 0) { + + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + + /* Construct the literal and distance trees */ + build_tree(s, s.l_desc); + // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); + // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s.opt_len + 3 + 7) >>> 3; + static_lenb = (s.static_len + 3 + 7) >>> 3; + + // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } + + } else { + // Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + + if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); + } + // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + // s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +function _tr_tally(s, dist, lc) +// deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + + s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + /* lc is the unmatched char */ + s.dyn_ltree[lc * 2]/*.Freq*/++; + } else { + s.matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + //Assert((ush)dist < (ush)MAX_DIST(s) && + // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; + } + +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility + +//#ifdef TRUNCATE_BLOCK +// /* Try to guess if it is profitable to stop the current block here */ +// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { +// /* Compute an upper bound for the compressed length */ +// out_length = s.last_lit*8; +// in_length = s.strstart - s.block_start; +// +// for (dcode = 0; dcode < D_CODES; dcode++) { +// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); +// } +// out_length >>>= 3; +// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", +// // s->last_lit, in_length, out_length, +// // 100L - out_length*100L/in_length)); +// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { +// return true; +// } +// } +//#endif + + return (s.last_lit === s.lit_bufsize - 1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; diff --git a/node_modules/pako/lib/zlib/zstream.js b/node_modules/pako/lib/zlib/zstream.js new file mode 100644 index 0000000..2d93a39 --- /dev/null +++ b/node_modules/pako/lib/zlib/zstream.js @@ -0,0 +1,29 @@ +'use strict'; + + +function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + this.next_in = 0; + /* number of bytes available at input */ + this.avail_in = 0; + /* total number of input bytes read so far */ + this.total_in = 0; + /* next output byte should be put there */ + this.output = null; // JS specific, because we have no pointers + this.next_out = 0; + /* remaining free space at output */ + this.avail_out = 0; + /* total number of bytes output so far */ + this.total_out = 0; + /* last error message, NULL if no error */ + this.msg = ''/*Z_NULL*/; + /* not visible by applications */ + this.state = null; + /* best guess about the data type: binary or text */ + this.data_type = 2/*Z_UNKNOWN*/; + /* adler32 value of the uncompressed data */ + this.adler = 0; +} + +module.exports = ZStream; diff --git a/node_modules/pako/package.json b/node_modules/pako/package.json new file mode 100644 index 0000000..1978fb6 --- /dev/null +++ b/node_modules/pako/package.json @@ -0,0 +1,114 @@ +{ + "_args": [ + [ + { + "raw": "pako@^0.2.8", + "scope": null, + "escapedName": "pako", + "name": "pako", + "rawSpec": "^0.2.8", + "spec": ">=0.2.8 <0.3.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/discordie" + ] + ], + "_from": "pako@>=0.2.8 <0.3.0", + "_id": "pako@0.2.9", + "_inCache": true, + "_location": "/pako", + "_nodeVersion": "4.4.5", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/pako-0.2.9.tgz_1469133699053_0.013920168625190854" + }, + "_npmUser": { + "name": "vitaly", + "email": "vitaly@rcdesign.ru" + }, + "_npmVersion": "2.15.5", + "_phantomChildren": {}, + "_requested": { + "raw": "pako@^0.2.8", + "scope": null, + "escapedName": "pako", + "name": "pako", + "rawSpec": "^0.2.8", + "spec": ">=0.2.8 <0.3.0", + "type": "range" + }, + "_requiredBy": [ + "/discordie" + ], + "_resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "_shasum": "f3f7522f4ef782348da8161bad9ecfd51bf83a75", + "_shrinkwrap": null, + "_spec": "pako@^0.2.8", + "_where": "/home/burchettm/statsbot/node_modules/discordie", + "bugs": { + "url": "https://github.com/nodeca/pako/issues" + }, + "contributors": [ + { + "name": "Andrei Tuputcyn", + "url": "https://github.com/andr83" + }, + { + "name": "Vitaly Puzrin", + "url": "https://github.com/puzrin" + } + ], + "dependencies": {}, + "description": "zlib port to javascript - fast, modularized, with browser support", + "devDependencies": { + "ansi": "*", + "async": "*", + "benchmark": "*", + "browserify": "*", + "eslint": "^2.1.0", + "eslint-plugin-nodeca": "~1.0.3", + "grunt": "~0.4.4", + "grunt-cli": "~0.1.13", + "grunt-contrib-connect": "~0.9.0", + "grunt-saucelabs": "~8.6.0", + "istanbul": "*", + "lodash": "*", + "mocha": "1.21.5", + "ndoc": "*", + "uglify-js": "*" + }, + "directories": {}, + "dist": { + "shasum": "f3f7522f4ef782348da8161bad9ecfd51bf83a75", + "tarball": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz" + }, + "files": [ + "index.js", + "dist/", + "lib/" + ], + "gitHead": "85d145e616967f3720382f416da530c23c02ad13", + "homepage": "https://github.com/nodeca/pako", + "keywords": [ + "zlib", + "deflate", + "inflate", + "gzip" + ], + "license": "MIT", + "maintainers": [ + { + "name": "vitaly", + "email": "vitaly@rcdesign.ru" + } + ], + "name": "pako", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/nodeca/pako.git" + }, + "scripts": {}, + "version": "0.2.9" +} diff --git a/node_modules/parse-json/index.js b/node_modules/parse-json/index.js new file mode 100644 index 0000000..04add8a --- /dev/null +++ b/node_modules/parse-json/index.js @@ -0,0 +1,35 @@ +'use strict'; +var errorEx = require('error-ex'); +var fallback = require('./vendor/parse'); + +var JSONError = errorEx('JSONError', { + fileName: errorEx.append('in %s') +}); + +module.exports = function (x, reviver, filename) { + if (typeof reviver === 'string') { + filename = reviver; + reviver = null; + } + + try { + try { + return JSON.parse(x, reviver); + } catch (err) { + fallback.parse(x, { + mode: 'json', + reviver: reviver + }); + + throw err; + } + } catch (err) { + var jsonErr = new JSONError(err); + + if (filename) { + jsonErr.fileName = filename; + } + + throw jsonErr; + } +}; diff --git a/node_modules/parse-json/license b/node_modules/parse-json/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/parse-json/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/parse-json/package.json b/node_modules/parse-json/package.json new file mode 100644 index 0000000..40fdac0 --- /dev/null +++ b/node_modules/parse-json/package.json @@ -0,0 +1,109 @@ +{ + "_args": [ + [ + { + "raw": "parse-json@^2.2.0", + "scope": null, + "escapedName": "parse-json", + "name": "parse-json", + "rawSpec": "^2.2.0", + "spec": ">=2.2.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/load-json-file" + ] + ], + "_from": "parse-json@>=2.2.0 <3.0.0", + "_id": "parse-json@2.2.0", + "_inCache": true, + "_location": "/parse-json", + "_nodeVersion": "0.12.7", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.11.3", + "_phantomChildren": {}, + "_requested": { + "raw": "parse-json@^2.2.0", + "scope": null, + "escapedName": "parse-json", + "name": "parse-json", + "rawSpec": "^2.2.0", + "spec": ">=2.2.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/load-json-file" + ], + "_resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "_shasum": "f480f40434ef80741f8469099f8dea18f55a4dc9", + "_shrinkwrap": null, + "_spec": "parse-json@^2.2.0", + "_where": "/home/burchettm/statsbot/node_modules/load-json-file", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/parse-json/issues" + }, + "dependencies": { + "error-ex": "^1.2.0" + }, + "description": "Parse JSON with more helpful errors", + "devDependencies": { + "ava": "0.0.4", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "f480f40434ef80741f8469099f8dea18f55a4dc9", + "tarball": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js", + "vendor" + ], + "gitHead": "419b0cbb83e67af53f9fd3f7ff98605ea2020eb6", + "homepage": "https://github.com/sindresorhus/parse-json", + "keywords": [ + "parse", + "json", + "graceful", + "error", + "message", + "humanize", + "friendly", + "helpful", + "string", + "str" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "parse-json", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/parse-json.git" + }, + "scripts": { + "test": "xo && node test.js" + }, + "version": "2.2.0", + "xo": { + "ignores": [ + "vendor/**" + ] + } +} diff --git a/node_modules/parse-json/readme.md b/node_modules/parse-json/readme.md new file mode 100644 index 0000000..ca96e60 --- /dev/null +++ b/node_modules/parse-json/readme.md @@ -0,0 +1,83 @@ +# parse-json [![Build Status](https://travis-ci.org/sindresorhus/parse-json.svg?branch=master)](https://travis-ci.org/sindresorhus/parse-json) + +> Parse JSON with more helpful errors + + +## Install + +``` +$ npm install --save parse-json +``` + + +## Usage + +```js +var parseJson = require('parse-json'); +var json = '{\n\t"foo": true,\n}'; + + +JSON.parse(json); +/* +undefined:3 +} +^ +SyntaxError: Unexpected token } +*/ + + +parseJson(json); +/* +JSONError: Trailing comma in object at 3:1 +} +^ +*/ + + +parseJson(json, 'foo.json'); +/* +JSONError: Trailing comma in object at 3:1 in foo.json +} +^ +*/ + + +// you can also add the filename at a later point +try { + parseJson(json); +} catch (err) { + err.fileName = 'foo.json'; + throw err; +} +/* +JSONError: Trailing comma in object at 3:1 in foo.json +} +^ +*/ +``` + +## API + +### parseJson(input, [reviver], [filename]) + +#### input + +Type: `string` + +#### reviver + +Type: `function` + +Prescribes how the value originally produced by parsing is transformed, before being returned. See [`JSON.parse` docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter +) for more. + +#### filename + +Type: `string` + +Filename displayed in the error message. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/parse-json/vendor/parse.js b/node_modules/parse-json/vendor/parse.js new file mode 100644 index 0000000..5f9fe99 --- /dev/null +++ b/node_modules/parse-json/vendor/parse.js @@ -0,0 +1,752 @@ +/* + * Author: Alex Kocharin + * GIT: https://github.com/rlidwka/jju + * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/ + */ + +// RTFM: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf + +var Uni = require('./unicode') + +function isHexDigit(x) { + return (x >= '0' && x <= '9') + || (x >= 'A' && x <= 'F') + || (x >= 'a' && x <= 'f') +} + +function isOctDigit(x) { + return x >= '0' && x <= '7' +} + +function isDecDigit(x) { + return x >= '0' && x <= '9' +} + +var unescapeMap = { + '\'': '\'', + '"' : '"', + '\\': '\\', + 'b' : '\b', + 'f' : '\f', + 'n' : '\n', + 'r' : '\r', + 't' : '\t', + 'v' : '\v', + '/' : '/', +} + +function formatError(input, msg, position, lineno, column, json5) { + var result = msg + ' at ' + (lineno + 1) + ':' + (column + 1) + , tmppos = position - column - 1 + , srcline = '' + , underline = '' + + var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON + + // output no more than 70 characters before the wrong ones + if (tmppos < position - 70) { + tmppos = position - 70 + } + + while (1) { + var chr = input[++tmppos] + + if (isLineTerminator(chr) || tmppos === input.length) { + if (position >= tmppos) { + // ending line error, so show it after the last char + underline += '^' + } + break + } + srcline += chr + + if (position === tmppos) { + underline += '^' + } else if (position > tmppos) { + underline += input[tmppos] === '\t' ? '\t' : ' ' + } + + // output no more than 78 characters on the string + if (srcline.length > 78) break + } + + return result + '\n' + srcline + '\n' + underline +} + +function parse(input, options) { + // parse as a standard JSON mode + var json5 = !(options.mode === 'json' || options.legacy) + var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON + var isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON + + var length = input.length + , lineno = 0 + , linestart = 0 + , position = 0 + , stack = [] + + var tokenStart = function() {} + var tokenEnd = function(v) {return v} + + /* tokenize({ + raw: '...', + type: 'whitespace'|'comment'|'key'|'literal'|'separator'|'newline', + value: 'number'|'string'|'whatever', + path: [...], + }) + */ + if (options._tokenize) { + ;(function() { + var start = null + tokenStart = function() { + if (start !== null) throw Error('internal error, token overlap') + start = position + } + + tokenEnd = function(v, type) { + if (start != position) { + var hash = { + raw: input.substr(start, position-start), + type: type, + stack: stack.slice(0), + } + if (v !== undefined) hash.value = v + options._tokenize.call(null, hash) + } + start = null + return v + } + })() + } + + function fail(msg) { + var column = position - linestart + + if (!msg) { + if (position < length) { + var token = '\'' + + JSON + .stringify(input[position]) + .replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + + '\'' + + if (!msg) msg = 'Unexpected token ' + token + } else { + if (!msg) msg = 'Unexpected end of input' + } + } + + var error = SyntaxError(formatError(input, msg, position, lineno, column, json5)) + error.row = lineno + 1 + error.column = column + 1 + throw error + } + + function newline(chr) { + // account for + if (chr === '\r' && input[position] === '\n') position++ + linestart = position + lineno++ + } + + function parseGeneric() { + var result + + while (position < length) { + tokenStart() + var chr = input[position++] + + if (chr === '"' || (chr === '\'' && json5)) { + return tokenEnd(parseString(chr), 'literal') + + } else if (chr === '{') { + tokenEnd(undefined, 'separator') + return parseObject() + + } else if (chr === '[') { + tokenEnd(undefined, 'separator') + return parseArray() + + } else if (chr === '-' + || chr === '.' + || isDecDigit(chr) + // + number Infinity NaN + || (json5 && (chr === '+' || chr === 'I' || chr === 'N')) + ) { + return tokenEnd(parseNumber(), 'literal') + + } else if (chr === 'n') { + parseKeyword('null') + return tokenEnd(null, 'literal') + + } else if (chr === 't') { + parseKeyword('true') + return tokenEnd(true, 'literal') + + } else if (chr === 'f') { + parseKeyword('false') + return tokenEnd(false, 'literal') + + } else { + position-- + return tokenEnd(undefined) + } + } + } + + function parseKey() { + var result + + while (position < length) { + tokenStart() + var chr = input[position++] + + if (chr === '"' || (chr === '\'' && json5)) { + return tokenEnd(parseString(chr), 'key') + + } else if (chr === '{') { + tokenEnd(undefined, 'separator') + return parseObject() + + } else if (chr === '[') { + tokenEnd(undefined, 'separator') + return parseArray() + + } else if (chr === '.' + || isDecDigit(chr) + ) { + return tokenEnd(parseNumber(true), 'key') + + } else if (json5 + && Uni.isIdentifierStart(chr) || (chr === '\\' && input[position] === 'u')) { + // unicode char or a unicode sequence + var rollback = position - 1 + var result = parseIdentifier() + + if (result === undefined) { + position = rollback + return tokenEnd(undefined) + } else { + return tokenEnd(result, 'key') + } + + } else { + position-- + return tokenEnd(undefined) + } + } + } + + function skipWhiteSpace() { + tokenStart() + while (position < length) { + var chr = input[position++] + + if (isLineTerminator(chr)) { + position-- + tokenEnd(undefined, 'whitespace') + tokenStart() + position++ + newline(chr) + tokenEnd(undefined, 'newline') + tokenStart() + + } else if (isWhiteSpace(chr)) { + // nothing + + } else if (chr === '/' + && json5 + && (input[position] === '/' || input[position] === '*') + ) { + position-- + tokenEnd(undefined, 'whitespace') + tokenStart() + position++ + skipComment(input[position++] === '*') + tokenEnd(undefined, 'comment') + tokenStart() + + } else { + position-- + break + } + } + return tokenEnd(undefined, 'whitespace') + } + + function skipComment(multi) { + while (position < length) { + var chr = input[position++] + + if (isLineTerminator(chr)) { + // LineTerminator is an end of singleline comment + if (!multi) { + // let parent function deal with newline + position-- + return + } + + newline(chr) + + } else if (chr === '*' && multi) { + // end of multiline comment + if (input[position] === '/') { + position++ + return + } + + } else { + // nothing + } + } + + if (multi) { + fail('Unclosed multiline comment') + } + } + + function parseKeyword(keyword) { + // keyword[0] is not checked because it should've checked earlier + var _pos = position + var len = keyword.length + for (var i=1; i= length || keyword[i] != input[position]) { + position = _pos-1 + fail() + } + position++ + } + } + + function parseObject() { + var result = options.null_prototype ? Object.create(null) : {} + , empty_object = {} + , is_non_empty = false + + while (position < length) { + skipWhiteSpace() + var item1 = parseKey() + skipWhiteSpace() + tokenStart() + var chr = input[position++] + tokenEnd(undefined, 'separator') + + if (chr === '}' && item1 === undefined) { + if (!json5 && is_non_empty) { + position-- + fail('Trailing comma in object') + } + return result + + } else if (chr === ':' && item1 !== undefined) { + skipWhiteSpace() + stack.push(item1) + var item2 = parseGeneric() + stack.pop() + + if (item2 === undefined) fail('No value found for key ' + item1) + if (typeof(item1) !== 'string') { + if (!json5 || typeof(item1) !== 'number') { + fail('Wrong key type: ' + item1) + } + } + + if ((item1 in empty_object || empty_object[item1] != null) && options.reserved_keys !== 'replace') { + if (options.reserved_keys === 'throw') { + fail('Reserved key: ' + item1) + } else { + // silently ignore it + } + } else { + if (typeof(options.reviver) === 'function') { + item2 = options.reviver.call(null, item1, item2) + } + + if (item2 !== undefined) { + is_non_empty = true + Object.defineProperty(result, item1, { + value: item2, + enumerable: true, + configurable: true, + writable: true, + }) + } + } + + skipWhiteSpace() + + tokenStart() + var chr = input[position++] + tokenEnd(undefined, 'separator') + + if (chr === ',') { + continue + + } else if (chr === '}') { + return result + + } else { + fail() + } + + } else { + position-- + fail() + } + } + + fail() + } + + function parseArray() { + var result = [] + + while (position < length) { + skipWhiteSpace() + stack.push(result.length) + var item = parseGeneric() + stack.pop() + skipWhiteSpace() + tokenStart() + var chr = input[position++] + tokenEnd(undefined, 'separator') + + if (item !== undefined) { + if (typeof(options.reviver) === 'function') { + item = options.reviver.call(null, String(result.length), item) + } + if (item === undefined) { + result.length++ + item = true // hack for check below, not included into result + } else { + result.push(item) + } + } + + if (chr === ',') { + if (item === undefined) { + fail('Elisions are not supported') + } + + } else if (chr === ']') { + if (!json5 && item === undefined && result.length) { + position-- + fail('Trailing comma in array') + } + return result + + } else { + position-- + fail() + } + } + } + + function parseNumber() { + // rewind because we don't know first char + position-- + + var start = position + , chr = input[position++] + , t + + var to_num = function(is_octal) { + var str = input.substr(start, position - start) + + if (is_octal) { + var result = parseInt(str.replace(/^0o?/, ''), 8) + } else { + var result = Number(str) + } + + if (Number.isNaN(result)) { + position-- + fail('Bad numeric literal - "' + input.substr(start, position - start + 1) + '"') + } else if (!json5 && !str.match(/^-?(0|[1-9][0-9]*)(\.[0-9]+)?(e[+-]?[0-9]+)?$/i)) { + // additional restrictions imposed by json + position-- + fail('Non-json numeric literal - "' + input.substr(start, position - start + 1) + '"') + } else { + return result + } + } + + // ex: -5982475.249875e+29384 + // ^ skipping this + if (chr === '-' || (chr === '+' && json5)) chr = input[position++] + + if (chr === 'N' && json5) { + parseKeyword('NaN') + return NaN + } + + if (chr === 'I' && json5) { + parseKeyword('Infinity') + + // returning +inf or -inf + return to_num() + } + + if (chr >= '1' && chr <= '9') { + // ex: -5982475.249875e+29384 + // ^^^ skipping these + while (position < length && isDecDigit(input[position])) position++ + chr = input[position++] + } + + // special case for leading zero: 0.123456 + if (chr === '0') { + chr = input[position++] + + // new syntax, "0o777" old syntax, "0777" + var is_octal = chr === 'o' || chr === 'O' || isOctDigit(chr) + var is_hex = chr === 'x' || chr === 'X' + + if (json5 && (is_octal || is_hex)) { + while (position < length + && (is_hex ? isHexDigit : isOctDigit)( input[position] ) + ) position++ + + var sign = 1 + if (input[start] === '-') { + sign = -1 + start++ + } else if (input[start] === '+') { + start++ + } + + return sign * to_num(is_octal) + } + } + + if (chr === '.') { + // ex: -5982475.249875e+29384 + // ^^^ skipping these + while (position < length && isDecDigit(input[position])) position++ + chr = input[position++] + } + + if (chr === 'e' || chr === 'E') { + chr = input[position++] + if (chr === '-' || chr === '+') position++ + // ex: -5982475.249875e+29384 + // ^^^ skipping these + while (position < length && isDecDigit(input[position])) position++ + chr = input[position++] + } + + // we have char in the buffer, so count for it + position-- + return to_num() + } + + function parseIdentifier() { + // rewind because we don't know first char + position-- + + var result = '' + + while (position < length) { + var chr = input[position++] + + if (chr === '\\' + && input[position] === 'u' + && isHexDigit(input[position+1]) + && isHexDigit(input[position+2]) + && isHexDigit(input[position+3]) + && isHexDigit(input[position+4]) + ) { + // UnicodeEscapeSequence + chr = String.fromCharCode(parseInt(input.substr(position+1, 4), 16)) + position += 5 + } + + if (result.length) { + // identifier started + if (Uni.isIdentifierPart(chr)) { + result += chr + } else { + position-- + return result + } + + } else { + if (Uni.isIdentifierStart(chr)) { + result += chr + } else { + return undefined + } + } + } + + fail() + } + + function parseString(endChar) { + // 7.8.4 of ES262 spec + var result = '' + + while (position < length) { + var chr = input[position++] + + if (chr === endChar) { + return result + + } else if (chr === '\\') { + if (position >= length) fail() + chr = input[position++] + + if (unescapeMap[chr] && (json5 || (chr != 'v' && chr != "'"))) { + result += unescapeMap[chr] + + } else if (json5 && isLineTerminator(chr)) { + // line continuation + newline(chr) + + } else if (chr === 'u' || (chr === 'x' && json5)) { + // unicode/character escape sequence + var off = chr === 'u' ? 4 : 2 + + // validation for \uXXXX + for (var i=0; i= length) fail() + if (!isHexDigit(input[position])) fail('Bad escape sequence') + position++ + } + + result += String.fromCharCode(parseInt(input.substr(position-off, off), 16)) + } else if (json5 && isOctDigit(chr)) { + if (chr < '4' && isOctDigit(input[position]) && isOctDigit(input[position+1])) { + // three-digit octal + var digits = 3 + } else if (isOctDigit(input[position])) { + // two-digit octal + var digits = 2 + } else { + var digits = 1 + } + position += digits - 1 + result += String.fromCharCode(parseInt(input.substr(position-digits, digits), 8)) + /*if (!isOctDigit(input[position])) { + // \0 is allowed still + result += '\0' + } else { + fail('Octal literals are not supported') + }*/ + + } else if (json5) { + // \X -> x + result += chr + + } else { + position-- + fail() + } + + } else if (isLineTerminator(chr)) { + fail() + + } else { + if (!json5 && chr.charCodeAt(0) < 32) { + position-- + fail('Unexpected control character') + } + + // SourceCharacter but not one of " or \ or LineTerminator + result += chr + } + } + + fail() + } + + skipWhiteSpace() + var return_value = parseGeneric() + if (return_value !== undefined || position < length) { + skipWhiteSpace() + + if (position >= length) { + if (typeof(options.reviver) === 'function') { + return_value = options.reviver.call(null, '', return_value) + } + return return_value + } else { + fail() + } + + } else { + if (position) { + fail('No data, only a whitespace') + } else { + fail('No data, empty input') + } + } +} + +/* + * parse(text, options) + * or + * parse(text, reviver) + * + * where: + * text - string + * options - object + * reviver - function + */ +module.exports.parse = function parseJSON(input, options) { + // support legacy functions + if (typeof(options) === 'function') { + options = { + reviver: options + } + } + + if (input === undefined) { + // parse(stringify(x)) should be equal x + // with JSON functions it is not 'cause of undefined + // so we're fixing it + return undefined + } + + // JSON.parse compat + if (typeof(input) !== 'string') input = String(input) + if (options == null) options = {} + if (options.reserved_keys == null) options.reserved_keys = 'ignore' + + if (options.reserved_keys === 'throw' || options.reserved_keys === 'ignore') { + if (options.null_prototype == null) { + options.null_prototype = true + } + } + + try { + return parse(input, options) + } catch(err) { + // jju is a recursive parser, so JSON.parse("{{{{{{{") could blow up the stack + // + // this catch is used to skip all those internal calls + if (err instanceof SyntaxError && err.row != null && err.column != null) { + var old_err = err + err = SyntaxError(old_err.message) + err.column = old_err.column + err.row = old_err.row + } + throw err + } +} + +module.exports.tokenize = function tokenizeJSON(input, options) { + if (options == null) options = {} + + options._tokenize = function(smth) { + if (options._addstack) smth.stack.unshift.apply(smth.stack, options._addstack) + tokens.push(smth) + } + + var tokens = [] + tokens.data = module.exports.parse(input, options) + return tokens +} + diff --git a/node_modules/parse-json/vendor/unicode.js b/node_modules/parse-json/vendor/unicode.js new file mode 100644 index 0000000..1a29143 --- /dev/null +++ b/node_modules/parse-json/vendor/unicode.js @@ -0,0 +1,71 @@ + +// This is autogenerated with esprima tools, see: +// https://github.com/ariya/esprima/blob/master/esprima.js +// +// PS: oh God, I hate Unicode + +// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart: + +var Uni = module.exports + +module.exports.isWhiteSpace = function isWhiteSpace(x) { + // section 7.2, table 2 + return x === '\u0020' + || x === '\u00A0' + || x === '\uFEFF' // <-- this is not a Unicode WS, only a JS one + || (x >= '\u0009' && x <= '\u000D') // 9 A B C D + + // + whitespace characters from unicode, category Zs + || x === '\u1680' + || x === '\u180E' + || (x >= '\u2000' && x <= '\u200A') // 0 1 2 3 4 5 6 7 8 9 A + || x === '\u2028' + || x === '\u2029' + || x === '\u202F' + || x === '\u205F' + || x === '\u3000' +} + +module.exports.isWhiteSpaceJSON = function isWhiteSpaceJSON(x) { + return x === '\u0020' + || x === '\u0009' + || x === '\u000A' + || x === '\u000D' +} + +module.exports.isLineTerminator = function isLineTerminator(x) { + // ok, here is the part when JSON is wrong + // section 7.3, table 3 + return x === '\u000A' + || x === '\u000D' + || x === '\u2028' + || x === '\u2029' +} + +module.exports.isLineTerminatorJSON = function isLineTerminatorJSON(x) { + return x === '\u000A' + || x === '\u000D' +} + +module.exports.isIdentifierStart = function isIdentifierStart(x) { + return x === '$' + || x === '_' + || (x >= 'A' && x <= 'Z') + || (x >= 'a' && x <= 'z') + || (x >= '\u0080' && Uni.NonAsciiIdentifierStart.test(x)) +} + +module.exports.isIdentifierPart = function isIdentifierPart(x) { + return x === '$' + || x === '_' + || (x >= 'A' && x <= 'Z') + || (x >= 'a' && x <= 'z') + || (x >= '0' && x <= '9') // <-- addition to Start + || (x >= '\u0080' && Uni.NonAsciiIdentifierPart.test(x)) +} + +module.exports.NonAsciiIdentifierStart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ + +// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart: + +module.exports.NonAsciiIdentifierPart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ diff --git a/node_modules/path-exists/index.js b/node_modules/path-exists/index.js new file mode 100644 index 0000000..a7e680a --- /dev/null +++ b/node_modules/path-exists/index.js @@ -0,0 +1,24 @@ +'use strict'; +var fs = require('fs'); +var Promise = require('pinkie-promise'); + +module.exports = function (fp) { + var fn = typeof fs.access === 'function' ? fs.access : fs.stat; + + return new Promise(function (resolve) { + fn(fp, function (err) { + resolve(!err); + }); + }); +}; + +module.exports.sync = function (fp) { + var fn = typeof fs.accessSync === 'function' ? fs.accessSync : fs.statSync; + + try { + fn(fp); + return true; + } catch (err) { + return false; + } +}; diff --git a/node_modules/path-exists/license b/node_modules/path-exists/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/path-exists/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/path-exists/package.json b/node_modules/path-exists/package.json new file mode 100644 index 0000000..e2ed184 --- /dev/null +++ b/node_modules/path-exists/package.json @@ -0,0 +1,103 @@ +{ + "_args": [ + [ + { + "raw": "path-exists@^2.0.0", + "scope": null, + "escapedName": "path-exists", + "name": "path-exists", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/find-up" + ] + ], + "_from": "path-exists@>=2.0.0 <3.0.0", + "_id": "path-exists@2.1.0", + "_inCache": true, + "_location": "/path-exists", + "_nodeVersion": "4.2.1", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "raw": "path-exists@^2.0.0", + "scope": null, + "escapedName": "path-exists", + "name": "path-exists", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/find-up" + ], + "_resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "_shasum": "0feb6c64f0fc518d9a754dd5efb62c7022761f4b", + "_shrinkwrap": null, + "_spec": "path-exists@^2.0.0", + "_where": "/home/burchettm/statsbot/node_modules/find-up", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/path-exists/issues" + }, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "description": "Check if a path exists", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "0feb6c64f0fc518d9a754dd5efb62c7022761f4b", + "tarball": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "3af423661e78466764f87c5712263c5d7a1ce5b7", + "homepage": "https://github.com/sindresorhus/path-exists", + "keywords": [ + "path", + "exists", + "exist", + "file", + "filepath", + "fs", + "filesystem", + "file-system", + "access", + "stat" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "path-exists", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/path-exists.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.1.0" +} diff --git a/node_modules/path-exists/readme.md b/node_modules/path-exists/readme.md new file mode 100644 index 0000000..8fbcd68 --- /dev/null +++ b/node_modules/path-exists/readme.md @@ -0,0 +1,45 @@ +# path-exists [![Build Status](https://travis-ci.org/sindresorhus/path-exists.svg?branch=master)](https://travis-ci.org/sindresorhus/path-exists) + +> Check if a path exists + +Because [`fs.exists()`](https://nodejs.org/api/fs.html#fs_fs_exists_path_callback) is being [deprecated](https://github.com/iojs/io.js/issues/103), but there's still a genuine use-case of being able to check if a path exists for other purposes than doing IO with it. + +Never use this before handling a file though: + +> In particular, checking if a file exists before opening it is an anti-pattern that leaves you vulnerable to race conditions: another process may remove the file between the calls to `fs.exists()` and `fs.open()`. Just open the file and handle the error when it's not there. + + +## Install + +``` +$ npm install --save path-exists +``` + + +## Usage + +```js +// foo.js +var pathExists = require('path-exists'); + +pathExists('foo.js').then(function (exists) { + console.log(exists); + //=> true +}); +``` + + +## API + +### pathExists(path) + +Returns a promise that resolves to a boolean of whether the path exists. + +### pathExists.sync(path) + +Returns a boolean of whether the path exists. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/path-type/index.js b/node_modules/path-type/index.js new file mode 100644 index 0000000..207a1d1 --- /dev/null +++ b/node_modules/path-type/index.js @@ -0,0 +1,29 @@ +'use strict'; +var fs = require('graceful-fs'); +var Promise = require('pinkie-promise'); +var pify = require('pify'); + +function type(fn, fn2, fp) { + if (typeof fp !== 'string') { + return Promise.reject(new TypeError('Expected a string')); + } + + return pify(fs[fn], Promise)(fp).then(function (stats) { + return stats[fn2](); + }); +} + +function typeSync(fn, fn2, fp) { + if (typeof fp !== 'string') { + throw new TypeError('Expected a string'); + } + + return fs[fn](fp)[fn2](); +} + +exports.file = type.bind(null, 'stat', 'isFile'); +exports.dir = type.bind(null, 'stat', 'isDirectory'); +exports.symlink = type.bind(null, 'lstat', 'isSymbolicLink'); +exports.fileSync = typeSync.bind(null, 'statSync', 'isFile'); +exports.dirSync = typeSync.bind(null, 'statSync', 'isDirectory'); +exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); diff --git a/node_modules/path-type/license b/node_modules/path-type/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/path-type/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/path-type/package.json b/node_modules/path-type/package.json new file mode 100644 index 0000000..95d89f4 --- /dev/null +++ b/node_modules/path-type/package.json @@ -0,0 +1,115 @@ +{ + "_args": [ + [ + { + "raw": "path-type@^1.0.0", + "scope": null, + "escapedName": "path-type", + "name": "path-type", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/read-pkg" + ] + ], + "_from": "path-type@>=1.0.0 <2.0.0", + "_id": "path-type@1.1.0", + "_inCache": true, + "_location": "/path-type", + "_nodeVersion": "4.2.1", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "raw": "path-type@^1.0.0", + "scope": null, + "escapedName": "path-type", + "name": "path-type", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/read-pkg" + ], + "_resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "_shasum": "59c44f7ee491da704da415da5a4070ba4f8fe441", + "_shrinkwrap": null, + "_spec": "path-type@^1.0.0", + "_where": "/home/burchettm/statsbot/node_modules/read-pkg", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/path-type/issues" + }, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "description": "Check if a path is a file, directory, or symlink", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "59c44f7ee491da704da415da5a4070ba4f8fe441", + "tarball": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "dff5c2a62f89efe7e0cce600bf38e76196d8b4b2", + "homepage": "https://github.com/sindresorhus/path-type", + "keywords": [ + "path", + "fs", + "type", + "is", + "check", + "directory", + "dir", + "file", + "filepath", + "symlink", + "symbolic", + "link", + "stat", + "stats", + "filesystem" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "path-type", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/path-type.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.1.0", + "xo": { + "ignores": [ + "test.js" + ] + } +} diff --git a/node_modules/path-type/readme.md b/node_modules/path-type/readme.md new file mode 100644 index 0000000..eac12d6 --- /dev/null +++ b/node_modules/path-type/readme.md @@ -0,0 +1,42 @@ +# path-type [![Build Status](https://travis-ci.org/sindresorhus/path-type.svg?branch=master)](https://travis-ci.org/sindresorhus/path-type) + +> Check if a path is a file, directory, or symlink + + +## Install + +``` +$ npm install --save path-type +``` + + +## Usage + +```js +var pathType = require('path-type'); + +pathType.file('package.json').then(function (isFile) { + console.log(isFile); + //=> true +}) +``` + + +## API + +### .file(path) +### .dir(path) +### .symlink(path) + +Returns a promise that resolves to a boolean of whether the path is the checked type. + +### .fileSync(path) +### .dirSync(path) +### .symlinkSync(path) + +Returns a boolean of whether the path is the checked type. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/pify/index.js b/node_modules/pify/index.js new file mode 100644 index 0000000..7c720eb --- /dev/null +++ b/node_modules/pify/index.js @@ -0,0 +1,68 @@ +'use strict'; + +var processFn = function (fn, P, opts) { + return function () { + var that = this; + var args = new Array(arguments.length); + + for (var i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } + + return new P(function (resolve, reject) { + args.push(function (err, result) { + if (err) { + reject(err); + } else if (opts.multiArgs) { + var results = new Array(arguments.length - 1); + + for (var i = 1; i < arguments.length; i++) { + results[i - 1] = arguments[i]; + } + + resolve(results); + } else { + resolve(result); + } + }); + + fn.apply(that, args); + }); + }; +}; + +var pify = module.exports = function (obj, P, opts) { + if (typeof P !== 'function') { + opts = P; + P = Promise; + } + + opts = opts || {}; + opts.exclude = opts.exclude || [/.+Sync$/]; + + var filter = function (key) { + var match = function (pattern) { + return typeof pattern === 'string' ? key === pattern : pattern.test(key); + }; + + return opts.include ? opts.include.some(match) : !opts.exclude.some(match); + }; + + var ret = typeof obj === 'function' ? function () { + if (opts.excludeMain) { + return obj.apply(this, arguments); + } + + return processFn(obj, P, opts).apply(this, arguments); + } : {}; + + return Object.keys(obj).reduce(function (ret, key) { + var x = obj[key]; + + ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x; + + return ret; + }, ret); +}; + +pify.all = pify; diff --git a/node_modules/pify/license b/node_modules/pify/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/pify/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/pify/package.json b/node_modules/pify/package.json new file mode 100644 index 0000000..d247ece --- /dev/null +++ b/node_modules/pify/package.json @@ -0,0 +1,113 @@ +{ + "_args": [ + [ + { + "raw": "pify@^2.0.0", + "scope": null, + "escapedName": "pify", + "name": "pify", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/load-json-file" + ] + ], + "_from": "pify@>=2.0.0 <3.0.0", + "_id": "pify@2.3.0", + "_inCache": true, + "_location": "/pify", + "_nodeVersion": "4.2.1", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "raw": "pify@^2.0.0", + "scope": null, + "escapedName": "pify", + "name": "pify", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/load-json-file", + "/path-type" + ], + "_resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "_shasum": "ed141a6ac043a849ea588498e7dca8b15330e90c", + "_shrinkwrap": null, + "_spec": "pify@^2.0.0", + "_where": "/home/burchettm/statsbot/node_modules/load-json-file", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/pify/issues" + }, + "dependencies": {}, + "description": "Promisify a callback-style function", + "devDependencies": { + "ava": "*", + "pinkie-promise": "^1.0.0", + "v8-natives": "0.0.2", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "ed141a6ac043a849ea588498e7dca8b15330e90c", + "tarball": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "2dd0d8b880e4ebcc5cc33ae126b02647418e4440", + "homepage": "https://github.com/sindresorhus/pify", + "keywords": [ + "promise", + "promises", + "promisify", + "denodify", + "denodeify", + "callback", + "cb", + "node", + "then", + "thenify", + "convert", + "transform", + "wrap", + "wrapper", + "bind", + "to", + "async", + "es2015" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "pify", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/pify.git" + }, + "scripts": { + "optimization-test": "node --allow-natives-syntax optimization-test.js", + "test": "xo && ava && npm run optimization-test" + }, + "version": "2.3.0" +} diff --git a/node_modules/pify/readme.md b/node_modules/pify/readme.md new file mode 100644 index 0000000..c79ca8b --- /dev/null +++ b/node_modules/pify/readme.md @@ -0,0 +1,119 @@ +# pify [![Build Status](https://travis-ci.org/sindresorhus/pify.svg?branch=master)](https://travis-ci.org/sindresorhus/pify) + +> Promisify a callback-style function + + +## Install + +``` +$ npm install --save pify +``` + + +## Usage + +```js +const fs = require('fs'); +const pify = require('pify'); + +// promisify a single function + +pify(fs.readFile)('package.json', 'utf8').then(data => { + console.log(JSON.parse(data).name); + //=> 'pify' +}); + +// or promisify all methods in a module + +pify(fs).readFile('package.json', 'utf8').then(data => { + console.log(JSON.parse(data).name); + //=> 'pify' +}); +``` + + +## API + +### pify(input, [promiseModule], [options]) + +Returns a promise wrapped version of the supplied function or module. + +#### input + +Type: `function`, `object` + +Callback-style function or module whose methods you want to promisify. + +#### promiseModule + +Type: `function` + +Custom promise module to use instead of the native one. + +Check out [`pinkie-promise`](https://github.com/floatdrop/pinkie-promise) if you need a tiny promise polyfill. + +#### options + +##### multiArgs + +Type: `boolean` +Default: `false` + +By default, the promisified function will only return the second argument from the callback, which works fine for most APIs. This option can be useful for modules like `request` that return multiple arguments. Turning this on will make it return an array of all arguments from the callback, excluding the error argument, instead of just the second argument. + +```js +const request = require('request'); +const pify = require('pify'); + +pify(request, {multiArgs: true})('https://sindresorhus.com').then(result => { + const [httpResponse, body] = result; +}); +``` + +##### include + +Type: `array` of (`string`|`regex`) + +Methods in a module to promisify. Remaining methods will be left untouched. + +##### exclude + +Type: `array` of (`string`|`regex`) +Default: `[/.+Sync$/]` + +Methods in a module **not** to promisify. Methods with names ending with `'Sync'` are excluded by default. + +##### excludeMain + +Type: `boolean` +Default: `false` + +By default, if given module is a function itself, this function will be promisified. Turn this option on if you want to promisify only methods of the module. + +```js +const pify = require('pify'); + +function fn() { + return true; +} + +fn.method = (data, callback) => { + setImmediate(() => { + callback(data, null); + }); +}; + +// promisify methods but not fn() +const promiseFn = pify(fn, {excludeMain: true}); + +if (promiseFn()) { + promiseFn.method('hi').then(data => { + console.log(data); + }); +} +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/pinkie-promise/index.js b/node_modules/pinkie-promise/index.js new file mode 100644 index 0000000..777377a --- /dev/null +++ b/node_modules/pinkie-promise/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = typeof Promise === 'function' ? Promise : require('pinkie'); diff --git a/node_modules/pinkie-promise/license b/node_modules/pinkie-promise/license new file mode 100644 index 0000000..1aeb74f --- /dev/null +++ b/node_modules/pinkie-promise/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/pinkie-promise/package.json b/node_modules/pinkie-promise/package.json new file mode 100644 index 0000000..3caa77c --- /dev/null +++ b/node_modules/pinkie-promise/package.json @@ -0,0 +1,105 @@ +{ + "_args": [ + [ + { + "raw": "pinkie-promise@^2.0.0", + "scope": null, + "escapedName": "pinkie-promise", + "name": "pinkie-promise", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/find-up" + ] + ], + "_from": "pinkie-promise@>=2.0.0 <3.0.0", + "_id": "pinkie-promise@2.0.1", + "_inCache": true, + "_location": "/pinkie-promise", + "_nodeVersion": "4.4.1", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/pinkie-promise-2.0.1.tgz_1460309839126_0.3422858319245279" + }, + "_npmUser": { + "name": "floatdrop", + "email": "floatdrop@gmail.com" + }, + "_npmVersion": "2.14.20", + "_phantomChildren": {}, + "_requested": { + "raw": "pinkie-promise@^2.0.0", + "scope": null, + "escapedName": "pinkie-promise", + "name": "pinkie-promise", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/find-up", + "/load-json-file", + "/path-exists", + "/path-type" + ], + "_resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "_shasum": "2135d6dfa7a358c069ac9b178776288228450ffa", + "_shrinkwrap": null, + "_spec": "pinkie-promise@^2.0.0", + "_where": "/home/burchettm/statsbot/node_modules/find-up", + "author": { + "name": "Vsevolod Strukchinsky", + "email": "floatdrop@gmail.com", + "url": "github.com/floatdrop" + }, + "bugs": { + "url": "https://github.com/floatdrop/pinkie-promise/issues" + }, + "dependencies": { + "pinkie": "^2.0.0" + }, + "description": "ES2015 Promise ponyfill", + "devDependencies": { + "mocha": "*" + }, + "directories": {}, + "dist": { + "shasum": "2135d6dfa7a358c069ac9b178776288228450ffa", + "tarball": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "4a936c09c34ad591a25db93f1216d242de0d6184", + "homepage": "https://github.com/floatdrop/pinkie-promise", + "keywords": [ + "promise", + "promises", + "es2015", + "es6", + "polyfill", + "ponyfill" + ], + "license": "MIT", + "maintainers": [ + { + "name": "floatdrop", + "email": "floatdrop@gmail.com" + } + ], + "name": "pinkie-promise", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/floatdrop/pinkie-promise.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "2.0.1" +} diff --git a/node_modules/pinkie-promise/readme.md b/node_modules/pinkie-promise/readme.md new file mode 100644 index 0000000..78477f4 --- /dev/null +++ b/node_modules/pinkie-promise/readme.md @@ -0,0 +1,28 @@ +# pinkie-promise [![Build Status](https://travis-ci.org/floatdrop/pinkie-promise.svg?branch=master)](https://travis-ci.org/floatdrop/pinkie-promise) + +> [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) ponyfill + +Module exports global Promise object (if available) or [`pinkie`](http://github.com/floatdrop/pinkie) Promise polyfill. + +## Install + +``` +$ npm install --save pinkie-promise +``` + +## Usage + +```js +var Promise = require('pinkie-promise'); + +new Promise(function (resolve) { resolve('unicorns'); }); +//=> Promise { 'unicorns' } +``` + +## Related + +- [pify](https://github.com/sindresorhus/pify) - Promisify a callback-style function + +## License + +MIT © [Vsevolod Strukchinsky](http://github.com/floatdrop) diff --git a/node_modules/pinkie/index.js b/node_modules/pinkie/index.js new file mode 100644 index 0000000..14ce1bf --- /dev/null +++ b/node_modules/pinkie/index.js @@ -0,0 +1,292 @@ +'use strict'; + +var PENDING = 'pending'; +var SETTLED = 'settled'; +var FULFILLED = 'fulfilled'; +var REJECTED = 'rejected'; +var NOOP = function () {}; +var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function'; + +var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate; +var asyncQueue = []; +var asyncTimer; + +function asyncFlush() { + // run promise callbacks + for (var i = 0; i < asyncQueue.length; i++) { + asyncQueue[i][0](asyncQueue[i][1]); + } + + // reset async asyncQueue + asyncQueue = []; + asyncTimer = false; +} + +function asyncCall(callback, arg) { + asyncQueue.push([callback, arg]); + + if (!asyncTimer) { + asyncTimer = true; + asyncSetTimer(asyncFlush, 0); + } +} + +function invokeResolver(resolver, promise) { + function resolvePromise(value) { + resolve(promise, value); + } + + function rejectPromise(reason) { + reject(promise, reason); + } + + try { + resolver(resolvePromise, rejectPromise); + } catch (e) { + rejectPromise(e); + } +} + +function invokeCallback(subscriber) { + var owner = subscriber.owner; + var settled = owner._state; + var value = owner._data; + var callback = subscriber[settled]; + var promise = subscriber.then; + + if (typeof callback === 'function') { + settled = FULFILLED; + try { + value = callback(value); + } catch (e) { + reject(promise, e); + } + } + + if (!handleThenable(promise, value)) { + if (settled === FULFILLED) { + resolve(promise, value); + } + + if (settled === REJECTED) { + reject(promise, value); + } + } +} + +function handleThenable(promise, value) { + var resolved; + + try { + if (promise === value) { + throw new TypeError('A promises callback cannot return that same promise.'); + } + + if (value && (typeof value === 'function' || typeof value === 'object')) { + // then should be retrieved only once + var then = value.then; + + if (typeof then === 'function') { + then.call(value, function (val) { + if (!resolved) { + resolved = true; + + if (value === val) { + fulfill(promise, val); + } else { + resolve(promise, val); + } + } + }, function (reason) { + if (!resolved) { + resolved = true; + + reject(promise, reason); + } + }); + + return true; + } + } + } catch (e) { + if (!resolved) { + reject(promise, e); + } + + return true; + } + + return false; +} + +function resolve(promise, value) { + if (promise === value || !handleThenable(promise, value)) { + fulfill(promise, value); + } +} + +function fulfill(promise, value) { + if (promise._state === PENDING) { + promise._state = SETTLED; + promise._data = value; + + asyncCall(publishFulfillment, promise); + } +} + +function reject(promise, reason) { + if (promise._state === PENDING) { + promise._state = SETTLED; + promise._data = reason; + + asyncCall(publishRejection, promise); + } +} + +function publish(promise) { + promise._then = promise._then.forEach(invokeCallback); +} + +function publishFulfillment(promise) { + promise._state = FULFILLED; + publish(promise); +} + +function publishRejection(promise) { + promise._state = REJECTED; + publish(promise); + if (!promise._handled && isNode) { + global.process.emit('unhandledRejection', promise._data, promise); + } +} + +function notifyRejectionHandled(promise) { + global.process.emit('rejectionHandled', promise); +} + +/** + * @class + */ +function Promise(resolver) { + if (typeof resolver !== 'function') { + throw new TypeError('Promise resolver ' + resolver + ' is not a function'); + } + + if (this instanceof Promise === false) { + throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.'); + } + + this._then = []; + + invokeResolver(resolver, this); +} + +Promise.prototype = { + constructor: Promise, + + _state: PENDING, + _then: null, + _data: undefined, + _handled: false, + + then: function (onFulfillment, onRejection) { + var subscriber = { + owner: this, + then: new this.constructor(NOOP), + fulfilled: onFulfillment, + rejected: onRejection + }; + + if ((onRejection || onFulfillment) && !this._handled) { + this._handled = true; + if (this._state === REJECTED && isNode) { + asyncCall(notifyRejectionHandled, this); + } + } + + if (this._state === FULFILLED || this._state === REJECTED) { + // already resolved, call callback async + asyncCall(invokeCallback, subscriber); + } else { + // subscribe + this._then.push(subscriber); + } + + return subscriber.then; + }, + + catch: function (onRejection) { + return this.then(null, onRejection); + } +}; + +Promise.all = function (promises) { + if (!Array.isArray(promises)) { + throw new TypeError('You must pass an array to Promise.all().'); + } + + return new Promise(function (resolve, reject) { + var results = []; + var remaining = 0; + + function resolver(index) { + remaining++; + return function (value) { + results[index] = value; + if (!--remaining) { + resolve(results); + } + }; + } + + for (var i = 0, promise; i < promises.length; i++) { + promise = promises[i]; + + if (promise && typeof promise.then === 'function') { + promise.then(resolver(i), reject); + } else { + results[i] = promise; + } + } + + if (!remaining) { + resolve(results); + } + }); +}; + +Promise.race = function (promises) { + if (!Array.isArray(promises)) { + throw new TypeError('You must pass an array to Promise.race().'); + } + + return new Promise(function (resolve, reject) { + for (var i = 0, promise; i < promises.length; i++) { + promise = promises[i]; + + if (promise && typeof promise.then === 'function') { + promise.then(resolve, reject); + } else { + resolve(promise); + } + } + }); +}; + +Promise.resolve = function (value) { + if (value && typeof value === 'object' && value.constructor === Promise) { + return value; + } + + return new Promise(function (resolve) { + resolve(value); + }); +}; + +Promise.reject = function (reason) { + return new Promise(function (resolve, reject) { + reject(reason); + }); +}; + +module.exports = Promise; diff --git a/node_modules/pinkie/license b/node_modules/pinkie/license new file mode 100644 index 0000000..1aeb74f --- /dev/null +++ b/node_modules/pinkie/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/pinkie/package.json b/node_modules/pinkie/package.json new file mode 100644 index 0000000..9e96634 --- /dev/null +++ b/node_modules/pinkie/package.json @@ -0,0 +1,100 @@ +{ + "_args": [ + [ + { + "raw": "pinkie@^2.0.0", + "scope": null, + "escapedName": "pinkie", + "name": "pinkie", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/pinkie-promise" + ] + ], + "_from": "pinkie@>=2.0.0 <3.0.0", + "_id": "pinkie@2.0.4", + "_inCache": true, + "_location": "/pinkie", + "_nodeVersion": "4.2.4", + "_npmUser": { + "name": "floatdrop", + "email": "floatdrop@gmail.com" + }, + "_npmVersion": "2.14.12", + "_phantomChildren": {}, + "_requested": { + "raw": "pinkie@^2.0.0", + "scope": null, + "escapedName": "pinkie", + "name": "pinkie", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/pinkie-promise" + ], + "_resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "_shasum": "72556b80cfa0d48a974e80e77248e80ed4f7f870", + "_shrinkwrap": null, + "_spec": "pinkie@^2.0.0", + "_where": "/home/burchettm/statsbot/node_modules/pinkie-promise", + "author": { + "name": "Vsevolod Strukchinsky", + "email": "floatdrop@gmail.com", + "url": "github.com/floatdrop" + }, + "bugs": { + "url": "https://github.com/floatdrop/pinkie/issues" + }, + "dependencies": {}, + "description": "Itty bitty little widdle twinkie pinkie ES2015 Promise implementation", + "devDependencies": { + "core-assert": "^0.1.1", + "coveralls": "^2.11.4", + "mocha": "*", + "nyc": "^3.2.2", + "promises-aplus-tests": "*", + "xo": "^0.10.1" + }, + "directories": {}, + "dist": { + "shasum": "72556b80cfa0d48a974e80e77248e80ed4f7f870", + "tarball": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "8d4a92447a5c62bff9f89756caeb4c9c8770579b", + "homepage": "https://github.com/floatdrop/pinkie", + "keywords": [ + "promise", + "promises", + "es2015", + "es6" + ], + "license": "MIT", + "maintainers": [ + { + "name": "floatdrop", + "email": "floatdrop@gmail.com" + } + ], + "name": "pinkie", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/floatdrop/pinkie.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "test": "xo && nyc mocha" + }, + "version": "2.0.4" +} diff --git a/node_modules/pinkie/readme.md b/node_modules/pinkie/readme.md new file mode 100644 index 0000000..1565f95 --- /dev/null +++ b/node_modules/pinkie/readme.md @@ -0,0 +1,83 @@ +

+
+ pinkie +
+
+

+ +> Itty bitty little widdle twinkie pinkie [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) implementation + +[![Build Status](https://travis-ci.org/floatdrop/pinkie.svg?branch=master)](https://travis-ci.org/floatdrop/pinkie) [![Coverage Status](https://coveralls.io/repos/floatdrop/pinkie/badge.svg?branch=master&service=github)](https://coveralls.io/github/floatdrop/pinkie?branch=master) + +There are [tons of Promise implementations](https://github.com/promises-aplus/promises-spec/blob/master/implementations.md#standalone) out there, but all of them focus on browser compatibility and are often bloated with functionality. + +This module is an exact Promise specification polyfill (like [native-promise-only](https://github.com/getify/native-promise-only)), but in Node.js land (it should be browserify-able though). + + +## Install + +``` +$ npm install --save pinkie +``` + + +## Usage + +```js +var fs = require('fs'); +var Promise = require('pinkie'); + +new Promise(function (resolve, reject) { + fs.readFile('foo.json', 'utf8', function (err, data) { + if (err) { + reject(err); + return; + } + + resolve(data); + }); +}); +//=> Promise +``` + + +### API + +`pinkie` exports bare [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) implementation and polyfills [Node.js rejection events](https://nodejs.org/api/process.html#process_event_unhandledrejection). In case you forgot: + +#### new Promise(executor) + +Returns new instance of `Promise`. + +##### executor + +*Required* +Type: `function` + +Function with two arguments `resolve` and `reject`. The first argument fulfills the promise, the second argument rejects it. + +#### pinkie.all(promises) + +Returns a promise that resolves when all of the promises in the `promises` Array argument have resolved. + +#### pinkie.race(promises) + +Returns a promise that resolves or rejects as soon as one of the promises in the `promises` Array resolves or rejects, with the value or reason from that promise. + +#### pinkie.reject(reason) + +Returns a Promise object that is rejected with the given `reason`. + +#### pinkie.resolve(value) + +Returns a Promise object that is resolved with the given `value`. If the `value` is a thenable (i.e. has a then method), the returned promise will "follow" that thenable, adopting its eventual state; otherwise the returned promise will be fulfilled with the `value`. + + +## Related + +- [pinkie-promise](https://github.com/floatdrop/pinkie-promise) - Returns the native Promise or this module + + +## License + +MIT © [Vsevolod Strukchinsky](http://github.com/floatdrop) diff --git a/node_modules/qs/.jshintignore b/node_modules/qs/.jshintignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/node_modules/qs/.jshintignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/qs/.jshintrc b/node_modules/qs/.jshintrc new file mode 100644 index 0000000..997b3f7 --- /dev/null +++ b/node_modules/qs/.jshintrc @@ -0,0 +1,10 @@ +{ + "node": true, + + "curly": true, + "latedef": true, + "quotmark": true, + "undef": true, + "unused": true, + "trailing": true +} diff --git a/node_modules/qs/.npmignore b/node_modules/qs/.npmignore new file mode 100644 index 0000000..7e1574d --- /dev/null +++ b/node_modules/qs/.npmignore @@ -0,0 +1,18 @@ +.idea +*.iml +npm-debug.log +dump.rdb +node_modules +results.tap +results.xml +npm-shrinkwrap.json +config.json +.DS_Store +*/.DS_Store +*/*/.DS_Store +._* +*/._* +*/*/._* +coverage.* +lib-cov +complexity.md diff --git a/node_modules/qs/.travis.yml b/node_modules/qs/.travis.yml new file mode 100644 index 0000000..c891dd0 --- /dev/null +++ b/node_modules/qs/.travis.yml @@ -0,0 +1,4 @@ +language: node_js + +node_js: + - 0.10 \ No newline at end of file diff --git a/node_modules/qs/CHANGELOG.md b/node_modules/qs/CHANGELOG.md new file mode 100644 index 0000000..f5ee8b4 --- /dev/null +++ b/node_modules/qs/CHANGELOG.md @@ -0,0 +1,68 @@ + +## [**2.3.3**](https://github.com/hapijs/qs/issues?milestone=18&state=open) +- [**#59**](https://github.com/hapijs/qs/issues/59) make sure array indexes are >= 0, closes #57 +- [**#58**](https://github.com/hapijs/qs/issues/58) make qs usable for browser loader + +## [**2.3.2**](https://github.com/hapijs/qs/issues?milestone=17&state=closed) +- [**#55**](https://github.com/hapijs/qs/issues/55) allow merging a string into an object + +## [**2.3.1**](https://github.com/hapijs/qs/issues?milestone=16&state=closed) +- [**#52**](https://github.com/hapijs/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". + +## [**2.3.0**](https://github.com/hapijs/qs/issues?milestone=15&state=closed) +- [**#50**](https://github.com/hapijs/qs/issues/50) add option to omit array indices, closes #46 + +## [**2.2.5**](https://github.com/hapijs/qs/issues?milestone=14&state=closed) +- [**#39**](https://github.com/hapijs/qs/issues/39) Is there an alternative to Buffer.isBuffer? +- [**#49**](https://github.com/hapijs/qs/issues/49) refactor utils.merge, fixes #45 +- [**#41**](https://github.com/hapijs/qs/issues/41) avoid browserifying Buffer, for #39 + +## [**2.2.4**](https://github.com/hapijs/qs/issues?milestone=13&state=closed) +- [**#38**](https://github.com/hapijs/qs/issues/38) how to handle object keys beginning with a number + +## [**2.2.3**](https://github.com/hapijs/qs/issues?milestone=12&state=closed) +- [**#37**](https://github.com/hapijs/qs/issues/37) parser discards first empty value in array +- [**#36**](https://github.com/hapijs/qs/issues/36) Update to lab 4.x + +## [**2.2.2**](https://github.com/hapijs/qs/issues?milestone=11&state=closed) +- [**#33**](https://github.com/hapijs/qs/issues/33) Error when plain object in a value +- [**#34**](https://github.com/hapijs/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty +- [**#24**](https://github.com/hapijs/qs/issues/24) Changelog? Semver? + +## [**2.2.1**](https://github.com/hapijs/qs/issues?milestone=10&state=closed) +- [**#32**](https://github.com/hapijs/qs/issues/32) account for circular references properly, closes #31 +- [**#31**](https://github.com/hapijs/qs/issues/31) qs.parse stackoverflow on circular objects + +## [**2.2.0**](https://github.com/hapijs/qs/issues?milestone=9&state=closed) +- [**#26**](https://github.com/hapijs/qs/issues/26) Don't use Buffer global if it's not present +- [**#30**](https://github.com/hapijs/qs/issues/30) Bug when merging non-object values into arrays +- [**#29**](https://github.com/hapijs/qs/issues/29) Don't call Utils.clone at the top of Utils.merge +- [**#23**](https://github.com/hapijs/qs/issues/23) Ability to not limit parameters? + +## [**2.1.0**](https://github.com/hapijs/qs/issues?milestone=8&state=closed) +- [**#22**](https://github.com/hapijs/qs/issues/22) Enable using a RegExp as delimiter + +## [**2.0.0**](https://github.com/hapijs/qs/issues?milestone=7&state=closed) +- [**#18**](https://github.com/hapijs/qs/issues/18) Why is there arrayLimit? +- [**#20**](https://github.com/hapijs/qs/issues/20) Configurable parametersLimit +- [**#21**](https://github.com/hapijs/qs/issues/21) make all limits optional, for #18, for #20 + +## [**1.2.2**](https://github.com/hapijs/qs/issues?milestone=6&state=closed) +- [**#19**](https://github.com/hapijs/qs/issues/19) Don't overwrite null values + +## [**1.2.1**](https://github.com/hapijs/qs/issues?milestone=5&state=closed) +- [**#16**](https://github.com/hapijs/qs/issues/16) ignore non-string delimiters +- [**#15**](https://github.com/hapijs/qs/issues/15) Close code block + +## [**1.2.0**](https://github.com/hapijs/qs/issues?milestone=4&state=closed) +- [**#12**](https://github.com/hapijs/qs/issues/12) Add optional delim argument +- [**#13**](https://github.com/hapijs/qs/issues/13) fix #11: flattened keys in array are now correctly parsed + +## [**1.1.0**](https://github.com/hapijs/qs/issues?milestone=3&state=closed) +- [**#7**](https://github.com/hapijs/qs/issues/7) Empty values of a POST array disappear after being submitted +- [**#9**](https://github.com/hapijs/qs/issues/9) Should not omit equals signs (=) when value is null +- [**#6**](https://github.com/hapijs/qs/issues/6) Minor grammar fix in README + +## [**1.0.2**](https://github.com/hapijs/qs/issues?milestone=2&state=closed) +- [**#5**](https://github.com/hapijs/qs/issues/5) array holes incorrectly copied into object on large index + diff --git a/node_modules/qs/CONTRIBUTING.md b/node_modules/qs/CONTRIBUTING.md new file mode 100644 index 0000000..8928361 --- /dev/null +++ b/node_modules/qs/CONTRIBUTING.md @@ -0,0 +1 @@ +Please view our [hapijs contributing guide](https://github.com/hapijs/hapi/blob/master/CONTRIBUTING.md). diff --git a/node_modules/qs/LICENSE b/node_modules/qs/LICENSE new file mode 100755 index 0000000..d456948 --- /dev/null +++ b/node_modules/qs/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2014 Nathan LaFreniere and other contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The names of any contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * * * + +The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors diff --git a/node_modules/qs/Makefile b/node_modules/qs/Makefile new file mode 100644 index 0000000..31cc899 --- /dev/null +++ b/node_modules/qs/Makefile @@ -0,0 +1,8 @@ +test: + @node node_modules/lab/bin/lab -a code -L +test-cov: + @node node_modules/lab/bin/lab -a code -t 100 -L +test-cov-html: + @node node_modules/lab/bin/lab -a code -L -r html -o coverage.html + +.PHONY: test test-cov test-cov-html diff --git a/node_modules/qs/README.md b/node_modules/qs/README.md new file mode 100755 index 0000000..21bf3fa --- /dev/null +++ b/node_modules/qs/README.md @@ -0,0 +1,222 @@ +# qs + +A querystring parsing and stringifying library with some added security. + +[![Build Status](https://secure.travis-ci.org/hapijs/qs.svg)](http://travis-ci.org/hapijs/qs) + +Lead Maintainer: [Nathan LaFreniere](https://github.com/nlf) + +The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). + +## Usage + +```javascript +var Qs = require('qs'); + +var obj = Qs.parse('a=c'); // { a: 'c' } +var str = Qs.stringify(obj); // 'a=c' +``` + +### Parsing Objects + +```javascript +Qs.parse(string, [options]); +``` + +**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. +For example, the string `'foo[bar]=baz'` converts to: + +```javascript +{ + foo: { + bar: 'baz' + } +} +``` + +URI encoded strings work too: + +```javascript +Qs.parse('a%5Bb%5D=c'); +// { a: { b: 'c' } } +``` + +You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: + +```javascript +{ + foo: { + bar: { + baz: 'foobarbaz' + } + } +} +``` + +By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like +`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: + +```javascript +{ + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } + } + } + } +} +``` + +This depth can be overridden by passing a `depth` option to `Qs.parse(string, [options])`: + +```javascript +Qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); +// { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } } +``` + +The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. + +For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: + +```javascript +Qs.parse('a=b&c=d', { parameterLimit: 1 }); +// { a: 'b' } +``` + +An optional delimiter can also be passed: + +```javascript +Qs.parse('a=b;c=d', { delimiter: ';' }); +// { a: 'b', c: 'd' } +``` + +Delimiters can be a regular expression too: + +```javascript +Qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); +// { a: 'b', c: 'd', e: 'f' } +``` + +### Parsing Arrays + +**qs** can also parse arrays using a similar `[]` notation: + +```javascript +Qs.parse('a[]=b&a[]=c'); +// { a: ['b', 'c'] } +``` + +You may specify an index as well: + +```javascript +Qs.parse('a[1]=c&a[0]=b'); +// { a: ['b', 'c'] } +``` + +Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number +to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving +their order: + +```javascript +Qs.parse('a[1]=b&a[15]=c'); +// { a: ['b', 'c'] } +``` + +Note that an empty string is also a value, and will be preserved: + +```javascript +Qs.parse('a[]=&a[]=b'); +// { a: ['', 'b'] } +Qs.parse('a[0]=b&a[1]=&a[2]=c'); +// { a: ['b', '', 'c'] } +``` + +**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will +instead be converted to an object with the index as the key: + +```javascript +Qs.parse('a[100]=b'); +// { a: { '100': 'b' } } +``` + +This limit can be overridden by passing an `arrayLimit` option: + +```javascript +Qs.parse('a[1]=b', { arrayLimit: 0 }); +// { a: { '1': 'b' } } +``` + +To disable array parsing entirely, set `arrayLimit` to `-1`. + +If you mix notations, **qs** will merge the two items into an object: + +```javascript +Qs.parse('a[0]=b&a[b]=c'); +// { a: { '0': 'b', b: 'c' } } +``` + +You can also create arrays of objects: + +```javascript +Qs.parse('a[][b]=c'); +// { a: [{ b: 'c' }] } +``` + +### Stringifying + +```javascript +Qs.stringify(object, [options]); +``` + +When stringifying, **qs** always URI encodes output. Objects are stringified as you would expect: + +```javascript +Qs.stringify({ a: 'b' }); +// 'a=b' +Qs.stringify({ a: { b: 'c' } }); +// 'a%5Bb%5D=c' +``` + +Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. + +When arrays are stringified, by default they are given explicit indices: + +```javascript +Qs.stringify({ a: ['b', 'c', 'd'] }); +// 'a[0]=b&a[1]=c&a[2]=d' +``` + +You may override this by setting the `indices` option to `false`: + +```javascript +Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); +// 'a=b&a=c&a=d' +``` + +Empty strings and null values will omit the value, but the equals sign (=) remains in place: + +```javascript +Qs.stringify({ a: '' }); +// 'a=' +``` + +Properties that are set to `undefined` will be omitted entirely: + +```javascript +Qs.stringify({ a: null, b: undefined }); +// 'a=' +``` + +The delimiter may be overridden with stringify as well: + +```javascript +Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }); +// 'a=b;c=d' +``` diff --git a/node_modules/qs/index.js b/node_modules/qs/index.js new file mode 100644 index 0000000..2291cd8 --- /dev/null +++ b/node_modules/qs/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/'); diff --git a/node_modules/qs/lib/index.js b/node_modules/qs/lib/index.js new file mode 100755 index 0000000..0e09493 --- /dev/null +++ b/node_modules/qs/lib/index.js @@ -0,0 +1,15 @@ +// Load modules + +var Stringify = require('./stringify'); +var Parse = require('./parse'); + + +// Declare internals + +var internals = {}; + + +module.exports = { + stringify: Stringify, + parse: Parse +}; diff --git a/node_modules/qs/lib/parse.js b/node_modules/qs/lib/parse.js new file mode 100755 index 0000000..4e7d02a --- /dev/null +++ b/node_modules/qs/lib/parse.js @@ -0,0 +1,157 @@ +// Load modules + +var Utils = require('./utils'); + + +// Declare internals + +var internals = { + delimiter: '&', + depth: 5, + arrayLimit: 20, + parameterLimit: 1000 +}; + + +internals.parseValues = function (str, options) { + + var obj = {}; + var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit); + + for (var i = 0, il = parts.length; i < il; ++i) { + var part = parts[i]; + var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1; + + if (pos === -1) { + obj[Utils.decode(part)] = ''; + } + else { + var key = Utils.decode(part.slice(0, pos)); + var val = Utils.decode(part.slice(pos + 1)); + + if (!obj.hasOwnProperty(key)) { + obj[key] = val; + } + else { + obj[key] = [].concat(obj[key]).concat(val); + } + } + } + + return obj; +}; + + +internals.parseObject = function (chain, val, options) { + + if (!chain.length) { + return val; + } + + var root = chain.shift(); + + var obj = {}; + if (root === '[]') { + obj = []; + obj = obj.concat(internals.parseObject(chain, val, options)); + } + else { + var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root; + var index = parseInt(cleanRoot, 10); + var indexString = '' + index; + if (!isNaN(index) && + root !== cleanRoot && + indexString === cleanRoot && + index >= 0 && + index <= options.arrayLimit) { + + obj = []; + obj[index] = internals.parseObject(chain, val, options); + } + else { + obj[cleanRoot] = internals.parseObject(chain, val, options); + } + } + + return obj; +}; + + +internals.parseKeys = function (key, val, options) { + + if (!key) { + return; + } + + // The regex chunks + + var parent = /^([^\[\]]*)/; + var child = /(\[[^\[\]]*\])/g; + + // Get the parent + + var segment = parent.exec(key); + + // Don't allow them to overwrite object prototype properties + + if (Object.prototype.hasOwnProperty(segment[1])) { + return; + } + + // Stash the parent if it exists + + var keys = []; + if (segment[1]) { + keys.push(segment[1]); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + + ++i; + if (!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) { + keys.push(segment[1]); + } + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return internals.parseObject(keys, val, options); +}; + + +module.exports = function (str, options) { + + if (str === '' || + str === null || + typeof str === 'undefined') { + + return {}; + } + + options = options || {}; + options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter; + options.depth = typeof options.depth === 'number' ? options.depth : internals.depth; + options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit; + options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit; + + var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str; + var obj = {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0, il = keys.length; i < il; ++i) { + var key = keys[i]; + var newObj = internals.parseKeys(key, tempObj[key], options); + obj = Utils.merge(obj, newObj); + } + + return Utils.compact(obj); +}; diff --git a/node_modules/qs/lib/stringify.js b/node_modules/qs/lib/stringify.js new file mode 100755 index 0000000..b441104 --- /dev/null +++ b/node_modules/qs/lib/stringify.js @@ -0,0 +1,77 @@ +// Load modules + +var Utils = require('./utils'); + + +// Declare internals + +var internals = { + delimiter: '&', + indices: true +}; + + +internals.stringify = function (obj, prefix, options) { + + if (Utils.isBuffer(obj)) { + obj = obj.toString(); + } + else if (obj instanceof Date) { + obj = obj.toISOString(); + } + else if (obj === null) { + obj = ''; + } + + if (typeof obj === 'string' || + typeof obj === 'number' || + typeof obj === 'boolean') { + + return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys = Object.keys(obj); + for (var i = 0, il = objKeys.length; i < il; ++i) { + var key = objKeys[i]; + if (!options.indices && + Array.isArray(obj)) { + + values = values.concat(internals.stringify(obj[key], prefix, options)); + } + else { + values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', options)); + } + } + + return values; +}; + + +module.exports = function (obj, options) { + + options = options || {}; + var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter; + options.indices = typeof options.indices === 'boolean' ? options.indices : internals.indices; + + var keys = []; + + if (typeof obj !== 'object' || + obj === null) { + + return ''; + } + + var objKeys = Object.keys(obj); + for (var i = 0, il = objKeys.length; i < il; ++i) { + var key = objKeys[i]; + keys = keys.concat(internals.stringify(obj[key], key, options)); + } + + return keys.join(delimiter); +}; diff --git a/node_modules/qs/lib/utils.js b/node_modules/qs/lib/utils.js new file mode 100755 index 0000000..5240bd5 --- /dev/null +++ b/node_modules/qs/lib/utils.js @@ -0,0 +1,132 @@ +// Load modules + + +// Declare internals + +var internals = {}; + + +exports.arrayToObject = function (source) { + + var obj = {}; + for (var i = 0, il = source.length; i < il; ++i) { + if (typeof source[i] !== 'undefined') { + + obj[i] = source[i]; + } + } + + return obj; +}; + + +exports.merge = function (target, source) { + + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (Array.isArray(target)) { + target.push(source); + } + else { + target[source] = true; + } + + return target; + } + + if (typeof target !== 'object') { + target = [target].concat(source); + return target; + } + + if (Array.isArray(target) && + !Array.isArray(source)) { + + target = exports.arrayToObject(target); + } + + var keys = Object.keys(source); + for (var k = 0, kl = keys.length; k < kl; ++k) { + var key = keys[k]; + var value = source[key]; + + if (!target[key]) { + target[key] = value; + } + else { + target[key] = exports.merge(target[key], value); + } + } + + return target; +}; + + +exports.decode = function (str) { + + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (e) { + return str; + } +}; + + +exports.compact = function (obj, refs) { + + if (typeof obj !== 'object' || + obj === null) { + + return obj; + } + + refs = refs || []; + var lookup = refs.indexOf(obj); + if (lookup !== -1) { + return refs[lookup]; + } + + refs.push(obj); + + if (Array.isArray(obj)) { + var compacted = []; + + for (var i = 0, il = obj.length; i < il; ++i) { + if (typeof obj[i] !== 'undefined') { + compacted.push(obj[i]); + } + } + + return compacted; + } + + var keys = Object.keys(obj); + for (i = 0, il = keys.length; i < il; ++i) { + var key = keys[i]; + obj[key] = exports.compact(obj[key], refs); + } + + return obj; +}; + + +exports.isRegExp = function (obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + + +exports.isBuffer = function (obj) { + + if (obj === null || + typeof obj === 'undefined') { + + return false; + } + + return !!(obj.constructor && + obj.constructor.isBuffer && + obj.constructor.isBuffer(obj)); +}; diff --git a/node_modules/qs/package.json b/node_modules/qs/package.json new file mode 100644 index 0000000..961ba56 --- /dev/null +++ b/node_modules/qs/package.json @@ -0,0 +1,92 @@ +{ + "_args": [ + [ + { + "raw": "qs@2.3.3", + "scope": null, + "escapedName": "qs", + "name": "qs", + "rawSpec": "2.3.3", + "spec": "2.3.3", + "type": "version" + }, + "/home/burchettm/statsbot/node_modules/superagent" + ] + ], + "_from": "qs@2.3.3", + "_id": "qs@2.3.3", + "_inCache": true, + "_location": "/qs", + "_nodeVersion": "0.10.32", + "_npmUser": { + "name": "nlf", + "email": "quitlahok@gmail.com" + }, + "_npmVersion": "2.1.6", + "_phantomChildren": {}, + "_requested": { + "raw": "qs@2.3.3", + "scope": null, + "escapedName": "qs", + "name": "qs", + "rawSpec": "2.3.3", + "spec": "2.3.3", + "type": "version" + }, + "_requiredBy": [ + "/superagent" + ], + "_resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "_shasum": "e9e85adbe75da0bbe4c8e0476a086290f863b404", + "_shrinkwrap": null, + "_spec": "qs@2.3.3", + "_where": "/home/burchettm/statsbot/node_modules/superagent", + "bugs": { + "url": "https://github.com/hapijs/qs/issues" + }, + "dependencies": {}, + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "devDependencies": { + "code": "1.x.x", + "lab": "5.x.x" + }, + "directories": {}, + "dist": { + "shasum": "e9e85adbe75da0bbe4c8e0476a086290f863b404", + "tarball": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz" + }, + "gitHead": "9250c4cda5102fcf72441445816e6d311fc6813d", + "homepage": "https://github.com/hapijs/qs", + "keywords": [ + "querystring", + "qs" + ], + "licenses": [ + { + "type": "BSD", + "url": "http://github.com/hapijs/qs/raw/master/LICENSE" + } + ], + "main": "index.js", + "maintainers": [ + { + "name": "nlf", + "email": "quitlahok@gmail.com" + }, + { + "name": "hueniverse", + "email": "eran@hueniverse.com" + } + ], + "name": "qs", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/hapijs/qs.git" + }, + "scripts": { + "test": "make test-cov" + }, + "version": "2.3.3" +} diff --git a/node_modules/qs/test/parse.js b/node_modules/qs/test/parse.js new file mode 100755 index 0000000..6c20cc1 --- /dev/null +++ b/node_modules/qs/test/parse.js @@ -0,0 +1,413 @@ +/* eslint no-extend-native:0 */ +// Load modules + +var Code = require('code'); +var Lab = require('lab'); +var Qs = require('../'); + + +// Declare internals + +var internals = {}; + + +// Test shortcuts + +var lab = exports.lab = Lab.script(); +var expect = Code.expect; +var describe = lab.experiment; +var it = lab.test; + + +describe('parse()', function () { + + it('parses a simple string', function (done) { + + expect(Qs.parse('0=foo')).to.deep.equal({ '0': 'foo' }); + expect(Qs.parse('foo=c++')).to.deep.equal({ foo: 'c ' }); + expect(Qs.parse('a[>=]=23')).to.deep.equal({ a: { '>=': '23' } }); + expect(Qs.parse('a[<=>]==23')).to.deep.equal({ a: { '<=>': '=23' } }); + expect(Qs.parse('a[==]=23')).to.deep.equal({ a: { '==': '23' } }); + expect(Qs.parse('foo')).to.deep.equal({ foo: '' }); + expect(Qs.parse('foo=bar')).to.deep.equal({ foo: 'bar' }); + expect(Qs.parse(' foo = bar = baz ')).to.deep.equal({ ' foo ': ' bar = baz ' }); + expect(Qs.parse('foo=bar=baz')).to.deep.equal({ foo: 'bar=baz' }); + expect(Qs.parse('foo=bar&bar=baz')).to.deep.equal({ foo: 'bar', bar: 'baz' }); + expect(Qs.parse('foo=bar&baz')).to.deep.equal({ foo: 'bar', baz: '' }); + expect(Qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World')).to.deep.equal({ + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + done(); + }); + + it('parses a single nested string', function (done) { + + expect(Qs.parse('a[b]=c')).to.deep.equal({ a: { b: 'c' } }); + done(); + }); + + it('parses a double nested string', function (done) { + + expect(Qs.parse('a[b][c]=d')).to.deep.equal({ a: { b: { c: 'd' } } }); + done(); + }); + + it('defaults to a depth of 5', function (done) { + + expect(Qs.parse('a[b][c][d][e][f][g][h]=i')).to.deep.equal({ a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }); + done(); + }); + + it('only parses one level when depth = 1', function (done) { + + expect(Qs.parse('a[b][c]=d', { depth: 1 })).to.deep.equal({ a: { b: { '[c]': 'd' } } }); + expect(Qs.parse('a[b][c][d]=e', { depth: 1 })).to.deep.equal({ a: { b: { '[c][d]': 'e' } } }); + done(); + }); + + it('parses a simple array', function (done) { + + expect(Qs.parse('a=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + done(); + }); + + it('parses an explicit array', function (done) { + + expect(Qs.parse('a[]=b')).to.deep.equal({ a: ['b'] }); + expect(Qs.parse('a[]=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[]=b&a[]=c&a[]=d')).to.deep.equal({ a: ['b', 'c', 'd'] }); + done(); + }); + + it('parses a mix of simple and explicit arrays', function (done) { + + expect(Qs.parse('a=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[0]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a=b&a[0]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[1]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a=b&a[1]=c')).to.deep.equal({ a: ['b', 'c'] }); + done(); + }); + + it('parses a nested array', function (done) { + + expect(Qs.parse('a[b][]=c&a[b][]=d')).to.deep.equal({ a: { b: ['c', 'd'] } }); + expect(Qs.parse('a[>=]=25')).to.deep.equal({ a: { '>=': '25' } }); + done(); + }); + + it('allows to specify array indices', function (done) { + + expect(Qs.parse('a[1]=c&a[0]=b&a[2]=d')).to.deep.equal({ a: ['b', 'c', 'd'] }); + expect(Qs.parse('a[1]=c&a[0]=b')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[1]=c')).to.deep.equal({ a: ['c'] }); + done(); + }); + + it('limits specific array indices to 20', function (done) { + + expect(Qs.parse('a[20]=a')).to.deep.equal({ a: ['a'] }); + expect(Qs.parse('a[21]=a')).to.deep.equal({ a: { '21': 'a' } }); + done(); + }); + + it('supports keys that begin with a number', function (done) { + + expect(Qs.parse('a[12b]=c')).to.deep.equal({ a: { '12b': 'c' } }); + done(); + }); + + it('supports encoded = signs', function (done) { + + expect(Qs.parse('he%3Dllo=th%3Dere')).to.deep.equal({ 'he=llo': 'th=ere' }); + done(); + }); + + it('is ok with url encoded strings', function (done) { + + expect(Qs.parse('a[b%20c]=d')).to.deep.equal({ a: { 'b c': 'd' } }); + expect(Qs.parse('a[b]=c%20d')).to.deep.equal({ a: { b: 'c d' } }); + done(); + }); + + it('allows brackets in the value', function (done) { + + expect(Qs.parse('pets=["tobi"]')).to.deep.equal({ pets: '["tobi"]' }); + expect(Qs.parse('operators=[">=", "<="]')).to.deep.equal({ operators: '[">=", "<="]' }); + done(); + }); + + it('allows empty values', function (done) { + + expect(Qs.parse('')).to.deep.equal({}); + expect(Qs.parse(null)).to.deep.equal({}); + expect(Qs.parse(undefined)).to.deep.equal({}); + done(); + }); + + it('transforms arrays to objects', function (done) { + + expect(Qs.parse('foo[0]=bar&foo[bad]=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }); + expect(Qs.parse('foo[bad]=baz&foo[0]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }); + expect(Qs.parse('foo[bad]=baz&foo[]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }); + expect(Qs.parse('foo[]=bar&foo[bad]=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }); + expect(Qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar', '1': 'foo' } }); + expect(Qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb')).to.deep.equal({foo: [ {a: 'a', b: 'b'}, {a: 'aa', b: 'bb'} ]}); + done(); + }); + + it('can add keys to objects', function (done) { + + expect(Qs.parse('a[b]=c&a=d')).to.deep.equal({ a: { b: 'c', d: true } }); + done(); + }); + + it('correctly prunes undefined values when converting an array to an object', function (done) { + + expect(Qs.parse('a[2]=b&a[99999999]=c')).to.deep.equal({ a: { '2': 'b', '99999999': 'c' } }); + done(); + }); + + it('supports malformed uri characters', function (done) { + + expect(Qs.parse('{%:%}')).to.deep.equal({ '{%:%}': '' }); + expect(Qs.parse('foo=%:%}')).to.deep.equal({ foo: '%:%}' }); + done(); + }); + + it('doesn\'t produce empty keys', function (done) { + + expect(Qs.parse('_r=1&')).to.deep.equal({ '_r': '1' }); + done(); + }); + + it('cannot override prototypes', function (done) { + + var obj = Qs.parse('toString=bad&bad[toString]=bad&constructor=bad'); + expect(typeof obj.toString).to.equal('function'); + expect(typeof obj.bad.toString).to.equal('function'); + expect(typeof obj.constructor).to.equal('function'); + done(); + }); + + it('cannot access Object prototype', function (done) { + + Qs.parse('constructor[prototype][bad]=bad'); + Qs.parse('bad[constructor][prototype][bad]=bad'); + expect(typeof Object.prototype.bad).to.equal('undefined'); + done(); + }); + + it('parses arrays of objects', function (done) { + + expect(Qs.parse('a[][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + expect(Qs.parse('a[0][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + done(); + }); + + it('allows for empty strings in arrays', function (done) { + + expect(Qs.parse('a[]=b&a[]=&a[]=c')).to.deep.equal({ a: ['b', '', 'c'] }); + expect(Qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]=')).to.deep.equal({ a: ['b', '', 'c', ''] }); + expect(Qs.parse('a[]=&a[]=b&a[]=c')).to.deep.equal({ a: ['', 'b', 'c'] }); + done(); + }); + + it('compacts sparse arrays', function (done) { + + expect(Qs.parse('a[10]=1&a[2]=2')).to.deep.equal({ a: ['2', '1'] }); + done(); + }); + + it('parses semi-parsed strings', function (done) { + + expect(Qs.parse({ 'a[b]': 'c' })).to.deep.equal({ a: { b: 'c' } }); + expect(Qs.parse({ 'a[b]': 'c', 'a[d]': 'e' })).to.deep.equal({ a: { b: 'c', d: 'e' } }); + done(); + }); + + it('parses buffers correctly', function (done) { + + var b = new Buffer('test'); + expect(Qs.parse({ a: b })).to.deep.equal({ a: b }); + done(); + }); + + it('continues parsing when no parent is found', function (done) { + + expect(Qs.parse('[]&a=b')).to.deep.equal({ '0': '', a: 'b' }); + expect(Qs.parse('[foo]=bar')).to.deep.equal({ foo: 'bar' }); + done(); + }); + + it('does not error when parsing a very long array', function (done) { + + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str += '&' + str; + } + + expect(function () { + + Qs.parse(str); + }).to.not.throw(); + + done(); + }); + + it('should not throw when a native prototype has an enumerable property', { parallel: false }, function (done) { + + Object.prototype.crash = ''; + Array.prototype.crash = ''; + expect(Qs.parse.bind(null, 'a=b')).to.not.throw(); + expect(Qs.parse('a=b')).to.deep.equal({ a: 'b' }); + expect(Qs.parse.bind(null, 'a[][b]=c')).to.not.throw(); + expect(Qs.parse('a[][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + done(); + }); + + it('parses a string with an alternative string delimiter', function (done) { + + expect(Qs.parse('a=b;c=d', { delimiter: ';' })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('parses a string with an alternative RegExp delimiter', function (done) { + + expect(Qs.parse('a=b; c=d', { delimiter: /[;,] */ })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('does not use non-splittable objects as delimiters', function (done) { + + expect(Qs.parse('a=b&c=d', { delimiter: true })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('allows overriding parameter limit', function (done) { + + expect(Qs.parse('a=b&c=d', { parameterLimit: 1 })).to.deep.equal({ a: 'b' }); + done(); + }); + + it('allows setting the parameter limit to Infinity', function (done) { + + expect(Qs.parse('a=b&c=d', { parameterLimit: Infinity })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('allows overriding array limit', function (done) { + + expect(Qs.parse('a[0]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '0': 'b' } }); + expect(Qs.parse('a[-1]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '-1': 'b' } }); + expect(Qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 })).to.deep.equal({ a: { '0': 'b', '1': 'c' } }); + done(); + }); + + it('parses an object', function (done) { + + var input = { + 'user[name]': {'pop[bob]': 3}, + 'user[email]': null + }; + + var expected = { + 'user': { + 'name': {'pop[bob]': 3}, + 'email': null + } + }; + + var result = Qs.parse(input); + + expect(result).to.deep.equal(expected); + done(); + }); + + it('parses an object and not child values', function (done) { + + var input = { + 'user[name]': {'pop[bob]': { 'test': 3 }}, + 'user[email]': null + }; + + var expected = { + 'user': { + 'name': {'pop[bob]': { 'test': 3 }}, + 'email': null + } + }; + + var result = Qs.parse(input); + + expect(result).to.deep.equal(expected); + done(); + }); + + it('does not blow up when Buffer global is missing', function (done) { + + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = Qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + expect(result).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('does not crash when using invalid dot notation', function (done) { + + expect(Qs.parse('roomInfoList[0].childrenAges[0]=15&roomInfoList[0].numberOfAdults=2')).to.deep.equal({ roomInfoList: [['15', '2']] }); + done(); + }); + + it('does not crash when parsing circular references', function (done) { + + var a = {}; + a.b = a; + + var parsed; + + expect(function () { + + parsed = Qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }).to.not.throw(); + + expect(parsed).to.contain('foo'); + expect(parsed.foo).to.contain('bar', 'baz'); + expect(parsed.foo.bar).to.equal('baz'); + expect(parsed.foo.baz).to.deep.equal(a); + done(); + }); + + it('parses plain objects correctly', function (done) { + + var a = Object.create(null); + a.b = 'c'; + + expect(Qs.parse(a)).to.deep.equal({ b: 'c' }); + var result = Qs.parse({ a: a }); + expect(result).to.contain('a'); + expect(result.a).to.deep.equal(a); + done(); + }); + + it('parses dates correctly', function (done) { + + var now = new Date(); + expect(Qs.parse({ a: now })).to.deep.equal({ a: now }); + done(); + }); + + it('parses regular expressions correctly', function (done) { + + var re = /^test$/; + expect(Qs.parse({ a: re })).to.deep.equal({ a: re }); + done(); + }); +}); diff --git a/node_modules/qs/test/stringify.js b/node_modules/qs/test/stringify.js new file mode 100755 index 0000000..75e397a --- /dev/null +++ b/node_modules/qs/test/stringify.js @@ -0,0 +1,179 @@ +/* eslint no-extend-native:0 */ +// Load modules + +var Code = require('code'); +var Lab = require('lab'); +var Qs = require('../'); + + +// Declare internals + +var internals = {}; + + +// Test shortcuts + +var lab = exports.lab = Lab.script(); +var expect = Code.expect; +var describe = lab.experiment; +var it = lab.test; + + +describe('stringify()', function () { + + it('stringifies a querystring object', function (done) { + + expect(Qs.stringify({ a: 'b' })).to.equal('a=b'); + expect(Qs.stringify({ a: 1 })).to.equal('a=1'); + expect(Qs.stringify({ a: 1, b: 2 })).to.equal('a=1&b=2'); + done(); + }); + + it('stringifies a nested object', function (done) { + + expect(Qs.stringify({ a: { b: 'c' } })).to.equal('a%5Bb%5D=c'); + expect(Qs.stringify({ a: { b: { c: { d: 'e' } } } })).to.equal('a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + done(); + }); + + it('stringifies an array value', function (done) { + + expect(Qs.stringify({ a: ['b', 'c', 'd'] })).to.equal('a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d'); + done(); + }); + + it('omits array indices when asked', function (done) { + + expect(Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false })).to.equal('a=b&a=c&a=d'); + done(); + }); + + it('stringifies a nested array value', function (done) { + + expect(Qs.stringify({ a: { b: ['c', 'd'] } })).to.equal('a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + done(); + }); + + it('stringifies an object inside an array', function (done) { + + expect(Qs.stringify({ a: [{ b: 'c' }] })).to.equal('a%5B0%5D%5Bb%5D=c'); + expect(Qs.stringify({ a: [{ b: { c: [1] } }] })).to.equal('a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1'); + done(); + }); + + it('does not omit object keys when indices = false', function (done) { + + expect(Qs.stringify({ a: [{ b: 'c' }] }, { indices: false })).to.equal('a%5Bb%5D=c'); + done(); + }); + + it('stringifies a complicated object', function (done) { + + expect(Qs.stringify({ a: { b: 'c', d: 'e' } })).to.equal('a%5Bb%5D=c&a%5Bd%5D=e'); + done(); + }); + + it('stringifies an empty value', function (done) { + + expect(Qs.stringify({ a: '' })).to.equal('a='); + expect(Qs.stringify({ a: '', b: '' })).to.equal('a=&b='); + expect(Qs.stringify({ a: null })).to.equal('a='); + expect(Qs.stringify({ a: { b: null } })).to.equal('a%5Bb%5D='); + done(); + }); + + it('stringifies an empty object', function (done) { + + var obj = Object.create(null); + obj.a = 'b'; + expect(Qs.stringify(obj)).to.equal('a=b'); + done(); + }); + + it('returns an empty string for invalid input', function (done) { + + expect(Qs.stringify(undefined)).to.equal(''); + expect(Qs.stringify(false)).to.equal(''); + expect(Qs.stringify(null)).to.equal(''); + expect(Qs.stringify('')).to.equal(''); + done(); + }); + + it('stringifies an object with an empty object as a child', function (done) { + + var obj = { + a: Object.create(null) + }; + + obj.a.b = 'c'; + expect(Qs.stringify(obj)).to.equal('a%5Bb%5D=c'); + done(); + }); + + it('drops keys with a value of undefined', function (done) { + + expect(Qs.stringify({ a: undefined })).to.equal(''); + expect(Qs.stringify({ a: { b: undefined, c: null } })).to.equal('a%5Bc%5D='); + done(); + }); + + it('url encodes values', function (done) { + + expect(Qs.stringify({ a: 'b c' })).to.equal('a=b%20c'); + done(); + }); + + it('stringifies a date', function (done) { + + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + expect(Qs.stringify({ a: now })).to.equal(str); + done(); + }); + + it('stringifies the weird object from qs', function (done) { + + expect(Qs.stringify({ 'my weird field': 'q1!2"\'w$5&7/z8)?' })).to.equal('my%20weird%20field=q1!2%22\'w%245%267%2Fz8)%3F'); + done(); + }); + + it('skips properties that are part of the object prototype', function (done) { + + Object.prototype.crash = 'test'; + expect(Qs.stringify({ a: 'b'})).to.equal('a=b'); + expect(Qs.stringify({ a: { b: 'c' } })).to.equal('a%5Bb%5D=c'); + delete Object.prototype.crash; + done(); + }); + + it('stringifies boolean values', function (done) { + + expect(Qs.stringify({ a: true })).to.equal('a=true'); + expect(Qs.stringify({ a: { b: true } })).to.equal('a%5Bb%5D=true'); + expect(Qs.stringify({ b: false })).to.equal('b=false'); + expect(Qs.stringify({ b: { c: false } })).to.equal('b%5Bc%5D=false'); + done(); + }); + + it('stringifies buffer values', function (done) { + + expect(Qs.stringify({ a: new Buffer('test') })).to.equal('a=test'); + expect(Qs.stringify({ a: { b: new Buffer('test') } })).to.equal('a%5Bb%5D=test'); + done(); + }); + + it('stringifies an object using an alternative delimiter', function (done) { + + expect(Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' })).to.equal('a=b;c=d'); + done(); + }); + + it('doesn\'t blow up when Buffer global is missing', function (done) { + + var tempBuffer = global.Buffer; + delete global.Buffer; + expect(Qs.stringify({ a: 'b', c: 'd' })).to.equal('a=b&c=d'); + global.Buffer = tempBuffer; + done(); + }); +}); diff --git a/node_modules/read-pkg-up/index.js b/node_modules/read-pkg-up/index.js new file mode 100644 index 0000000..beb3d48 --- /dev/null +++ b/node_modules/read-pkg-up/index.js @@ -0,0 +1,31 @@ +'use strict'; +var findUp = require('find-up'); +var readPkg = require('read-pkg'); + +module.exports = function (opts) { + return findUp('package.json', opts).then(function (fp) { + if (!fp) { + return {}; + } + + return readPkg(fp, opts).then(function (pkg) { + return { + pkg: pkg, + path: fp + }; + }); + }); +}; + +module.exports.sync = function (opts) { + var fp = findUp.sync('package.json', opts); + + if (!fp) { + return {}; + } + + return { + pkg: readPkg.sync(fp, opts), + path: fp + }; +}; diff --git a/node_modules/read-pkg-up/license b/node_modules/read-pkg-up/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/read-pkg-up/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/read-pkg-up/package.json b/node_modules/read-pkg-up/package.json new file mode 100644 index 0000000..53ffc04 --- /dev/null +++ b/node_modules/read-pkg-up/package.json @@ -0,0 +1,122 @@ +{ + "_args": [ + [ + { + "raw": "read-pkg-up@^1.0.1", + "scope": null, + "escapedName": "read-pkg-up", + "name": "read-pkg-up", + "rawSpec": "^1.0.1", + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/meow" + ] + ], + "_from": "read-pkg-up@>=1.0.1 <2.0.0", + "_id": "read-pkg-up@1.0.1", + "_inCache": true, + "_location": "/read-pkg-up", + "_nodeVersion": "0.12.7", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.11.3", + "_phantomChildren": {}, + "_requested": { + "raw": "read-pkg-up@^1.0.1", + "scope": null, + "escapedName": "read-pkg-up", + "name": "read-pkg-up", + "rawSpec": "^1.0.1", + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/meow" + ], + "_resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "_shasum": "9d63c13276c065918d57f002a57f40a1b643fb02", + "_shrinkwrap": null, + "_spec": "read-pkg-up@^1.0.1", + "_where": "/home/burchettm/statsbot/node_modules/meow", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/read-pkg-up/issues" + }, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "description": "Read the closest package.json file", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "9d63c13276c065918d57f002a57f40a1b643fb02", + "tarball": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "27ec7c844b495a39eea7859c5f4d4721ebf60e8e", + "homepage": "https://github.com/sindresorhus/read-pkg-up", + "keywords": [ + "json", + "read", + "parse", + "file", + "fs", + "graceful", + "load", + "pkg", + "package", + "find", + "up", + "find-up", + "findup", + "look-up", + "look", + "file", + "search", + "match", + "package", + "resolve", + "parent", + "parents", + "folder", + "directory", + "dir", + "walk", + "walking", + "path" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "read-pkg-up", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/read-pkg-up.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.1" +} diff --git a/node_modules/read-pkg-up/readme.md b/node_modules/read-pkg-up/readme.md new file mode 100644 index 0000000..dbd88f3 --- /dev/null +++ b/node_modules/read-pkg-up/readme.md @@ -0,0 +1,79 @@ +# read-pkg-up [![Build Status](https://travis-ci.org/sindresorhus/read-pkg-up.svg?branch=master)](https://travis-ci.org/sindresorhus/read-pkg-up) + +> Read the closest package.json file + + +## Why + +- [Finds the closest package.json](https://github.com/sindresorhus/find-up) +- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs) +- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom) +- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json) +- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) + + +## Install + +``` +$ npm install --save read-pkg-up +``` + + +## Usage + +```js +var readPkgUp = require('read-pkg-up'); + +readPkgUp().then(function (result) { + console.log(result); + /* + { + pkg: { + name: 'awesome-package', + version: '1.0.0', + ... + }, + path: '/Users/sindresorhus/dev/awesome-package' + } + */ +}); +``` + + +## API + +### readPkgUp([options]) + +Returns a promise that resolves to a result object. + +### readPkgUp.sync([options]) + +Returns a result object. + +#### options + +##### cwd + +Type: `string` +Default: `.` + +Directory to start looking for a package.json file. + +##### normalize + +Type: `boolean` +Default: `true` + +[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data. + + +## Related + +- [read-pkg](https://github.com/sindresorhus/read-pkg) - Read a package.json file +- [find-up](https://github.com/sindresorhus/find-up) - Find a file by walking up parent directories +- [pkg-conf](https://github.com/sindresorhus/pkg-conf) - Get namespaced config from the closest package.json + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/read-pkg/index.js b/node_modules/read-pkg/index.js new file mode 100644 index 0000000..c5c3afa --- /dev/null +++ b/node_modules/read-pkg/index.js @@ -0,0 +1,48 @@ +'use strict'; +var path = require('path'); +var loadJsonFile = require('load-json-file'); +var normalizePackageData = require('normalize-package-data'); +var pathType = require('path-type'); + +module.exports = function (fp, opts) { + if (typeof fp !== 'string') { + opts = fp; + fp = '.'; + } + + opts = opts || {}; + + return pathType.dir(fp) + .then(function (isDir) { + if (isDir) { + fp = path.join(fp, 'package.json'); + } + + return loadJsonFile(fp); + }) + .then(function (x) { + if (opts.normalize !== false) { + normalizePackageData(x); + } + + return x; + }); +}; + +module.exports.sync = function (fp, opts) { + if (typeof fp !== 'string') { + opts = fp; + fp = '.'; + } + + opts = opts || {}; + fp = pathType.dirSync(fp) ? path.join(fp, 'package.json') : fp; + + var x = loadJsonFile.sync(fp); + + if (opts.normalize !== false) { + normalizePackageData(x); + } + + return x; +}; diff --git a/node_modules/read-pkg/license b/node_modules/read-pkg/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/read-pkg/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/read-pkg/package.json b/node_modules/read-pkg/package.json new file mode 100644 index 0000000..ff00f18 --- /dev/null +++ b/node_modules/read-pkg/package.json @@ -0,0 +1,105 @@ +{ + "_args": [ + [ + { + "raw": "read-pkg@^1.0.0", + "scope": null, + "escapedName": "read-pkg", + "name": "read-pkg", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/read-pkg-up" + ] + ], + "_from": "read-pkg@>=1.0.0 <2.0.0", + "_id": "read-pkg@1.1.0", + "_inCache": true, + "_location": "/read-pkg", + "_nodeVersion": "3.0.0", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.13.3", + "_phantomChildren": {}, + "_requested": { + "raw": "read-pkg@^1.0.0", + "scope": null, + "escapedName": "read-pkg", + "name": "read-pkg", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/read-pkg-up" + ], + "_resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "_shasum": "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28", + "_shrinkwrap": null, + "_spec": "read-pkg@^1.0.0", + "_where": "/home/burchettm/statsbot/node_modules/read-pkg-up", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/read-pkg/issues" + }, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "description": "Read a package.json file", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28", + "tarball": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "9448d32b2ebcd65fc0547def3cfe5b28ef522e68", + "homepage": "https://github.com/sindresorhus/read-pkg", + "keywords": [ + "json", + "read", + "parse", + "file", + "fs", + "graceful", + "load", + "pkg", + "package", + "normalize" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "read-pkg", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/read-pkg.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.1.0" +} diff --git a/node_modules/read-pkg/readme.md b/node_modules/read-pkg/readme.md new file mode 100644 index 0000000..9a0d4cc --- /dev/null +++ b/node_modules/read-pkg/readme.md @@ -0,0 +1,79 @@ +# read-pkg [![Build Status](https://travis-ci.org/sindresorhus/read-pkg.svg?branch=master)](https://travis-ci.org/sindresorhus/read-pkg) + +> Read a package.json file + + +## Why + +- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs) +- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom) +- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json) +- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) + + +## Install + +``` +$ npm install --save read-pkg +``` + + +## Usage + +```js +var readPkg = require('read-pkg'); + +readPkg().then(function (pkg) { + console.log(pkg); + //=> {name: 'read-pkg', ...} +}); + +readPkg(__dirname).then(function (pkg) { + console.log(pkg); + //=> {name: 'read-pkg', ...} +}); + +readPkg(path.join('unicorn', 'package.json')).then(function (pkg) { + console.log(pkg); + //=> {name: 'read-pkg', ...} +}); +``` + + +## API + +### readPkg([path], [options]) + +Returns a promise that resolves to the parsed JSON. + +### readPkg.sync([path], [options]) + +Returns the parsed JSON. + +#### path + +Type: `string` +Default: `.` + +Path to a `package.json` file or its directory. + +#### options + +##### normalize + +Type: `boolean` +Default: `true` + +[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data. + + +## Related + +- [read-pkg-up](https://github.com/sindresorhus/read-pkg-up) - Read the closest package.json file +- [write-pkg](https://github.com/sindresorhus/write-pkg) - Write a `package.json` file +- [load-json-file](https://github.com/sindresorhus/load-json-file) - Read and parse a JSON file + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/readable-stream/.npmignore b/node_modules/readable-stream/.npmignore new file mode 100644 index 0000000..38344f8 --- /dev/null +++ b/node_modules/readable-stream/.npmignore @@ -0,0 +1,5 @@ +build/ +test/ +examples/ +fs.js +zlib.js \ No newline at end of file diff --git a/node_modules/readable-stream/LICENSE b/node_modules/readable-stream/LICENSE new file mode 100644 index 0000000..0c44ae7 --- /dev/null +++ b/node_modules/readable-stream/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Isaac Z. Schlueter ("Author") +All rights reserved. + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/readable-stream/README.md b/node_modules/readable-stream/README.md new file mode 100644 index 0000000..34c1189 --- /dev/null +++ b/node_modules/readable-stream/README.md @@ -0,0 +1,15 @@ +# readable-stream + +***Node-core streams for userland*** + +[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true)](https://nodei.co/npm/readable-stream/) +[![NPM](https://nodei.co/npm-dl/readable-stream.png)](https://nodei.co/npm/readable-stream/) + +This package is a mirror of the Streams2 and Streams3 implementations in Node-core. + +If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core. + +**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12. + +**readable-stream** uses proper patch-level versioning so if you pin to `"~1.0.0"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `"~1.1.0"` + diff --git a/node_modules/readable-stream/duplex.js b/node_modules/readable-stream/duplex.js new file mode 100644 index 0000000..ca807af --- /dev/null +++ b/node_modules/readable-stream/duplex.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/readable-stream/lib/_stream_duplex.js new file mode 100644 index 0000000..b513d61 --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_duplex.js @@ -0,0 +1,89 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +module.exports = Duplex; + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +} +/**/ + + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +forEach(objectKeys(Writable.prototype), function(method) { + if (!Duplex.prototype[method]) + Duplex.prototype[method] = Writable.prototype[method]; +}); + +function Duplex(options) { + if (!(this instanceof Duplex)) + return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) + this.readable = false; + + if (options && options.writable === false) + this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) + this.allowHalfOpen = false; + + this.once('end', onend); +} + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) + return; + + // no more data can be written. + // But allow more writes to happen in this tick. + process.nextTick(this.end.bind(this)); +} + +function forEach (xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} diff --git a/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/readable-stream/lib/_stream_passthrough.js new file mode 100644 index 0000000..895ca50 --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_passthrough.js @@ -0,0 +1,46 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) + return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function(chunk, encoding, cb) { + cb(null, chunk); +}; diff --git a/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 0000000..0ca7705 --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,959 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + + +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Readable.ReadableState = ReadableState; + +var EE = require('events').EventEmitter; + +/**/ +if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +var Stream = require('stream'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var StringDecoder; + +util.inherits(Readable, Stream); + +function ReadableState(options, stream) { + options = options || {}; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + this.buffer = []; + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = false; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // In streams that never have any data, and do push(null) right away, + // the consumer can miss the 'end' event if they do some I/O before + // consuming the stream. So, we don't emit('end') until some reading + // happens. + this.calledRead = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, becuase any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + if (!(this instanceof Readable)) + return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + Stream.call(this); +} + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function(chunk, encoding) { + var state = this._readableState; + + if (typeof chunk === 'string' && !state.objectMode) { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = new Buffer(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function(chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); +}; + +function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (chunk === null || chunk === undefined) { + state.reading = false; + if (!state.ended) + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var e = new Error('stream.unshift() after end event'); + stream.emit('error', e); + } else { + if (state.decoder && !addToFront && !encoding) + chunk = state.decoder.write(chunk); + + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) { + state.buffer.unshift(chunk); + } else { + state.reading = false; + state.buffer.push(chunk); + } + + if (state.needReadable) + emitReadable(stream); + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); +} + + + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && + (state.needReadable || + state.length < state.highWaterMark || + state.length === 0); +} + +// backwards compatibility. +Readable.prototype.setEncoding = function(enc) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; +}; + +// Don't raise the hwm > 128MB +var MAX_HWM = 0x800000; +function roundUpToNextPowerOf2(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 + n--; + for (var p = 1; p < 32; p <<= 1) n |= n >> p; + n++; + } + return n; +} + +function howMuchToRead(n, state) { + if (state.length === 0 && state.ended) + return 0; + + if (state.objectMode) + return n === 0 ? 0 : 1; + + if (isNaN(n) || n === null) { + // only flow one buffer at a time + if (state.flowing && state.buffer.length) + return state.buffer[0].length; + else + return state.length; + } + + if (n <= 0) + return 0; + + // If we're asking for more than the target buffer level, + // then raise the water mark. Bump up to the next highest + // power of 2, to prevent increasing it excessively in tiny + // amounts. + if (n > state.highWaterMark) + state.highWaterMark = roundUpToNextPowerOf2(n); + + // don't have that much. return null, unless we've ended. + if (n > state.length) { + if (!state.ended) { + state.needReadable = true; + return 0; + } else + return state.length; + } + + return n; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function(n) { + var state = this._readableState; + state.calledRead = true; + var nOrig = n; + + if (typeof n !== 'number' || n > 0) + state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && + state.needReadable && + (state.length >= state.highWaterMark || state.ended)) { + emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) + endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + + // if we currently have less than the highWaterMark, then also read some + if (state.length - n <= state.highWaterMark) + doRead = true; + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) + doRead = false; + + if (doRead) { + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) + state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + } + + // If _read called its callback synchronously, then `reading` + // will be false, and we need to re-evaluate how much data we + // can return to the user. + if (doRead && !state.reading) + n = howMuchToRead(nOrig, state); + + var ret; + if (n > 0) + ret = fromList(n, state); + else + ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } + + state.length -= n; + + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (state.length === 0 && !state.ended) + state.needReadable = true; + + // If we happened to read() exactly the remaining amount in the + // buffer, and the EOF has been seen at this point, then make sure + // that we emit 'end' on the very next tick. + if (state.ended && !state.endEmitted && state.length === 0) + endReadable(this); + + return ret; +}; + +function chunkInvalid(state, chunk) { + var er = null; + if (!Buffer.isBuffer(chunk) && + 'string' !== typeof chunk && + chunk !== null && + chunk !== undefined && + !state.objectMode && + !er) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + + +function onEofChunk(stream, state) { + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // if we've ended and we have some data left, then emit + // 'readable' now to make sure it gets picked up. + if (state.length > 0) + emitReadable(stream); + else + endReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (state.emittedReadable) + return; + + state.emittedReadable = true; + if (state.sync) + process.nextTick(function() { + emitReadable_(stream); + }); + else + emitReadable_(stream); +} + +function emitReadable_(stream) { + stream.emit('readable'); +} + + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(function() { + maybeReadMore_(stream, state); + }); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && + state.length < state.highWaterMark) { + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break; + else + len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function(n) { + this.emit('error', new Error('not implemented')); +}; + +Readable.prototype.pipe = function(dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && + dest !== process.stdout && + dest !== process.stderr; + + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) + process.nextTick(endFn); + else + src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + if (readable !== src) return; + cleanup(); + } + + function onend() { + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + function cleanup() { + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (!dest._writableState || dest._writableState.needDrain) + ondrain(); + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + unpipe(); + dest.removeListener('error', onerror); + if (EE.listenerCount(dest, 'error') === 0) + dest.emit('error', er); + } + // This is a brutally ugly hack to make sure that our error handler + // is attached before any userland ones. NEVER DO THIS. + if (!dest._events || !dest._events.error) + dest.on('error', onerror); + else if (isArray(dest._events.error)) + dest._events.error.unshift(onerror); + else + dest._events.error = [onerror, dest._events.error]; + + + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + // the handler that waits for readable events after all + // the data gets sucked out in flow. + // This would be easier to follow with a .once() handler + // in flow(), but that is too slow. + this.on('readable', pipeOnReadable); + + state.flowing = true; + process.nextTick(function() { + flow(src); + }); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function() { + var dest = this; + var state = src._readableState; + state.awaitDrain--; + if (state.awaitDrain === 0) + flow(src); + }; +} + +function flow(src) { + var state = src._readableState; + var chunk; + state.awaitDrain = 0; + + function write(dest, i, list) { + var written = dest.write(chunk); + if (false === written) { + state.awaitDrain++; + } + } + + while (state.pipesCount && null !== (chunk = src.read())) { + + if (state.pipesCount === 1) + write(state.pipes, 0, null); + else + forEach(state.pipes, write); + + src.emit('data', chunk); + + // if anyone needs a drain, then we have to wait for that. + if (state.awaitDrain > 0) + return; + } + + // if every destination was unpiped, either before entering this + // function, or in the while loop, then stop flowing. + // + // NB: This is a pretty rare edge case. + if (state.pipesCount === 0) { + state.flowing = false; + + // if there were data event listeners added, then switch to old mode. + if (EE.listenerCount(src, 'data') > 0) + emitDataEvents(src); + return; + } + + // at this point, no one needed a drain, so we just ran out of data + // on the next readable event, start it over again. + state.ranOut = true; +} + +function pipeOnReadable() { + if (this._readableState.ranOut) { + this._readableState.ranOut = false; + flow(this); + } +} + + +Readable.prototype.unpipe = function(dest) { + var state = this._readableState; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) + return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) + return this; + + if (!dest) + dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + this.removeListener('readable', pipeOnReadable); + state.flowing = false; + if (dest) + dest.emit('unpipe', this); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + this.removeListener('readable', pipeOnReadable); + state.flowing = false; + + for (var i = 0; i < len; i++) + dests[i].emit('unpipe', this); + return this; + } + + // try to find the right one. + var i = indexOf(state.pipes, dest); + if (i === -1) + return this; + + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) + state.pipes = state.pipes[0]; + + dest.emit('unpipe', this); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function(ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data' && !this._readableState.flowing) + emitDataEvents(this); + + if (ev === 'readable' && this.readable) { + var state = this._readableState; + if (!state.readableListening) { + state.readableListening = true; + state.emittedReadable = false; + state.needReadable = true; + if (!state.reading) { + this.read(0); + } else if (state.length) { + emitReadable(this, state); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function() { + emitDataEvents(this); + this.read(0); + this.emit('resume'); +}; + +Readable.prototype.pause = function() { + emitDataEvents(this, true); + this.emit('pause'); +}; + +function emitDataEvents(stream, startPaused) { + var state = stream._readableState; + + if (state.flowing) { + // https://github.com/isaacs/readable-stream/issues/16 + throw new Error('Cannot switch to old mode now.'); + } + + var paused = startPaused || false; + var readable = false; + + // convert to an old-style stream. + stream.readable = true; + stream.pipe = Stream.prototype.pipe; + stream.on = stream.addListener = Stream.prototype.on; + + stream.on('readable', function() { + readable = true; + + var c; + while (!paused && (null !== (c = stream.read()))) + stream.emit('data', c); + + if (c === null) { + readable = false; + stream._readableState.needReadable = true; + } + }); + + stream.pause = function() { + paused = true; + this.emit('pause'); + }; + + stream.resume = function() { + paused = false; + if (readable) + process.nextTick(function() { + stream.emit('readable'); + }); + else + this.read(0); + this.emit('resume'); + }; + + // now make it start, just in case it hadn't already. + stream.emit('readable'); +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function(stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function() { + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) + self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function(chunk) { + if (state.decoder) + chunk = state.decoder.write(chunk); + if (!chunk || !state.objectMode && !chunk.length) + return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (typeof stream[i] === 'function' && + typeof this[i] === 'undefined') { + this[i] = function(method) { return function() { + return stream[method].apply(stream, arguments); + }}(i); + } + } + + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function(ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function(n) { + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; +}; + + + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +function fromList(n, state) { + var list = state.buffer; + var length = state.length; + var stringMode = !!state.decoder; + var objectMode = !!state.objectMode; + var ret; + + // nothing in the list, definitely empty. + if (list.length === 0) + return null; + + if (length === 0) + ret = null; + else if (objectMode) + ret = list.shift(); + else if (!n || n >= length) { + // read it all, truncate the array. + if (stringMode) + ret = list.join(''); + else + ret = Buffer.concat(list, length); + list.length = 0; + } else { + // read just some of it. + if (n < list[0].length) { + // just take a part of the first list item. + // slice is the same for buffers and strings. + var buf = list[0]; + ret = buf.slice(0, n); + list[0] = buf.slice(n); + } else if (n === list[0].length) { + // first list is a perfect match + ret = list.shift(); + } else { + // complex case. + // we have enough to cover it, but it spans past the first buffer. + if (stringMode) + ret = ''; + else + ret = new Buffer(n); + + var c = 0; + for (var i = 0, l = list.length; i < l && c < n; i++) { + var buf = list[0]; + var cpy = Math.min(n - c, buf.length); + + if (stringMode) + ret += buf.slice(0, cpy); + else + buf.copy(ret, c, 0, cpy); + + if (cpy < buf.length) + list[0] = buf.slice(cpy); + else + list.shift(); + + c += cpy; + } + } + } + + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) + throw new Error('endReadable called on non-empty stream'); + + if (!state.endEmitted && state.calledRead) { + state.ended = true; + process.nextTick(function() { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } + }); + } +} + +function forEach (xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} + +function indexOf (xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} diff --git a/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 0000000..eb188df --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,210 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + + +function TransformState(options, stream) { + this.afterTransform = function(er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; +} + +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) + return stream.emit('error', new Error('no writecb in Transform class')); + + ts.writechunk = null; + ts.writecb = null; + + if (data !== null && data !== undefined) + stream.push(data); + + if (cb) + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } +} + + +function Transform(options) { + if (!(this instanceof Transform)) + return new Transform(options); + + Duplex.call(this, options); + + var ts = this._transformState = new TransformState(options, this); + + // when the writable side finishes, then flush out anything remaining. + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + this.once('finish', function() { + if ('function' === typeof this._flush) + this._flush(function(er) { + done(stream, er); + }); + else + done(stream); + }); +} + +Transform.prototype.push = function(chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function(chunk, encoding, cb) { + throw new Error('not implemented'); +}; + +Transform.prototype._write = function(chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || + rs.needReadable || + rs.length < rs.highWaterMark) + this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function(n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + + +function done(stream, er) { + if (er) + return stream.emit('error', er); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var rs = stream._readableState; + var ts = stream._transformState; + + if (ws.length) + throw new Error('calling transform done when ws.length != 0'); + + if (ts.transforming) + throw new Error('calling transform done when still transforming'); + + return stream.push(null); +} diff --git a/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 0000000..d0254d5 --- /dev/null +++ b/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,387 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, cb), and it'll handle all +// the drain event emission and buffering. + +module.exports = Writable; + +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Writable.WritableState = WritableState; + + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + + +var Stream = require('stream'); + +util.inherits(Writable, Stream); + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; +} + +function WritableState(options, stream) { + options = options || {}; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, becuase any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function(er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.buffer = []; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; +} + +function Writable(options) { + var Duplex = require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) + return new Writable(options); + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function() { + this.emit('error', new Error('Cannot pipe. Not readable.')); +}; + + +function writeAfterEnd(stream, state, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); +} + +// If we get something that is not a buffer, string, null, or undefined, +// and we're not in objectMode, then that's an error. +// Otherwise stream chunks are all considered to be of length=1, and the +// watermarks determine how many objects to keep in the buffer, rather than +// how many bytes or characters. +function validChunk(stream, state, chunk, cb) { + var valid = true; + if (!Buffer.isBuffer(chunk) && + 'string' !== typeof chunk && + chunk !== null && + chunk !== undefined && + !state.objectMode) { + var er = new TypeError('Invalid non-string/buffer chunk'); + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); + valid = false; + } + return valid; +} + +Writable.prototype.write = function(chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (Buffer.isBuffer(chunk)) + encoding = 'buffer'; + else if (!encoding) + encoding = state.defaultEncoding; + + if (typeof cb !== 'function') + cb = function() {}; + + if (state.ended) + writeAfterEnd(this, state, cb); + else if (validChunk(this, state, chunk, cb)) + ret = writeOrBuffer(this, state, chunk, encoding, cb); + + return ret; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && + state.decodeStrings !== false && + typeof chunk === 'string') { + chunk = new Buffer(chunk, encoding); + } + return chunk; +} + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + if (Buffer.isBuffer(chunk)) + encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) + state.needDrain = true; + + if (state.writing) + state.buffer.push(new WriteReq(chunk, encoding, cb)); + else + doWrite(stream, state, len, chunk, encoding, cb); + + return ret; +} + +function doWrite(stream, state, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + if (sync) + process.nextTick(function() { + cb(er); + }); + else + cb(er); + + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) + onwriteError(stream, state, sync, er, cb); + else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(stream, state); + + if (!finished && !state.bufferProcessing && state.buffer.length) + clearBuffer(stream, state); + + if (sync) { + process.nextTick(function() { + afterWrite(stream, state, finished, cb); + }); + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) + onwriteDrain(stream, state); + cb(); + if (finished) + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + + for (var c = 0; c < state.buffer.length; c++) { + var entry = state.buffer[c]; + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, len, chunk, encoding, cb); + + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + c++; + break; + } + } + + state.bufferProcessing = false; + if (c < state.buffer.length) + state.buffer = state.buffer.slice(c); + else + state.buffer.length = 0; +} + +Writable.prototype._write = function(chunk, encoding, cb) { + cb(new Error('not implemented')); +}; + +Writable.prototype.end = function(chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (typeof chunk !== 'undefined' && chunk !== null) + this.write(chunk, encoding); + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) + endWritable(this, state, cb); +}; + + +function needFinish(stream, state) { + return (state.ending && + state.length === 0 && + !state.finished && + !state.writing); +} + +function finishMaybe(stream, state) { + var need = needFinish(stream, state); + if (need) { + state.finished = true; + stream.emit('finish'); + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) + process.nextTick(cb); + else + stream.once('finish', cb); + } + state.ended = true; +} diff --git a/node_modules/readable-stream/package.json b/node_modules/readable-stream/package.json new file mode 100644 index 0000000..9cdcb17 --- /dev/null +++ b/node_modules/readable-stream/package.json @@ -0,0 +1,102 @@ +{ + "_args": [ + [ + { + "raw": "readable-stream@1.0.27-1", + "scope": null, + "escapedName": "readable-stream", + "name": "readable-stream", + "rawSpec": "1.0.27-1", + "spec": "1.0.27-1", + "type": "version" + }, + "/home/burchettm/statsbot/node_modules/superagent" + ] + ], + "_from": "readable-stream@1.0.27-1", + "_id": "readable-stream@1.0.27-1", + "_inCache": true, + "_location": "/readable-stream", + "_npmUser": { + "name": "rvagg", + "email": "rod@vagg.org" + }, + "_npmVersion": "1.4.3", + "_phantomChildren": {}, + "_requested": { + "raw": "readable-stream@1.0.27-1", + "scope": null, + "escapedName": "readable-stream", + "name": "readable-stream", + "rawSpec": "1.0.27-1", + "spec": "1.0.27-1", + "type": "version" + }, + "_requiredBy": [ + "/superagent" + ], + "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", + "_shasum": "6b67983c20357cefd07f0165001a16d710d91078", + "_shrinkwrap": null, + "_spec": "readable-stream@1.0.27-1", + "_where": "/home/burchettm/statsbot/node_modules/superagent", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "browser": { + "util": false + }, + "bugs": { + "url": "https://github.com/isaacs/readable-stream/issues" + }, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + }, + "description": "Streams2, a user-land copy of the stream library from Node.js v0.10.x", + "devDependencies": { + "tap": "~0.2.6" + }, + "directories": {}, + "dist": { + "shasum": "6b67983c20357cefd07f0165001a16d710d91078", + "tarball": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz" + }, + "homepage": "https://github.com/isaacs/readable-stream", + "keywords": [ + "readable", + "stream", + "pipe" + ], + "license": "MIT", + "main": "readable.js", + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + }, + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + { + "name": "rvagg", + "email": "rod@vagg.org" + } + ], + "name": "readable-stream", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/readable-stream.git" + }, + "scripts": { + "test": "tap test/simple/*.js" + }, + "version": "1.0.27-1" +} diff --git a/node_modules/readable-stream/passthrough.js b/node_modules/readable-stream/passthrough.js new file mode 100644 index 0000000..27e8d8a --- /dev/null +++ b/node_modules/readable-stream/passthrough.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/readable-stream/readable.js b/node_modules/readable-stream/readable.js new file mode 100644 index 0000000..4d1ddfc --- /dev/null +++ b/node_modules/readable-stream/readable.js @@ -0,0 +1,6 @@ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/readable-stream/transform.js b/node_modules/readable-stream/transform.js new file mode 100644 index 0000000..5d482f0 --- /dev/null +++ b/node_modules/readable-stream/transform.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/readable-stream/writable.js b/node_modules/readable-stream/writable.js new file mode 100644 index 0000000..e1e9efd --- /dev/null +++ b/node_modules/readable-stream/writable.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/redent/index.js b/node_modules/redent/index.js new file mode 100644 index 0000000..2b92020 --- /dev/null +++ b/node_modules/redent/index.js @@ -0,0 +1,7 @@ +'use strict'; +var stripIndent = require('strip-indent'); +var indentString = require('indent-string'); + +module.exports = function (str, count, indent) { + return indentString(stripIndent(str), indent || ' ', count || 0); +}; diff --git a/node_modules/redent/license b/node_modules/redent/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/redent/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/redent/package.json b/node_modules/redent/package.json new file mode 100644 index 0000000..f49be85 --- /dev/null +++ b/node_modules/redent/package.json @@ -0,0 +1,106 @@ +{ + "_args": [ + [ + { + "raw": "redent@^1.0.0", + "scope": null, + "escapedName": "redent", + "name": "redent", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/meow" + ] + ], + "_from": "redent@>=1.0.0 <2.0.0", + "_id": "redent@1.0.0", + "_inCache": true, + "_location": "/redent", + "_nodeVersion": "4.1.1", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.14.4", + "_phantomChildren": {}, + "_requested": { + "raw": "redent@^1.0.0", + "scope": null, + "escapedName": "redent", + "name": "redent", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/meow" + ], + "_resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "_shasum": "cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde", + "_shrinkwrap": null, + "_spec": "redent@^1.0.0", + "_where": "/home/burchettm/statsbot/node_modules/meow", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/redent/issues" + }, + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "description": "Strip redundant indentation and indent the string", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde", + "tarball": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "97d9db1dbd5894fe1b14e01040da283b8d53409d", + "homepage": "https://github.com/sindresorhus/redent", + "keywords": [ + "string", + "str", + "strip", + "trim", + "indent", + "indentation", + "add", + "reindent", + "normalize", + "remove", + "whitespace", + "space" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "redent", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/redent.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.0" +} diff --git a/node_modules/redent/readme.md b/node_modules/redent/readme.md new file mode 100644 index 0000000..8e7a807 --- /dev/null +++ b/node_modules/redent/readme.md @@ -0,0 +1,48 @@ +# redent [![Build Status](https://travis-ci.org/sindresorhus/redent.svg?branch=master)](https://travis-ci.org/sindresorhus/redent) + +> [Strip redundant indentation](https://github.com/sindresorhus/strip-indent) and [indent the string](https://github.com/sindresorhus/indent-string) + + +## Install + +``` +$ npm install --save redent +``` + + +## Usage + +```js +const redent = require('redent'); + +redent('\n foo\n bar\n', 1); +//=> '\n foo\n bar\n' +``` + + +## API + +### redent(input, [count], [indent]) + +#### input + +Type: `string` + +#### count + +Type: `number` +Default: `0` + +How many times you want `indent` repeated. + +#### indent + +Type: `string` +Default: `' '` + +The string to use for the indent. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/reduce-component/.npmignore b/node_modules/reduce-component/.npmignore new file mode 100644 index 0000000..aa6fd7c --- /dev/null +++ b/node_modules/reduce-component/.npmignore @@ -0,0 +1,3 @@ +components +build +node_modules \ No newline at end of file diff --git a/node_modules/reduce-component/History.md b/node_modules/reduce-component/History.md new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/reduce-component/LICENSE b/node_modules/reduce-component/LICENSE new file mode 100644 index 0000000..2bb9ad2 --- /dev/null +++ b/node_modules/reduce-component/LICENSE @@ -0,0 +1,176 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/reduce-component/Makefile b/node_modules/reduce-component/Makefile new file mode 100644 index 0000000..71e373c --- /dev/null +++ b/node_modules/reduce-component/Makefile @@ -0,0 +1,16 @@ + +build: components index.js + @component build --dev + +components: component.json + @component install --dev + +clean: + rm -fr build components + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter spec + +.PHONY: clean test diff --git a/node_modules/reduce-component/Readme.md b/node_modules/reduce-component/Readme.md new file mode 100644 index 0000000..479ed6f --- /dev/null +++ b/node_modules/reduce-component/Readme.md @@ -0,0 +1,32 @@ + +# reduce + + array reduce + +## Installation + +```sh + $ component install redventures/reduce +``` + +## API + +```js +var reduce = require('reduce'); + +var numbers = [0, 1, 2, 3, 4, 5]; + +var result = reduce(numbers, function(prev, curr){ + return prev + curr; +}); +``` + +## License + +Copyright 2012 Red Ventures + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with the License. You may obtain a copy of the License in the LICENSE file, or at: + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. diff --git a/node_modules/reduce-component/component.json b/node_modules/reduce-component/component.json new file mode 100644 index 0000000..5fe6e17 --- /dev/null +++ b/node_modules/reduce-component/component.json @@ -0,0 +1,13 @@ +{ + "name": "reduce", + "repo": "redventures/reduce", + "description": "Array reduce component", + "version": "1.0.0", + "keywords": ["array", "reduce"], + "dependencies": {}, + "development": {}, + "license": "Apache, Version 2.0", + "scripts": [ + "index.js" + ] +} \ No newline at end of file diff --git a/node_modules/reduce-component/index.js b/node_modules/reduce-component/index.js new file mode 100644 index 0000000..26deede --- /dev/null +++ b/node_modules/reduce-component/index.js @@ -0,0 +1,24 @@ + +/** + * Reduce `arr` with `fn`. + * + * @param {Array} arr + * @param {Function} fn + * @param {Mixed} initial + * + * TODO: combatible error handling? + */ + +module.exports = function(arr, fn, initial){ + var idx = 0; + var len = arr.length; + var curr = arguments.length == 3 + ? initial + : arr[idx++]; + + while (idx < len) { + curr = fn.call(null, curr, arr[idx], ++idx, arr); + } + + return curr; +}; \ No newline at end of file diff --git a/node_modules/reduce-component/package.json b/node_modules/reduce-component/package.json new file mode 100644 index 0000000..a3cb3f9 --- /dev/null +++ b/node_modules/reduce-component/package.json @@ -0,0 +1,80 @@ +{ + "_args": [ + [ + { + "raw": "reduce-component@1.0.1", + "scope": null, + "escapedName": "reduce-component", + "name": "reduce-component", + "rawSpec": "1.0.1", + "spec": "1.0.1", + "type": "version" + }, + "/home/burchettm/statsbot/node_modules/superagent" + ] + ], + "_from": "reduce-component@1.0.1", + "_id": "reduce-component@1.0.1", + "_inCache": true, + "_location": "/reduce-component", + "_npmUser": { + "name": "gjohnson", + "email": "gjj391@gmail.com" + }, + "_npmVersion": "1.3.11", + "_phantomChildren": {}, + "_requested": { + "raw": "reduce-component@1.0.1", + "scope": null, + "escapedName": "reduce-component", + "name": "reduce-component", + "rawSpec": "1.0.1", + "spec": "1.0.1", + "type": "version" + }, + "_requiredBy": [ + "/superagent" + ], + "_resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz", + "_shasum": "e0c93542c574521bea13df0f9488ed82ab77c5da", + "_shrinkwrap": null, + "_spec": "reduce-component@1.0.1", + "_where": "/home/burchettm/statsbot/node_modules/superagent", + "bugs": { + "url": "https://github.com/redventures/reduce/issues" + }, + "component": { + "scripts": { + "reduce": "index.js" + } + }, + "dependencies": {}, + "description": "Array reduce component", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "directories": {}, + "dist": { + "shasum": "e0c93542c574521bea13df0f9488ed82ab77c5da", + "tarball": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz" + }, + "homepage": "https://github.com/redventures/reduce#readme", + "license": "Apache, Version 2.0", + "main": "./index.js", + "maintainers": [ + { + "name": "gjohnson", + "email": "gjj391@gmail.com" + } + ], + "name": "reduce-component", + "optionalDependencies": {}, + "readme": "\n# reduce\n\n array reduce\n\n## Installation\n\n```sh\n $ component install redventures/reduce\n```\n\n## API\n\n```js\nvar reduce = require('reduce');\n\nvar numbers = [0, 1, 2, 3, 4, 5];\n\nvar result = reduce(numbers, function(prev, curr){\n return prev + curr;\n});\n```\n \n## License\n\nCopyright 2012 Red Ventures\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this work except in compliance with the License. You may obtain a copy of the License in the LICENSE file, or at:\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n", + "readmeFilename": "Readme.md", + "repository": { + "type": "git", + "url": "git://github.com/redventures/reduce.git" + }, + "version": "1.0.1" +} diff --git a/node_modules/reduce-component/test/index.html b/node_modules/reduce-component/test/index.html new file mode 100644 index 0000000..6325231 --- /dev/null +++ b/node_modules/reduce-component/test/index.html @@ -0,0 +1,30 @@ + + + reduce component + + + + + + \ No newline at end of file diff --git a/node_modules/reduce-component/test/reduce.js b/node_modules/reduce-component/test/reduce.js new file mode 100644 index 0000000..d44af28 --- /dev/null +++ b/node_modules/reduce-component/test/reduce.js @@ -0,0 +1,49 @@ + +var reduce = require('..'); + +describe('reduce', function(){ + + describe('when adding prev and current', function(){ + it('should be sum all the values', function(){ + var numbers = [2,2,2]; + var fn = function(prev, curr){ + return prev + curr; + }; + + var a = numbers.reduce(fn); + var b = reduce(numbers, fn); + + a.should.equal(6); + b.should.equal(a); + }); + }); + + describe('when passing in an initial value', function(){ + it('should default to it', function(){ + var items = []; + var fn = function(prev){ + return prev; + }; + + var a = items.reduce(fn, 'foo'); + var b = reduce(items, fn, 'foo'); + + a.should.equal('foo'); + b.should.equal(a); + }); + + it('should start with it', function(){ + var items = [10, 10]; + var fn = function(prev, curr){ + return prev + curr; + }; + + var a = items.reduce(fn, 10); + var b = reduce(items, fn, 10); + + a.should.equal(30); + b.should.equal(a); + }); + }); + +}); \ No newline at end of file diff --git a/node_modules/repeating/index.js b/node_modules/repeating/index.js new file mode 100644 index 0000000..ccae0d7 --- /dev/null +++ b/node_modules/repeating/index.js @@ -0,0 +1,24 @@ +'use strict'; +var isFinite = require('is-finite'); + +module.exports = function (str, n) { + if (typeof str !== 'string') { + throw new TypeError('Expected `input` to be a string'); + } + + if (n < 0 || !isFinite(n)) { + throw new TypeError('Expected `count` to be a positive finite number'); + } + + var ret = ''; + + do { + if (n & 1) { + ret += str; + } + + str += str; + } while ((n >>= 1)); + + return ret; +}; diff --git a/node_modules/repeating/license b/node_modules/repeating/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/repeating/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/repeating/package.json b/node_modules/repeating/package.json new file mode 100644 index 0000000..1c1c1f2 --- /dev/null +++ b/node_modules/repeating/package.json @@ -0,0 +1,104 @@ +{ + "_args": [ + [ + { + "raw": "repeating@^2.0.0", + "scope": null, + "escapedName": "repeating", + "name": "repeating", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/indent-string" + ] + ], + "_from": "repeating@>=2.0.0 <3.0.0", + "_id": "repeating@2.0.1", + "_inCache": true, + "_location": "/repeating", + "_nodeVersion": "4.4.2", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/repeating-2.0.1.tgz_1460395966602_0.9193919147364795" + }, + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "3.8.6", + "_phantomChildren": {}, + "_requested": { + "raw": "repeating@^2.0.0", + "scope": null, + "escapedName": "repeating", + "name": "repeating", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/indent-string" + ], + "_resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "_shasum": "5214c53a926d3552707527fbab415dbc08d06dda", + "_shrinkwrap": null, + "_spec": "repeating@^2.0.0", + "_where": "/home/burchettm/statsbot/node_modules/indent-string", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/repeating/issues" + }, + "dependencies": { + "is-finite": "^1.0.0" + }, + "description": "Repeat a string - fast", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "5214c53a926d3552707527fbab415dbc08d06dda", + "tarball": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "be02bcaf9a674b3c155477b3bf282136bcf44770", + "homepage": "https://github.com/sindresorhus/repeating#readme", + "keywords": [ + "repeat", + "string", + "repeating", + "str", + "text", + "fill", + "pad" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "repeating", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/repeating.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.1" +} diff --git a/node_modules/repeating/readme.md b/node_modules/repeating/readme.md new file mode 100644 index 0000000..06f0b69 --- /dev/null +++ b/node_modules/repeating/readme.md @@ -0,0 +1,30 @@ +# repeating [![Build Status](https://travis-ci.org/sindresorhus/repeating.svg?branch=master)](https://travis-ci.org/sindresorhus/repeating) + +> Repeat a string - fast + + +## Install + +``` +$ npm install --save repeating +``` + + +## Usage + +```js +const repeating = require('repeating'); + +repeating('unicorn ', 100); +//=> 'unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn ' +``` + + +## Related + +- [repeating-cli](https://github.com/sindresorhus/repeating-cli) - CLI for this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/requireindex/.npmignore b/node_modules/requireindex/.npmignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/node_modules/requireindex/.npmignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/node_modules/requireindex/.travis.yml b/node_modules/requireindex/.travis.yml new file mode 100644 index 0000000..20fd86b --- /dev/null +++ b/node_modules/requireindex/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - 0.10 diff --git a/node_modules/requireindex/README.md b/node_modules/requireindex/README.md new file mode 100644 index 0000000..f0dd71c --- /dev/null +++ b/node_modules/requireindex/README.md @@ -0,0 +1,90 @@ +# Description + +Write minimal node index.js files that require and export siblings by file basename + +# Latest Version + +1.1.0 + +# Installation +``` +npm install requireindex +``` + +or in package.json + +```json +{ + ... + "dependencies": { + "requireindex": "1.1.x" + } +} +``` + +# Usage +Check the [test directory](https://github.com/stephenhandley/requireindex/tree/master/test) for example usage. The [test/lib](https://github.com/stephenhandley/requireindex/tree/master/test/lib) looks like: + +``` +lib/ + index.js + Foo.js + bar/ + index.js + f.js + fing.js + fed/ + again.js + ignored.js + index.js + somemore.js + bam.js + _private.js + +``` + +The index.js files in [test/lib/](https://github.com/stephenhandley/requireindex/tree/master/test/lib/index.js) and [test/lib/bar/](https://github.com/stephenhandley/requireindex/tree/master/test/lib/bar/index.js) contain: + +```js +module.exports = require('requireindex')(__dirname); +``` + +and the index.js file in [test/lib/bar/fed/](https://github.com/stephenhandley/requireindex/tree/master/test/lib/bar/fed/index.js) contains: + +```js +module.exports = require('requireindex')(__dirname, ['again', 'somemore']); +``` + +The optional second argument allows you to explicitly specify the required files using their basename. In this example [test/lib/bar/fed/ignored.js](https://github.com/stephenhandley/requireindex/tree/master/test/lib/bar/fed/ignored.js) is not included as a public module. The other way to make a module/file private without the need for explicitly naming all the other included files is to prefix the filename with an underscore, as demonstrated by [test/lib/_private.js](https://github.com/stephenhandley/requireindex/tree/master/test/lib/_private.js) which is not exported. + +So, with these index.js files, the result of + +```js +require('lib'); +``` + +is: + +```js +{ + bam: { + m: [Function], + n: [Function] + }, + bar: { + f: [Function], + fed: { + again: [Function], + somemore: [Function] + }, + fing: [Function] + }, + Foo: { + l: [Function], + ls: [Function] + } +} +``` + +#Build status +[![build status](https://secure.travis-ci.org/stephenhandley/requireindex.png)](http://travis-ci.org/stephenhandley/requireindex) \ No newline at end of file diff --git a/node_modules/requireindex/index.js b/node_modules/requireindex/index.js new file mode 100644 index 0000000..4e54750 --- /dev/null +++ b/node_modules/requireindex/index.js @@ -0,0 +1,59 @@ +var FS = require('fs'); +var Path = require('path'); + +module.exports = function (dir, basenames) { + var requires = {}; + + if (arguments.length === 2) { + // if basenames argument is passed, explicitly include those files + basenames.forEach(function (basename) { + var filepath = Path.resolve(Path.join(dir, basename)); + requires[basename] = require(filepath); + }); + + } else if (arguments.length === 1) { + // if basenames arguments isn't passed, require all javascript + // files (except for those prefixed with _) and all directories + + var files = FS.readdirSync(dir); + + // sort files in lowercase alpha for linux + files.sort(function (a,b) { + a = a.toLowerCase(); + b = b.toLowerCase(); + + if (a < b) { + return -1; + } else if (b < a) { + return 1; + } else { + return 0; + } + }); + + files.forEach(function (filename) { + // ignore index.js and files prefixed with underscore and + if ((filename === 'index.js') || (filename[0] === '_') || (filename[0] === '.')) { + return; + } + + var filepath = Path.resolve(Path.join(dir, filename)); + var ext = Path.extname(filename); + var stats = FS.statSync(filepath); + + // don't require non-javascript files (.txt .md etc.) + if (stats.isFile() && !(ext in require.extensions)) { + return; + } + + var basename = Path.basename(filename, ext); + + requires[basename] = require(filepath); + }); + + } else { + throw new Error("Must pass directory as first argument"); + } + + return requires; +}; diff --git a/node_modules/requireindex/package.json b/node_modules/requireindex/package.json new file mode 100644 index 0000000..90e4c91 --- /dev/null +++ b/node_modules/requireindex/package.json @@ -0,0 +1,92 @@ +{ + "_args": [ + [ + { + "raw": "requireindex@^1.1.0", + "scope": null, + "escapedName": "requireindex", + "name": "requireindex", + "rawSpec": "^1.1.0", + "spec": ">=1.1.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/discordie" + ] + ], + "_from": "requireindex@>=1.1.0 <2.0.0", + "_id": "requireindex@1.1.0", + "_inCache": true, + "_location": "/requireindex", + "_npmUser": { + "name": "stephenhandley", + "email": "stephen.handley@gmail.com" + }, + "_npmVersion": "1.2.18", + "_phantomChildren": {}, + "_requested": { + "raw": "requireindex@^1.1.0", + "scope": null, + "escapedName": "requireindex", + "name": "requireindex", + "rawSpec": "^1.1.0", + "spec": ">=1.1.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/discordie" + ], + "_resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", + "_shasum": "e5404b81557ef75db6e49c5a72004893fe03e162", + "_shrinkwrap": null, + "_spec": "requireindex@^1.1.0", + "_where": "/home/burchettm/statsbot/node_modules/discordie", + "author": { + "name": "Stephen Handley", + "email": "stephen.handley@gmail.com", + "url": "http://person.sh" + }, + "bugs": { + "url": "http://github.com/stephenhandley/requireindex/issues" + }, + "dependencies": {}, + "description": "Write minimal node index.js files that require and export siblings by file basename", + "devDependencies": { + "asserts": "4.0.x" + }, + "directories": { + "lib": ".", + "test": "test" + }, + "dist": { + "shasum": "e5404b81557ef75db6e49c5a72004893fe03e162", + "tarball": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz" + }, + "engines": { + "node": ">=0.10.5" + }, + "homepage": "https://github.com/stephenhandley/requireindex#readme", + "keywords": [ + "require", + "index", + "index.js" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "stephenhandley", + "email": "stephen.handley@gmail.com" + } + ], + "name": "requireindex", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/stephenhandley/requireindex.git" + }, + "scripts": { + "test": "node test/test.js" + }, + "version": "1.1.0" +} diff --git a/node_modules/requireindex/test/lib/.also_private/private.txt b/node_modules/requireindex/test/lib/.also_private/private.txt new file mode 100644 index 0000000..9309ea8 --- /dev/null +++ b/node_modules/requireindex/test/lib/.also_private/private.txt @@ -0,0 +1 @@ +barf \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/Foo.js b/node_modules/requireindex/test/lib/Foo.js new file mode 100644 index 0000000..e4f95db --- /dev/null +++ b/node_modules/requireindex/test/lib/Foo.js @@ -0,0 +1,4 @@ +module.exports = { + l: function() { return "yes"; }, + ls: function() { return "yep"; } +}; \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/_private.js b/node_modules/requireindex/test/lib/_private.js new file mode 100644 index 0000000..e0ec6f0 --- /dev/null +++ b/node_modules/requireindex/test/lib/_private.js @@ -0,0 +1,3 @@ +module.exports = function() { + return "ack"; +} \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/bam.js b/node_modules/requireindex/test/lib/bam.js new file mode 100644 index 0000000..a2120bf --- /dev/null +++ b/node_modules/requireindex/test/lib/bam.js @@ -0,0 +1,4 @@ +module.exports = { + m: function() { return "ok"; }, + n: require('./_private') +}; \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/bar/f.js b/node_modules/requireindex/test/lib/bar/f.js new file mode 100644 index 0000000..4d87fae --- /dev/null +++ b/node_modules/requireindex/test/lib/bar/f.js @@ -0,0 +1,3 @@ +module.exports = function() { + return "yea"; +} \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/bar/fed/again.js b/node_modules/requireindex/test/lib/bar/fed/again.js new file mode 100644 index 0000000..d348495 --- /dev/null +++ b/node_modules/requireindex/test/lib/bar/fed/again.js @@ -0,0 +1,3 @@ +module.exports = function() { + return "again"; +} \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/bar/fed/ignored.js b/node_modules/requireindex/test/lib/bar/fed/ignored.js new file mode 100644 index 0000000..b9f725f --- /dev/null +++ b/node_modules/requireindex/test/lib/bar/fed/ignored.js @@ -0,0 +1,3 @@ +module.exports = function() { + return "ignored"; +} \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/bar/fed/index.js b/node_modules/requireindex/test/lib/bar/fed/index.js new file mode 100644 index 0000000..1664a19 --- /dev/null +++ b/node_modules/requireindex/test/lib/bar/fed/index.js @@ -0,0 +1 @@ +module.exports = require('../../../../')(__dirname, ['again', 'somemore']) \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/bar/fed/somemore.js b/node_modules/requireindex/test/lib/bar/fed/somemore.js new file mode 100644 index 0000000..b5e7a2c --- /dev/null +++ b/node_modules/requireindex/test/lib/bar/fed/somemore.js @@ -0,0 +1,3 @@ +module.exports = function() { + return "somemore"; +} \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/bar/fing.js b/node_modules/requireindex/test/lib/bar/fing.js new file mode 100644 index 0000000..e953f28 --- /dev/null +++ b/node_modules/requireindex/test/lib/bar/fing.js @@ -0,0 +1,3 @@ +module.exports = function() { + return "definitely"; +} \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/bar/index.js b/node_modules/requireindex/test/lib/bar/index.js new file mode 100644 index 0000000..e7b4f97 --- /dev/null +++ b/node_modules/requireindex/test/lib/bar/index.js @@ -0,0 +1 @@ +module.exports = require('../../../')(__dirname) \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/index.js b/node_modules/requireindex/test/lib/index.js new file mode 100644 index 0000000..f76e34d --- /dev/null +++ b/node_modules/requireindex/test/lib/index.js @@ -0,0 +1 @@ +module.exports = require('../../')(__dirname) \ No newline at end of file diff --git a/node_modules/requireindex/test/lib/not_javascript.txt b/node_modules/requireindex/test/lib/not_javascript.txt new file mode 100644 index 0000000..a372663 --- /dev/null +++ b/node_modules/requireindex/test/lib/not_javascript.txt @@ -0,0 +1 @@ +asdf 1 2 / @ 123 \ No newline at end of file diff --git a/node_modules/requireindex/test/test.js b/node_modules/requireindex/test/test.js new file mode 100644 index 0000000..91386fb --- /dev/null +++ b/node_modules/requireindex/test/test.js @@ -0,0 +1,43 @@ +var Assert = require('assert'); +var Asserts = require('asserts'); + +Asserts(function () { + var lib = require('./lib'); + + return { + "requireindex should": { + "properly include files parallel to index.js and maintain structure": function () { + Asserts.all.equal([ + [lib.bam.m, [], "ok"], + [lib.bar.f, [], "yea"], + [lib.bar.fing, [], 'definitely'], + [lib.Foo.l, [], 'yes'], + [lib.Foo.ls, [], 'yep'], + [lib.bam.n, [], 'ack'], + [lib.bar.fed.again, [], 'again'], + [lib.bar.fed.somemore, [], 'somemore'] + ]); + }, + + "ignore _ prefixed files": function () { + Assert.equal(('_private' in lib), false); + }, + + "not include files not mentioned when second array argument is used": function () { + Assert.equal(('ignored' in lib.bar.fed), false); + }, + + "ignore non javascript files": function () { + Assert.equal(('not_javascript' in lib), false); + }, + + "sort files by lowercase alpha of the filename": function () { + Assert.equal(Object.keys(lib)[0], 'bam'); + }, + + "ignore dot files": function () { + Assert.equal(('.also_private' in lib), false); + }, + } + }; +}); \ No newline at end of file diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md new file mode 100644 index 0000000..cbd9565 --- /dev/null +++ b/node_modules/semver/README.md @@ -0,0 +1,350 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Usage + + $ npm install semver + $ node + var semver = require('semver') + + semver.valid('1.2.3') // '1.2.3' + semver.valid('a.b.c') // null + semver.clean(' =v1.2.3 ') // '1.2.3' + semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true + semver.gt('1.2.3', '9.8.7') // false + semver.lt('1.2.3', '9.8.7') // true + +As a command-line utility: + + $ semver -h + + SemVer 5.1.0 + + A JavaScript implementation of the http://semver.org/ specification + Copyright Isaac Z. Schlueter + + Usage: semver [options] [ [...]] + Prints valid versions sorted by SemVer precedence + + Options: + -r --range + Print versions that match the specified range. + + -i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + + --preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + + -l --loose + Interpret versions and ranges loosely + + Program exits successfully if any valid version satisfies + all supplied ranges, and prints all satisfying versions. + + If no satisfying versions are found, then exits failure. + + Versions are printed in ascending order, so supplying + multiple versions to the utility will just sort them. + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +> semver.inc('1.2.3', 'prerelease', 'beta') +'1.2.4-beta.0' +``` + +command-line example: + +```shell +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```shell +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero digit in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0` +* `^0.2.3` := `>=0.2.3 <0.3.0` +* `^0.0.3` := `>=0.0.3 <0.0.4` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0` +* `^0.0.x` := `>=0.0.0 <0.1.0` +* `^0.0` := `>=0.0.0 <0.1.0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0` +* `^0.x` := `>=0.0.0 <1.0.0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `loose` boolean argument that, if +true, will be more forgiving about not-quite-valid semver strings. +The resulting output will always be 100% strict, of course. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. diff --git a/node_modules/semver/bin/semver b/node_modules/semver/bin/semver new file mode 100755 index 0000000..c5f2e85 --- /dev/null +++ b/node_modules/semver/bin/semver @@ -0,0 +1,133 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +var argv = process.argv.slice(2) + , versions = [] + , range = [] + , gt = [] + , lt = [] + , eq = [] + , inc = null + , version = require("../package.json").version + , loose = false + , identifier = undefined + , semver = require("../semver") + , reverse = false + +main() + +function main () { + if (!argv.length) return help() + while (argv.length) { + var a = argv.shift() + var i = a.indexOf('=') + if (i !== -1) { + a = a.slice(0, i) + argv.unshift(a.slice(i + 1)) + } + switch (a) { + case "-rv": case "-rev": case "--rev": case "--reverse": + reverse = true + break + case "-l": case "--loose": + loose = true + break + case "-v": case "--version": + versions.push(argv.shift()) + break + case "-i": case "--inc": case "--increment": + switch (argv[0]) { + case "major": case "minor": case "patch": case "prerelease": + case "premajor": case "preminor": case "prepatch": + inc = argv.shift() + break + default: + inc = "patch" + break + } + break + case "--preid": + identifier = argv.shift() + break + case "-r": case "--range": + range.push(argv.shift()) + break + case "-h": case "--help": case "-?": + return help() + default: + versions.push(a) + break + } + } + + versions = versions.filter(function (v) { + return semver.valid(v, loose) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) + return failInc() + + for (var i = 0, l = range.length; i < l ; i ++) { + versions = versions.filter(function (v) { + return semver.satisfies(v, range[i], loose) + }) + if (!versions.length) return fail() + } + return success(versions) +} + +function failInc () { + console.error("--inc can only be used on a single version with no range") + fail() +} + +function fail () { process.exit(1) } + +function success () { + var compare = reverse ? "rcompare" : "compare" + versions.sort(function (a, b) { + return semver[compare](a, b, loose) + }).map(function (v) { + return semver.clean(v, loose) + }).map(function (v) { + return inc ? semver.inc(v, inc, loose, identifier) : v + }).forEach(function (v,i,_) { console.log(v) }) +} + +function help () { + console.log(["SemVer " + version + ,"" + ,"A JavaScript implementation of the http://semver.org/ specification" + ,"Copyright Isaac Z. Schlueter" + ,"" + ,"Usage: semver [options] [ [...]]" + ,"Prints valid versions sorted by SemVer precedence" + ,"" + ,"Options:" + ,"-r --range " + ," Print versions that match the specified range." + ,"" + ,"-i --increment []" + ," Increment a version by the specified level. Level can" + ," be one of: major, minor, patch, premajor, preminor," + ," prepatch, or prerelease. Default level is 'patch'." + ," Only one version may be specified." + ,"" + ,"--preid " + ," Identifier to be used to prefix premajor, preminor," + ," prepatch or prerelease version increments." + ,"" + ,"-l --loose" + ," Interpret versions and ranges loosely" + ,"" + ,"Program exits successfully if any valid version satisfies" + ,"all supplied ranges, and prints all satisfying versions." + ,"" + ,"If no satisfying versions are found, then exits failure." + ,"" + ,"Versions are printed in ascending order, so supplying" + ,"multiple versions to the utility will just sort them." + ].join("\n")) +} diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json new file mode 100644 index 0000000..85ab308 --- /dev/null +++ b/node_modules/semver/package.json @@ -0,0 +1,94 @@ +{ + "_args": [ + [ + { + "raw": "semver@2 || 3 || 4 || 5", + "scope": null, + "escapedName": "semver", + "name": "semver", + "rawSpec": "2 || 3 || 4 || 5", + "spec": ">=2.0.0 <3.0.0||>=3.0.0 <4.0.0||>=4.0.0 <5.0.0||>=5.0.0 <6.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/normalize-package-data" + ] + ], + "_from": "semver@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0||>=4.0.0 <5.0.0||>=5.0.0 <6.0.0", + "_id": "semver@5.3.0", + "_inCache": true, + "_location": "/semver", + "_nodeVersion": "4.4.4", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/semver-5.3.0.tgz_1468515166602_0.9155273644719273" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_npmVersion": "3.10.6", + "_phantomChildren": {}, + "_requested": { + "raw": "semver@2 || 3 || 4 || 5", + "scope": null, + "escapedName": "semver", + "name": "semver", + "rawSpec": "2 || 3 || 4 || 5", + "spec": ">=2.0.0 <3.0.0||>=3.0.0 <4.0.0||>=4.0.0 <5.0.0||>=5.0.0 <6.0.0", + "type": "range" + }, + "_requiredBy": [ + "/normalize-package-data" + ], + "_resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "_shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f", + "_shrinkwrap": null, + "_spec": "semver@2 || 3 || 4 || 5", + "_where": "/home/burchettm/statsbot/node_modules/normalize-package-data", + "bin": { + "semver": "./bin/semver" + }, + "bugs": { + "url": "https://github.com/npm/node-semver/issues" + }, + "dependencies": {}, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "^2.0.0" + }, + "directories": {}, + "dist": { + "shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f", + "tarball": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz" + }, + "files": [ + "bin", + "range.bnf", + "semver.js" + ], + "gitHead": "d21444a0658224b152ce54965d02dbe0856afb84", + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "semver.js", + "maintainers": [ + { + "name": "isaacs", + "email": "isaacs@npmjs.com" + }, + { + "name": "othiym23", + "email": "ogd@aoaioxxysz.net" + } + ], + "name": "semver", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "5.3.0" +} diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf new file mode 100644 index 0000000..25ebd5c --- /dev/null +++ b/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js new file mode 100644 index 0000000..5f1a3c5 --- /dev/null +++ b/node_modules/semver/semver.js @@ -0,0 +1,1203 @@ +exports = module.exports = SemVer; + +// The debug function is excluded entirely from the minified version. +/* nomin */ var debug; +/* nomin */ if (typeof process === 'object' && + /* nomin */ process.env && + /* nomin */ process.env.NODE_DEBUG && + /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG)) + /* nomin */ debug = function() { + /* nomin */ var args = Array.prototype.slice.call(arguments, 0); + /* nomin */ args.unshift('SEMVER'); + /* nomin */ console.log.apply(console, args); + /* nomin */ }; +/* nomin */ else + /* nomin */ debug = function() {}; + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0'; + +var MAX_LENGTH = 256; +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; + +// The actual regexps go on exports.re +var re = exports.re = []; +var src = exports.src = []; +var R = 0; + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++; +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'; +var NUMERICIDENTIFIERLOOSE = R++; +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'; + + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++; +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'; + + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++; +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')'; + +var MAINVERSIONLOOSE = R++; +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')'; + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++; +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + +var PRERELEASEIDENTIFIERLOOSE = R++; +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++; +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'; + +var PRERELEASELOOSE = R++; +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'; + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++; +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'; + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++; +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'; + + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++; +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?'; + +src[FULL] = '^' + FULLPLAIN + '$'; + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?'; + +var LOOSE = R++; +src[LOOSE] = '^' + LOOSEPLAIN + '$'; + +var GTLT = R++; +src[GTLT] = '((?:<|>)?=?)'; + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++; +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'; +var XRANGEIDENTIFIER = R++; +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'; + +var XRANGEPLAIN = R++; +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?'; + +var XRANGEPLAINLOOSE = R++; +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?'; + +var XRANGE = R++; +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'; +var XRANGELOOSE = R++; +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'; + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++; +src[LONETILDE] = '(?:~>?)'; + +var TILDETRIM = R++; +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'; +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g'); +var tildeTrimReplace = '$1~'; + +var TILDE = R++; +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'; +var TILDELOOSE = R++; +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'; + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++; +src[LONECARET] = '(?:\\^)'; + +var CARETTRIM = R++; +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'; +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g'); +var caretTrimReplace = '$1^'; + +var CARET = R++; +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'; +var CARETLOOSE = R++; +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'; + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++; +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'; +var COMPARATOR = R++; +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'; + + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++; +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'; + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g'); +var comparatorTrimReplace = '$1$2$3'; + + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++; +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$'; + +var HYPHENRANGELOOSE = R++; +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$'; + +// Star ranges basically just allow anything at all. +var STAR = R++; +src[STAR] = '(<|>)?=?\\s*\\*'; + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]); + if (!re[i]) + re[i] = new RegExp(src[i]); +} + +exports.parse = parse; +function parse(version, loose) { + if (version instanceof SemVer) + return version; + + if (typeof version !== 'string') + return null; + + if (version.length > MAX_LENGTH) + return null; + + var r = loose ? re[LOOSE] : re[FULL]; + if (!r.test(version)) + return null; + + try { + return new SemVer(version, loose); + } catch (er) { + return null; + } +} + +exports.valid = valid; +function valid(version, loose) { + var v = parse(version, loose); + return v ? v.version : null; +} + + +exports.clean = clean; +function clean(version, loose) { + var s = parse(version.trim().replace(/^[=v]+/, ''), loose); + return s ? s.version : null; +} + +exports.SemVer = SemVer; + +function SemVer(version, loose) { + if (version instanceof SemVer) { + if (version.loose === loose) + return version; + else + version = version.version; + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version); + } + + if (version.length > MAX_LENGTH) + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + + if (!(this instanceof SemVer)) + return new SemVer(version, loose); + + debug('SemVer', version, loose); + this.loose = loose; + var m = version.trim().match(loose ? re[LOOSE] : re[FULL]); + + if (!m) + throw new TypeError('Invalid Version: ' + version); + + this.raw = version; + + // these are actually numbers + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) + throw new TypeError('Invalid major version') + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) + throw new TypeError('Invalid minor version') + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) + throw new TypeError('Invalid patch version') + + // numberify any prerelease numeric ids + if (!m[4]) + this.prerelease = []; + else + this.prerelease = m[4].split('.').map(function(id) { + if (/^[0-9]+$/.test(id)) { + var num = +id; + if (num >= 0 && num < MAX_SAFE_INTEGER) + return num; + } + return id; + }); + + this.build = m[5] ? m[5].split('.') : []; + this.format(); +} + +SemVer.prototype.format = function() { + this.version = this.major + '.' + this.minor + '.' + this.patch; + if (this.prerelease.length) + this.version += '-' + this.prerelease.join('.'); + return this.version; +}; + +SemVer.prototype.toString = function() { + return this.version; +}; + +SemVer.prototype.compare = function(other) { + debug('SemVer.compare', this.version, this.loose, other); + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + return this.compareMain(other) || this.comparePre(other); +}; + +SemVer.prototype.compareMain = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch); +}; + +SemVer.prototype.comparePre = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) + return -1; + else if (!this.prerelease.length && other.prerelease.length) + return 1; + else if (!this.prerelease.length && !other.prerelease.length) + return 0; + + var i = 0; + do { + var a = this.prerelease[i]; + var b = other.prerelease[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) + return 0; + else if (b === undefined) + return 1; + else if (a === undefined) + return -1; + else if (a === b) + continue; + else + return compareIdentifiers(a, b); + } while (++i); +}; + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function(release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc('pre', identifier); + break; + case 'preminor': + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc('pre', identifier); + break; + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0; + this.inc('patch', identifier); + this.inc('pre', identifier); + break; + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) + this.inc('patch', identifier); + this.inc('pre', identifier); + break; + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) + this.major++; + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break; + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) + this.minor++; + this.patch = 0; + this.prerelease = []; + break; + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) + this.patch++; + this.prerelease = []; + break; + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) + this.prerelease = [0]; + else { + var i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) // didn't increment anything + this.prerelease.push(0); + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) + this.prerelease = [identifier, 0]; + } else + this.prerelease = [identifier, 0]; + } + break; + + default: + throw new Error('invalid increment argument: ' + release); + } + this.format(); + this.raw = this.version; + return this; +}; + +exports.inc = inc; +function inc(version, release, loose, identifier) { + if (typeof(loose) === 'string') { + identifier = loose; + loose = undefined; + } + + try { + return new SemVer(version, loose).inc(release, identifier).version; + } catch (er) { + return null; + } +} + +exports.diff = diff; +function diff(version1, version2) { + if (eq(version1, version2)) { + return null; + } else { + var v1 = parse(version1); + var v2 = parse(version2); + if (v1.prerelease.length || v2.prerelease.length) { + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return 'pre'+key; + } + } + } + return 'prerelease'; + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return key; + } + } + } + } +} + +exports.compareIdentifiers = compareIdentifiers; + +var numeric = /^[0-9]+$/; +function compareIdentifiers(a, b) { + var anum = numeric.test(a); + var bnum = numeric.test(b); + + if (anum && bnum) { + a = +a; + b = +b; + } + + return (anum && !bnum) ? -1 : + (bnum && !anum) ? 1 : + a < b ? -1 : + a > b ? 1 : + 0; +} + +exports.rcompareIdentifiers = rcompareIdentifiers; +function rcompareIdentifiers(a, b) { + return compareIdentifiers(b, a); +} + +exports.major = major; +function major(a, loose) { + return new SemVer(a, loose).major; +} + +exports.minor = minor; +function minor(a, loose) { + return new SemVer(a, loose).minor; +} + +exports.patch = patch; +function patch(a, loose) { + return new SemVer(a, loose).patch; +} + +exports.compare = compare; +function compare(a, b, loose) { + return new SemVer(a, loose).compare(b); +} + +exports.compareLoose = compareLoose; +function compareLoose(a, b) { + return compare(a, b, true); +} + +exports.rcompare = rcompare; +function rcompare(a, b, loose) { + return compare(b, a, loose); +} + +exports.sort = sort; +function sort(list, loose) { + return list.sort(function(a, b) { + return exports.compare(a, b, loose); + }); +} + +exports.rsort = rsort; +function rsort(list, loose) { + return list.sort(function(a, b) { + return exports.rcompare(a, b, loose); + }); +} + +exports.gt = gt; +function gt(a, b, loose) { + return compare(a, b, loose) > 0; +} + +exports.lt = lt; +function lt(a, b, loose) { + return compare(a, b, loose) < 0; +} + +exports.eq = eq; +function eq(a, b, loose) { + return compare(a, b, loose) === 0; +} + +exports.neq = neq; +function neq(a, b, loose) { + return compare(a, b, loose) !== 0; +} + +exports.gte = gte; +function gte(a, b, loose) { + return compare(a, b, loose) >= 0; +} + +exports.lte = lte; +function lte(a, b, loose) { + return compare(a, b, loose) <= 0; +} + +exports.cmp = cmp; +function cmp(a, op, b, loose) { + var ret; + switch (op) { + case '===': + if (typeof a === 'object') a = a.version; + if (typeof b === 'object') b = b.version; + ret = a === b; + break; + case '!==': + if (typeof a === 'object') a = a.version; + if (typeof b === 'object') b = b.version; + ret = a !== b; + break; + case '': case '=': case '==': ret = eq(a, b, loose); break; + case '!=': ret = neq(a, b, loose); break; + case '>': ret = gt(a, b, loose); break; + case '>=': ret = gte(a, b, loose); break; + case '<': ret = lt(a, b, loose); break; + case '<=': ret = lte(a, b, loose); break; + default: throw new TypeError('Invalid operator: ' + op); + } + return ret; +} + +exports.Comparator = Comparator; +function Comparator(comp, loose) { + if (comp instanceof Comparator) { + if (comp.loose === loose) + return comp; + else + comp = comp.value; + } + + if (!(this instanceof Comparator)) + return new Comparator(comp, loose); + + debug('comparator', comp, loose); + this.loose = loose; + this.parse(comp); + + if (this.semver === ANY) + this.value = ''; + else + this.value = this.operator + this.semver.version; + + debug('comp', this); +} + +var ANY = {}; +Comparator.prototype.parse = function(comp) { + var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var m = comp.match(r); + + if (!m) + throw new TypeError('Invalid comparator: ' + comp); + + this.operator = m[1]; + if (this.operator === '=') + this.operator = ''; + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) + this.semver = ANY; + else + this.semver = new SemVer(m[2], this.loose); +}; + +Comparator.prototype.toString = function() { + return this.value; +}; + +Comparator.prototype.test = function(version) { + debug('Comparator.test', version, this.loose); + + if (this.semver === ANY) + return true; + + if (typeof version === 'string') + version = new SemVer(version, this.loose); + + return cmp(version, this.operator, this.semver, this.loose); +}; + + +exports.Range = Range; +function Range(range, loose) { + if ((range instanceof Range) && range.loose === loose) + return range; + + if (!(this instanceof Range)) + return new Range(range, loose); + + this.loose = loose; + + // First, split based on boolean or || + this.raw = range; + this.set = range.split(/\s*\|\|\s*/).map(function(range) { + return this.parseRange(range.trim()); + }, this).filter(function(c) { + // throw out any that are not relevant for whatever reason + return c.length; + }); + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range); + } + + this.format(); +} + +Range.prototype.format = function() { + this.range = this.set.map(function(comps) { + return comps.join(' ').trim(); + }).join('||').trim(); + return this.range; +}; + +Range.prototype.toString = function() { + return this.range; +}; + +Range.prototype.parseRange = function(range) { + var loose = this.loose; + range = range.trim(); + debug('range', range, loose); + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; + range = range.replace(hr, hyphenReplace); + debug('hyphen replace', range); + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); + debug('comparator trim', range, re[COMPARATORTRIM]); + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace); + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace); + + // normalize spaces + range = range.split(/\s+/).join(' '); + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var set = range.split(' ').map(function(comp) { + return parseComparator(comp, loose); + }).join(' ').split(/\s+/); + if (this.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function(comp) { + return !!comp.match(compRe); + }); + } + set = set.map(function(comp) { + return new Comparator(comp, loose); + }); + + return set; +}; + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators; +function toComparators(range, loose) { + return new Range(range, loose).set.map(function(comp) { + return comp.map(function(c) { + return c.value; + }).join(' ').trim().split(' '); + }); +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator(comp, loose) { + debug('comp', comp); + comp = replaceCarets(comp, loose); + debug('caret', comp); + comp = replaceTildes(comp, loose); + debug('tildes', comp); + comp = replaceXRanges(comp, loose); + debug('xrange', comp); + comp = replaceStars(comp, loose); + debug('stars', comp); + return comp; +} + +function isX(id) { + return !id || id.toLowerCase() === 'x' || id === '*'; +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes(comp, loose) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceTilde(comp, loose); + }).join(' '); +} + +function replaceTilde(comp, loose) { + var r = loose ? re[TILDELOOSE] : re[TILDE]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + else if (isX(p)) + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + else if (pr) { + debug('replaceTilde pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0'; + + debug('tilde return', ret); + return ret; + }); +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets(comp, loose) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceCaret(comp, loose); + }).join(' '); +} + +function replaceCaret(comp, loose) { + debug('caret', comp, loose); + var r = loose ? re[CARETLOOSE] : re[CARET]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + else if (isX(p)) { + if (M === '0') + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + else + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; + } else if (pr) { + debug('replaceCaret pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + if (M === '0') { + if (m === '0') + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + m + '.' + (+p + 1); + else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + (+M + 1) + '.0.0'; + } else { + debug('no pr'); + if (M === '0') { + if (m === '0') + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1); + else + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0'; + } + + debug('caret return', ret); + return ret; + }); +} + +function replaceXRanges(comp, loose) { + debug('replaceXRanges', comp, loose); + return comp.split(/\s+/).map(function(comp) { + return replaceXRange(comp, loose); + }).join(' '); +} + +function replaceXRange(comp, loose) { + comp = comp.trim(); + var r = loose ? re[XRANGELOOSE] : re[XRANGE]; + return comp.replace(r, function(ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr); + var xM = isX(M); + var xm = xM || isX(m); + var xp = xm || isX(p); + var anyX = xp; + + if (gtlt === '=' && anyX) + gtlt = ''; + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0'; + } else { + // nothing is forbidden + ret = '*'; + } + } else if (gtlt && anyX) { + // replace X with 0 + if (xm) + m = 0; + if (xp) + p = 0; + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>='; + if (xm) { + M = +M + 1; + m = 0; + p = 0; + } else if (xp) { + m = +m + 1; + p = 0; + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<'; + if (xm) + M = +M + 1; + else + m = +m + 1; + } + + ret = gtlt + M + '.' + m + '.' + p; + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + } + + debug('xRange return', ret); + + return ret; + }); +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars(comp, loose) { + debug('replaceStars', comp, loose); + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], ''); +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + + if (isX(fM)) + from = ''; + else if (isX(fm)) + from = '>=' + fM + '.0.0'; + else if (isX(fp)) + from = '>=' + fM + '.' + fm + '.0'; + else + from = '>=' + from; + + if (isX(tM)) + to = ''; + else if (isX(tm)) + to = '<' + (+tM + 1) + '.0.0'; + else if (isX(tp)) + to = '<' + tM + '.' + (+tm + 1) + '.0'; + else if (tpr) + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; + else + to = '<=' + to; + + return (from + ' ' + to).trim(); +} + + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function(version) { + if (!version) + return false; + + if (typeof version === 'string') + version = new SemVer(version, this.loose); + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version)) + return true; + } + return false; +}; + +function testSet(set, version) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) + return false; + } + + if (version.prerelease.length) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (var i = 0; i < set.length; i++) { + debug(set[i].semver); + if (set[i].semver === ANY) + continue; + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver; + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) + return true; + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false; + } + + return true; +} + +exports.satisfies = satisfies; +function satisfies(version, range, loose) { + try { + range = new Range(range, loose); + } catch (er) { + return false; + } + return range.test(version); +} + +exports.maxSatisfying = maxSatisfying; +function maxSatisfying(versions, range, loose) { + return versions.filter(function(version) { + return satisfies(version, range, loose); + }).sort(function(a, b) { + return rcompare(a, b, loose); + })[0] || null; +} + +exports.minSatisfying = minSatisfying; +function minSatisfying(versions, range, loose) { + return versions.filter(function(version) { + return satisfies(version, range, loose); + }).sort(function(a, b) { + return compare(a, b, loose); + })[0] || null; +} + +exports.validRange = validRange; +function validRange(range, loose) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, loose).range || '*'; + } catch (er) { + return null; + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr; +function ltr(version, range, loose) { + return outside(version, range, '<', loose); +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr; +function gtr(version, range, loose) { + return outside(version, range, '>', loose); +} + +exports.outside = outside; +function outside(version, range, hilo, loose) { + version = new SemVer(version, loose); + range = new Range(range, loose); + + var gtfn, ltefn, ltfn, comp, ecomp; + switch (hilo) { + case '>': + gtfn = gt; + ltefn = lte; + ltfn = lt; + comp = '>'; + ecomp = '>='; + break; + case '<': + gtfn = lt; + ltefn = gte; + ltfn = gt; + comp = '<'; + ecomp = '<='; + break; + default: + throw new TypeError('Must provide a hilo val of "<" or ">"'); + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, loose)) { + return false; + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i]; + + var high = null; + var low = null; + + comparators.forEach(function(comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator; + low = low || comparator; + if (gtfn(comparator.semver, high.semver, loose)) { + high = comparator; + } else if (ltfn(comparator.semver, low.semver, loose)) { + low = comparator; + } + }); + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false; + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false; + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false; + } + } + return true; +} + +exports.prerelease = prerelease; +function prerelease(version, loose) { + var parsed = parse(version, loose); + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null; +} diff --git a/node_modules/signal-exit/CHANGELOG.md b/node_modules/signal-exit/CHANGELOG.md new file mode 100644 index 0000000..e2f70d2 --- /dev/null +++ b/node_modules/signal-exit/CHANGELOG.md @@ -0,0 +1,27 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + + +## [3.0.1](https://github.com/tapjs/signal-exit/compare/v3.0.0...v3.0.1) (2016-09-08) + + +### Bug Fixes + +* do not listen on SIGBUS, SIGFPE, SIGSEGV and SIGILL ([#40](https://github.com/tapjs/signal-exit/issues/40)) ([5b105fb](https://github.com/tapjs/signal-exit/commit/5b105fb)) + + + + +# [3.0.0](https://github.com/tapjs/signal-exit/compare/v2.1.2...v3.0.0) (2016-06-13) + + +### Bug Fixes + +* get our test suite running on Windows ([#23](https://github.com/tapjs/signal-exit/issues/23)) ([6f3eda8](https://github.com/tapjs/signal-exit/commit/6f3eda8)) +* hooking SIGPROF was interfering with profilers see [#21](https://github.com/tapjs/signal-exit/issues/21) ([#24](https://github.com/tapjs/signal-exit/issues/24)) ([1248a4c](https://github.com/tapjs/signal-exit/commit/1248a4c)) + + +### BREAKING CHANGES + +* signal-exit no longer wires into SIGPROF diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt new file mode 100644 index 0000000..eead04a --- /dev/null +++ b/node_modules/signal-exit/LICENSE.txt @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md new file mode 100644 index 0000000..8ebccab --- /dev/null +++ b/node_modules/signal-exit/README.md @@ -0,0 +1,40 @@ +# signal-exit + +[![Build Status](https://travis-ci.org/tapjs/signal-exit.png)](https://travis-ci.org/tapjs/signal-exit) +[![Coverage](https://coveralls.io/repos/tapjs/signal-exit/badge.svg?branch=master)](https://coveralls.io/r/tapjs/signal-exit?branch=master) +[![NPM version](https://img.shields.io/npm/v/signal-exit.svg)](https://www.npmjs.com/package/signal-exit) +[![Windows Tests](https://img.shields.io/appveyor/ci/bcoe/signal-exit/master.svg?label=Windows%20Tests)](https://ci.appveyor.com/project/bcoe/signal-exit) +[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) + +When you want to fire an event no matter how a process exits: + +* reaching the end of execution. +* explicitly having `process.exit(code)` called. +* having `process.kill(pid, sig)` called. +* receiving a fatal signal from outside the process + +Use `signal-exit`. + +```js +var onExit = require('signal-exit') + +onExit(function (code, signal) { + console.log('process exited!') +}) +``` + +## API + +`var remove = onExit(function (code, signal) {}, options)` + +The return value of the function is a function that will remove the +handler. + +Note that the function *only* fires for signals if the signal would +cause the proces to exit. That is, there are no other listeners, and +it is a fatal signal. + +## Options + +* `alwaysLast`: Run this handler after any other signal or exit + handlers. This causes `process.emit` to be monkeypatched. diff --git a/node_modules/signal-exit/index.js b/node_modules/signal-exit/index.js new file mode 100644 index 0000000..337f691 --- /dev/null +++ b/node_modules/signal-exit/index.js @@ -0,0 +1,157 @@ +// Note: since nyc uses this module to output coverage, any lines +// that are in the direct sync flow of nyc's outputCoverage are +// ignored, since we can never get coverage for them. +var assert = require('assert') +var signals = require('./signals.js') + +var EE = require('events') +/* istanbul ignore if */ +if (typeof EE !== 'function') { + EE = EE.EventEmitter +} + +var emitter +if (process.__signal_exit_emitter__) { + emitter = process.__signal_exit_emitter__ +} else { + emitter = process.__signal_exit_emitter__ = new EE() + emitter.count = 0 + emitter.emitted = {} +} + +// Because this emitter is a global, we have to check to see if a +// previous version of this library failed to enable infinite listeners. +// I know what you're about to say. But literally everything about +// signal-exit is a compromise with evil. Get used to it. +if (!emitter.infinite) { + emitter.setMaxListeners(Infinity) + emitter.infinite = true +} + +module.exports = function (cb, opts) { + assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') + + if (loaded === false) { + load() + } + + var ev = 'exit' + if (opts && opts.alwaysLast) { + ev = 'afterexit' + } + + var remove = function () { + emitter.removeListener(ev, cb) + if (emitter.listeners('exit').length === 0 && + emitter.listeners('afterexit').length === 0) { + unload() + } + } + emitter.on(ev, cb) + + return remove +} + +module.exports.unload = unload +function unload () { + if (!loaded) { + return + } + loaded = false + + signals.forEach(function (sig) { + try { + process.removeListener(sig, sigListeners[sig]) + } catch (er) {} + }) + process.emit = originalProcessEmit + process.reallyExit = originalProcessReallyExit + emitter.count -= 1 +} + +function emit (event, code, signal) { + if (emitter.emitted[event]) { + return + } + emitter.emitted[event] = true + emitter.emit(event, code, signal) +} + +// { : , ... } +var sigListeners = {} +signals.forEach(function (sig) { + sigListeners[sig] = function listener () { + // If there are no other listeners, an exit is coming! + // Simplest way: remove us and then re-send the signal. + // We know that this will kill the process, so we can + // safely emit now. + var listeners = process.listeners(sig) + if (listeners.length === emitter.count) { + unload() + emit('exit', null, sig) + /* istanbul ignore next */ + emit('afterexit', null, sig) + /* istanbul ignore next */ + process.kill(process.pid, sig) + } + } +}) + +module.exports.signals = function () { + return signals +} + +module.exports.load = load + +var loaded = false + +function load () { + if (loaded) { + return + } + loaded = true + + // This is the number of onSignalExit's that are in play. + // It's important so that we can count the correct number of + // listeners on signals, and don't wait for the other one to + // handle it instead of us. + emitter.count += 1 + + signals = signals.filter(function (sig) { + try { + process.on(sig, sigListeners[sig]) + return true + } catch (er) { + return false + } + }) + + process.emit = processEmit + process.reallyExit = processReallyExit +} + +var originalProcessReallyExit = process.reallyExit +function processReallyExit (code) { + process.exitCode = code || 0 + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + /* istanbul ignore next */ + originalProcessReallyExit.call(process, process.exitCode) +} + +var originalProcessEmit = process.emit +function processEmit (ev, arg) { + if (ev === 'exit') { + if (arg !== undefined) { + process.exitCode = arg + } + var ret = originalProcessEmit.apply(this, arguments) + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + return ret + } else { + return originalProcessEmit.apply(this, arguments) + } +} diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json new file mode 100644 index 0000000..f5e9041 --- /dev/null +++ b/node_modules/signal-exit/package.json @@ -0,0 +1,106 @@ +{ + "_args": [ + [ + { + "raw": "signal-exit@^3.0.0", + "scope": null, + "escapedName": "signal-exit", + "name": "signal-exit", + "rawSpec": "^3.0.0", + "spec": ">=3.0.0 <4.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/loud-rejection" + ] + ], + "_from": "signal-exit@>=3.0.0 <4.0.0", + "_id": "signal-exit@3.0.2", + "_inCache": true, + "_location": "/signal-exit", + "_nodeVersion": "6.5.0", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/signal-exit-3.0.2.tgz_1480821660838_0.6809983775019646" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_npmVersion": "3.10.9", + "_phantomChildren": {}, + "_requested": { + "raw": "signal-exit@^3.0.0", + "scope": null, + "escapedName": "signal-exit", + "name": "signal-exit", + "rawSpec": "^3.0.0", + "spec": ">=3.0.0 <4.0.0", + "type": "range" + }, + "_requiredBy": [ + "/loud-rejection" + ], + "_resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "_shasum": "b5fdc08f1287ea1178628e415e25132b73646c6d", + "_shrinkwrap": null, + "_spec": "signal-exit@^3.0.0", + "_where": "/home/burchettm/statsbot/node_modules/loud-rejection", + "author": { + "name": "Ben Coe", + "email": "ben@npmjs.com" + }, + "bugs": { + "url": "https://github.com/tapjs/signal-exit/issues" + }, + "dependencies": {}, + "description": "when you want to fire an event no matter how a process exits.", + "devDependencies": { + "chai": "^3.5.0", + "coveralls": "^2.11.10", + "nyc": "^8.1.0", + "standard": "^7.1.2", + "standard-version": "^2.3.0", + "tap": "^8.0.1" + }, + "directories": {}, + "dist": { + "shasum": "b5fdc08f1287ea1178628e415e25132b73646c6d", + "tarball": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + }, + "files": [ + "index.js", + "signals.js" + ], + "gitHead": "9c5ad9809fe6135ef22e2623989deaffe2a4fa8a", + "homepage": "https://github.com/tapjs/signal-exit", + "keywords": [ + "signal", + "exit" + ], + "license": "ISC", + "main": "index.js", + "maintainers": [ + { + "name": "bcoe", + "email": "ben@npmjs.com" + }, + { + "name": "isaacs", + "email": "isaacs@npmjs.com" + } + ], + "name": "signal-exit", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/tapjs/signal-exit.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "pretest": "standard", + "release": "standard-version", + "test": "tap --timeout=240 ./test/*.js --cov" + }, + "version": "3.0.2" +} diff --git a/node_modules/signal-exit/signals.js b/node_modules/signal-exit/signals.js new file mode 100644 index 0000000..3bd67a8 --- /dev/null +++ b/node_modules/signal-exit/signals.js @@ -0,0 +1,53 @@ +// This is not the set of all possible signals. +// +// It IS, however, the set of all signals that trigger +// an exit on either Linux or BSD systems. Linux is a +// superset of the signal names supported on BSD, and +// the unknown signals just fail to register, so we can +// catch that easily enough. +// +// Don't bother with SIGKILL. It's uncatchable, which +// means that we can't fire any callbacks anyway. +// +// If a user does happen to register a handler on a non- +// fatal signal like SIGWINCH or something, and then +// exit, it'll end up firing `process.emit('exit')`, so +// the handler will be fired anyway. +// +// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised +// artificially, inherently leave the process in a +// state from which it is not safe to try and enter JS +// listeners. +module.exports = [ + 'SIGABRT', + 'SIGALRM', + 'SIGHUP', + 'SIGINT', + 'SIGTERM' +] + +if (process.platform !== 'win32') { + module.exports.push( + 'SIGVTALRM', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGUSR2', + 'SIGTRAP', + 'SIGSYS', + 'SIGQUIT', + 'SIGIOT' + // should detect profiler and enable/disable accordingly. + // see #21 + // 'SIGPROF' + ) +} + +if (process.platform === 'linux') { + module.exports.push( + 'SIGIO', + 'SIGPOLL', + 'SIGPWR', + 'SIGSTKFLT', + 'SIGUNUSED' + ) +} diff --git a/node_modules/spdx-correct/LICENSE b/node_modules/spdx-correct/LICENSE new file mode 100644 index 0000000..4b54239 --- /dev/null +++ b/node_modules/spdx-correct/LICENSE @@ -0,0 +1,57 @@ +SPDX:Apache-2.0 + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. diff --git a/node_modules/spdx-correct/README.md b/node_modules/spdx-correct/README.md new file mode 100644 index 0000000..4289e5c --- /dev/null +++ b/node_modules/spdx-correct/README.md @@ -0,0 +1,10 @@ +```javascript +var correct = require('spdx-correct'); +var assert = require('assert'); + +assert.equal(correct('mit'), 'MIT') + +assert.equal(correct('Apache 2'), 'Apache-2.0') + +assert(correct('No idea what license') === null) +``` diff --git a/node_modules/spdx-correct/index.js b/node_modules/spdx-correct/index.js new file mode 100644 index 0000000..75b7a21 --- /dev/null +++ b/node_modules/spdx-correct/index.js @@ -0,0 +1,237 @@ +var licenseIDs = require('spdx-license-ids'); + +function valid(string) { + return licenseIDs.indexOf(string) > -1; +} + +// Common transpositions of license identifier acronyms +var transpositions = [ + ['APGL', 'AGPL'], + ['Gpl', 'GPL'], + ['GLP', 'GPL'], + ['APL', 'Apache'], + ['ISD', 'ISC'], + ['GLP', 'GPL'], + ['IST', 'ISC'], + ['Claude', 'Clause'], + [' or later', '+'], + [' International', ''], + ['GNU', 'GPL'], + ['GUN', 'GPL'], + ['+', ''], + ['GNU GPL', 'GPL'], + ['GNU/GPL', 'GPL'], + ['GNU GLP', 'GPL'], + ['GNU General Public License', 'GPL'], + ['Gnu public license', 'GPL'], + ['GNU Public License', 'GPL'], + ['GNU GENERAL PUBLIC LICENSE', 'GPL'], + ['MTI', 'MIT'], + ['Mozilla Public License', 'MPL'], + ['WTH', 'WTF'], + ['-License', ''] +]; + +var TRANSPOSED = 0; +var CORRECT = 1; + +// Simple corrections to nearly valid identifiers. +var transforms = [ + // e.g. 'mit' + function(argument) { + return argument.toUpperCase(); + }, + // e.g. 'MIT ' + function(argument) { + return argument.trim(); + }, + // e.g. 'M.I.T.' + function(argument) { + return argument.replace(/\./g, ''); + }, + // e.g. 'Apache- 2.0' + function(argument) { + return argument.replace(/\s+/g, ''); + }, + // e.g. 'CC BY 4.0'' + function(argument) { + return argument.replace(/\s+/g, '-'); + }, + // e.g. 'LGPLv2.1' + function(argument) { + return argument.replace('v', '-'); + }, + // e.g. 'Apache 2.0' + function(argument) { + return argument.replace(/,?\s*(\d)/, '-$1'); + }, + // e.g. 'GPL 2' + function(argument) { + return argument.replace(/,?\s*(\d)/, '-$1.0'); + }, + // e.g. 'Apache Version 2.0' + function(argument) { + return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, '-$2'); + }, + // e.g. 'Apache Version 2' + function(argument) { + return argument.replace(/,?\s*(V\.|v\.|V|v|Version|version)\s*(\d)/, '-$2.0'); + }, + // e.g. 'ZLIB' + function(argument) { + return argument[0].toUpperCase() + argument.slice(1); + }, + // e.g. 'MPL/2.0' + function(argument) { + return argument.replace('/', '-'); + }, + // e.g. 'Apache 2' + function(argument) { + return argument + .replace(/\s*V\s*(\d)/, '-$1') + .replace(/(\d)$/, '$1.0'); + }, + // e.g. 'GPL-2.0-' + function(argument) { + return argument.slice(0, argument.length - 1); + }, + // e.g. 'GPL2' + function(argument) { + return argument.replace(/(\d)$/, '-$1.0'); + }, + // e.g. 'BSD 3' + function(argument) { + return argument.replace(/(-| )?(\d)$/, '-$2-Clause'); + }, + // e.g. 'BSD clause 3' + function(argument) { + return argument.replace(/(-| )clause(-| )(\d)/, '-$3-Clause'); + }, + // e.g. 'BY-NC-4.0' + function(argument) { + return 'CC-' + argument; + }, + // e.g. 'BY-NC' + function(argument) { + return 'CC-' + argument + '-4.0'; + }, + // e.g. 'Attribution-NonCommercial' + function(argument) { + return argument + .replace('Attribution', 'BY') + .replace('NonCommercial', 'NC') + .replace('NoDerivatives', 'ND') + .replace(/ (\d)/, '-$1') + .replace(/ ?International/, ''); + }, + // e.g. 'Attribution-NonCommercial' + function(argument) { + return 'CC-' + + argument + .replace('Attribution', 'BY') + .replace('NonCommercial', 'NC') + .replace('NoDerivatives', 'ND') + .replace(/ (\d)/, '-$1') + .replace(/ ?International/, '') + + '-4.0'; + } +]; + +// If all else fails, guess that strings containing certain substrings +// meant to identify certain licenses. +var lastResorts = [ + ['UNLI', 'Unlicense'], + ['WTF', 'WTFPL'], + ['2 CLAUSE', 'BSD-2-Clause'], + ['2-CLAUSE', 'BSD-2-Clause'], + ['3 CLAUSE', 'BSD-3-Clause'], + ['3-CLAUSE', 'BSD-3-Clause'], + ['AFFERO', 'AGPL-3.0'], + ['AGPL', 'AGPL-3.0'], + ['APACHE', 'Apache-2.0'], + ['ARTISTIC', 'Artistic-2.0'], + ['Affero', 'AGPL-3.0'], + ['BEER', 'Beerware'], + ['BOOST', 'BSL-1.0'], + ['BSD', 'BSD-2-Clause'], + ['ECLIPSE', 'EPL-1.0'], + ['FUCK', 'WTFPL'], + ['GNU', 'GPL-3.0'], + ['LGPL', 'LGPL-3.0'], + ['GPL', 'GPL-3.0'], + ['MIT', 'MIT'], + ['MPL', 'MPL-2.0'], + ['X11', 'X11'], + ['ZLIB', 'Zlib'] +]; + +var SUBSTRING = 0; +var IDENTIFIER = 1; + +var validTransformation = function(identifier) { + for (var i = 0; i < transforms.length; i++) { + var transformed = transforms[i](identifier); + if (transformed !== identifier && valid(transformed)) { + return transformed; + } + } + return null; +}; + +var validLastResort = function(identifier) { + var upperCased = identifier.toUpperCase(); + for (var i = 0; i < lastResorts.length; i++) { + var lastResort = lastResorts[i]; + if (upperCased.indexOf(lastResort[SUBSTRING]) > -1) { + return lastResort[IDENTIFIER]; + } + } + return null; +}; + +var anyCorrection = function(identifier, check) { + for (var i = 0; i < transpositions.length; i++) { + var transposition = transpositions[i]; + var transposed = transposition[TRANSPOSED]; + if (identifier.indexOf(transposed) > -1) { + var corrected = identifier.replace( + transposed, + transposition[CORRECT] + ); + var checked = check(corrected); + if (checked !== null) { + return checked; + } + } + } + return null; +}; + +module.exports = function(identifier) { + identifier = identifier.replace(/\+$/, ''); + if (valid(identifier)) { + return identifier; + } + var transformed = validTransformation(identifier); + if (transformed !== null) { + return transformed; + } + transformed = anyCorrection(identifier, function(argument) { + if (valid(argument)) { + return argument; + } + return validTransformation(argument); + }); + if (transformed !== null) { + return transformed; + } + transformed = validLastResort(identifier); + if (transformed !== null) { + return transformed; + } + transformed = anyCorrection(identifier, validLastResort); + if (transformed !== null) { + return transformed; + } + return null; +}; diff --git a/node_modules/spdx-correct/package.json b/node_modules/spdx-correct/package.json new file mode 100644 index 0000000..caded88 --- /dev/null +++ b/node_modules/spdx-correct/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + { + "raw": "spdx-correct@~1.0.0", + "scope": null, + "escapedName": "spdx-correct", + "name": "spdx-correct", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/validate-npm-package-license" + ] + ], + "_from": "spdx-correct@>=1.0.0 <1.1.0", + "_id": "spdx-correct@1.0.2", + "_inCache": true, + "_location": "/spdx-correct", + "_nodeVersion": "4.2.1", + "_npmUser": { + "name": "kemitchell", + "email": "kyle@kemitchell.com" + }, + "_npmVersion": "3.3.6", + "_phantomChildren": {}, + "_requested": { + "raw": "spdx-correct@~1.0.0", + "scope": null, + "escapedName": "spdx-correct", + "name": "spdx-correct", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/validate-npm-package-license" + ], + "_resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "_shasum": "4b3073d933ff51f3912f03ac5519498a4150db40", + "_shrinkwrap": null, + "_spec": "spdx-correct@~1.0.0", + "_where": "/home/burchettm/statsbot/node_modules/validate-npm-package-license", + "author": { + "name": "Kyle E. Mitchell", + "email": "kyle@kemitchell.com", + "url": "https://kemitchell.com" + }, + "bugs": { + "url": "https://github.com/kemitchell/spdx-correct.js/issues" + }, + "dependencies": { + "spdx-license-ids": "^1.0.2" + }, + "description": "correct invalid SPDX identifiers", + "devDependencies": { + "defence-cli": "^1.0.1", + "replace-require-self": "^1.0.0", + "spdx-expression-parse": "^1.0.0", + "tape": "~4.0.0" + }, + "directories": {}, + "dist": { + "shasum": "4b3073d933ff51f3912f03ac5519498a4150db40", + "tarball": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz" + }, + "gitHead": "8430a3ad521e1455208db33faafcb79c7b074236", + "homepage": "https://github.com/kemitchell/spdx-correct.js#readme", + "keywords": [ + "SPDX", + "law", + "legal", + "license", + "metadata" + ], + "license": "Apache-2.0", + "maintainers": [ + { + "name": "kemitchell", + "email": "kyle@kemitchell.com" + }, + { + "name": "othiym23", + "email": "ogd@aoaioxxysz.net" + } + ], + "name": "spdx-correct", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/kemitchell/spdx-correct.js.git" + }, + "scripts": { + "test": "defence README.md | replace-require-self | node && tape *.test.js" + }, + "version": "1.0.2" +} diff --git a/node_modules/spdx-expression-parse/AUTHORS b/node_modules/spdx-expression-parse/AUTHORS new file mode 100644 index 0000000..155f0f6 --- /dev/null +++ b/node_modules/spdx-expression-parse/AUTHORS @@ -0,0 +1,3 @@ +C. Scott Ananian (http://cscott.net) +Kyle E. Mitchell (https://kemitchell.com) +Shinnosuke Watanabe diff --git a/node_modules/spdx-expression-parse/LICENSE b/node_modules/spdx-expression-parse/LICENSE new file mode 100644 index 0000000..831618e --- /dev/null +++ b/node_modules/spdx-expression-parse/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2015 Kyle E. Mitchell & other authors listed in AUTHORS + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/spdx-expression-parse/README.md b/node_modules/spdx-expression-parse/README.md new file mode 100644 index 0000000..9928cdc --- /dev/null +++ b/node_modules/spdx-expression-parse/README.md @@ -0,0 +1,83 @@ +This package parses SPDX license expression strings describing license terms, like [package.json license strings](https://docs.npmjs.com/files/package.json#license), into consistently structured ECMAScript objects. The npm command-line interface depends on this package, as do many automatic license-audit tools. + +In a nutshell: + +```javascript +var parse = require('spdx-expression-parse') +var assert = require('assert') + +assert.deepEqual( + // Licensed under the terms of the Two-Clause BSD License. + parse('BSD-2-Clause'), + {license: 'BSD-2-Clause'} +) + +assert.throws(function () { + // An invalid SPDX license expression. + // Should be `Apache-2.0`. + parse('Apache 2') +}) + +assert.deepEqual( + // Dual licensed under LGPL 2.1 or a combination of the Three-Clause + // BSD License and the MIT License. + parse('(LGPL-2.1 OR BSD-3-Clause AND MIT)'), + { + left: {license: 'LGPL-2.1'}, + conjunction: 'or', + right: { + left: {license: 'BSD-3-Clause'}, + conjunction: 'and', + right: {license: 'MIT'} + } + } +) +``` + +The syntax comes from the [Software Package Data eXchange (SPDX)](https://spdx.org/), a standard from the [Linux Foundation](https://www.linuxfoundation.org) for shareable data about software package license terms. SPDX aims to make sharing and auditing license data easy, especially for users of open-source software. + +The bulk of the SPDX standard describes syntax and semantics of XML metadata files. This package implements two lightweight, plain-text components of that larger standard: + +1. The [license list](https://spdx.org/licenses), a mapping from specific string identifiers, like `Apache-2.0`, to standard form license texts and bolt-on license exceptions. The [spdx-license-ids](https://www.npmjs.com/package/spdx-exceptions) and [spdx-exceptions](https://www.npmjs.com/package/spdx-license-ids) packages implement the license list. They are development dependencies of this package. + + Any license identifier from the license list is a valid license expression: + + ```javascript + require('spdx-license-ids').forEach(function (id) { + assert.deepEqual(parse(id), {license: id}) + }) + ``` + + So is any license identifier `WITH` a standardized license exception: + + ```javascript + require('spdx-license-ids').forEach(function (id) { + require('spdx-exceptions').forEach(function (e) { + assert.deepEqual( + parse(id + ' WITH ' + e), + {license: id, exception: e} + ) + }) + }) + ``` + +2. The license expression language, for describing simple and complex license terms, like `MIT` for MIT-licensed and `(GPL-2.0 OR Apache-2.0)` for dual-licensing under GPL 2.0 and Apache 2.0. This package implements the license expression language. + + ```javascript + assert.deepEqual( + // Licensed under a combination of the MIT License and a combination + // of LGPL 2.1 (or a later version) and the Three-Clause BSD License. + parse('(MIT AND (LGPL-2.1+ AND BSD-3-Clause))'), + { + left: {license: 'MIT'}, + conjunction: 'and', + right: { + left: {license: 'LGPL-2.1', plus: true}, + conjunction: 'and', + right: {license: 'BSD-3-Clause'} + } + } + ) + ``` + +The Linux Foundation and its contributors license the SPDX standard under the terms of [the Creative Commons Attribution License 3.0 Unported (SPDX: "CC-BY-3.0")](http://spdx.org/licenses/CC-BY-3.0). "SPDX" is a United States federally registered trademark of the Linux Foundation. The authors of this package license their work under the terms of the MIT License. diff --git a/node_modules/spdx-expression-parse/index.js b/node_modules/spdx-expression-parse/index.js new file mode 100644 index 0000000..56a9b50 --- /dev/null +++ b/node_modules/spdx-expression-parse/index.js @@ -0,0 +1,5 @@ +var parser = require('./parser').parser + +module.exports = function (argument) { + return parser.parse(argument) +} diff --git a/node_modules/spdx-expression-parse/package.json b/node_modules/spdx-expression-parse/package.json new file mode 100644 index 0000000..36f7b67 --- /dev/null +++ b/node_modules/spdx-expression-parse/package.json @@ -0,0 +1,125 @@ +{ + "_args": [ + [ + { + "raw": "spdx-expression-parse@~1.0.0", + "scope": null, + "escapedName": "spdx-expression-parse", + "name": "spdx-expression-parse", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/validate-npm-package-license" + ] + ], + "_from": "spdx-expression-parse@>=1.0.0 <1.1.0", + "_id": "spdx-expression-parse@1.0.4", + "_inCache": true, + "_location": "/spdx-expression-parse", + "_nodeVersion": "4.6.0", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/spdx-expression-parse-1.0.4.tgz_1475698361593_0.7478717286139727" + }, + "_npmUser": { + "name": "kemitchell", + "email": "kyle@kemitchell.com" + }, + "_npmVersion": "3.10.8", + "_phantomChildren": {}, + "_requested": { + "raw": "spdx-expression-parse@~1.0.0", + "scope": null, + "escapedName": "spdx-expression-parse", + "name": "spdx-expression-parse", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/validate-npm-package-license" + ], + "_resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "_shasum": "9bdf2f20e1f40ed447fbe273266191fced51626c", + "_shrinkwrap": null, + "_spec": "spdx-expression-parse@~1.0.0", + "_where": "/home/burchettm/statsbot/node_modules/validate-npm-package-license", + "author": { + "name": "Kyle E. Mitchell", + "email": "kyle@kemitchell.com", + "url": "http://kemitchell.com" + }, + "bugs": { + "url": "https://github.com/kemitchell/spdx-expression-parse.js/issues" + }, + "contributors": [ + { + "name": "C. Scott Ananian", + "email": "cscott@cscott.net", + "url": "http://cscott.net" + }, + { + "name": "Kyle E. Mitchell", + "email": "kyle@kemitchell.com", + "url": "https://kemitchell.com" + }, + { + "name": "Shinnosuke Watanabe", + "email": "snnskwtnb@gmail.com" + } + ], + "dependencies": {}, + "description": "parse SPDX license expressions", + "devDependencies": { + "defence-cli": "^1.0.1", + "jison": "^0.4.15", + "replace-require-self": "^1.0.0", + "spdx-exceptions": "^1.0.4", + "spdx-license-ids": "^1.0.0", + "standard": "^8.0.0" + }, + "directories": {}, + "dist": { + "shasum": "9bdf2f20e1f40ed447fbe273266191fced51626c", + "tarball": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz" + }, + "files": [ + "AUTHORS", + "index.js", + "parser.js" + ], + "gitHead": "326b222ed9e89e9ef472656e9970649b9ee4e8f3", + "homepage": "https://github.com/kemitchell/spdx-expression-parse.js#readme", + "keywords": [ + "SPDX", + "law", + "legal", + "license", + "metadata", + "package", + "package.json", + "standards" + ], + "license": "(MIT AND CC-BY-3.0)", + "maintainers": [ + { + "name": "kemitchell", + "email": "kyle@kemitchell.com" + } + ], + "name": "spdx-expression-parse", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/kemitchell/spdx-expression-parse.js.git" + }, + "scripts": { + "lint": "standard", + "prepublish": "node generate-parser.js > parser.js", + "pretest": "npm run prepublish", + "test": "defence -i javascript README.md | replace-require-self | node" + }, + "version": "1.0.4" +} diff --git a/node_modules/spdx-expression-parse/parser.js b/node_modules/spdx-expression-parse/parser.js new file mode 100644 index 0000000..a5e2edb --- /dev/null +++ b/node_modules/spdx-expression-parse/parser.js @@ -0,0 +1,1357 @@ +/* parser generated by jison 0.4.17 */ +/* + Returns a Parser object of the following structure: + + Parser: { + yy: {} + } + + Parser.prototype: { + yy: {}, + trace: function(), + symbols_: {associative list: name ==> number}, + terminals_: {associative list: number ==> name}, + productions_: [...], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), + table: [...], + defaultActions: {...}, + parseError: function(str, hash), + parse: function(input), + + lexer: { + EOF: 1, + parseError: function(str, hash), + setInput: function(input), + input: function(), + unput: function(str), + more: function(), + less: function(n), + pastInput: function(), + upcomingInput: function(), + showPosition: function(), + test_match: function(regex_match_array, rule_index), + next: function(), + lex: function(), + begin: function(condition), + popState: function(), + _currentRules: function(), + topState: function(), + pushState: function(condition), + + options: { + ranges: boolean (optional: true ==> token location info will include a .range[] member) + flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) + backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) + }, + + performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), + rules: [...], + conditions: {associative list: name ==> set}, + } + } + + + token location info (@$, _$, etc.): { + first_line: n, + last_line: n, + first_column: n, + last_column: n, + range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) + } + + + the parseError function receives a 'hash' object with these members for lexer and parser errors: { + text: (matched text) + token: (the produced terminal token, if any) + line: (yylineno) + } + while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { + loc: (yylloc) + expected: (string describing the set of expected tokens) + recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) + } +*/ +var spdxparse = (function(){ +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,5],$V1=[1,6],$V2=[1,7],$V3=[1,4],$V4=[1,9],$V5=[1,10],$V6=[5,14,15,17],$V7=[5,12,14,15,17]; +var parser = {trace: function trace() { }, +yy: {}, +symbols_: {"error":2,"start":3,"expression":4,"EOS":5,"simpleExpression":6,"LICENSE":7,"PLUS":8,"LICENSEREF":9,"DOCUMENTREF":10,"COLON":11,"WITH":12,"EXCEPTION":13,"AND":14,"OR":15,"OPEN":16,"CLOSE":17,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOS",7:"LICENSE",8:"PLUS",9:"LICENSEREF",10:"DOCUMENTREF",11:"COLON",12:"WITH",13:"EXCEPTION",14:"AND",15:"OR",16:"OPEN",17:"CLOSE"}, +productions_: [0,[3,2],[6,1],[6,2],[6,1],[6,3],[4,1],[4,3],[4,3],[4,3],[4,3]], +performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { +/* this == yyval */ + +var $0 = $$.length - 1; +switch (yystate) { +case 1: +return this.$ = $$[$0-1] +break; +case 2: case 4: case 5: +this.$ = {license: yytext} +break; +case 3: +this.$ = {license: $$[$0-1], plus: true} +break; +case 6: +this.$ = $$[$0] +break; +case 7: +this.$ = {exception: $$[$0]} +this.$.license = $$[$0-2].license +if ($$[$0-2].hasOwnProperty('plus')) { + this.$.plus = $$[$0-2].plus +} +break; +case 8: +this.$ = {conjunction: 'and', left: $$[$0-2], right: $$[$0]} +break; +case 9: +this.$ = {conjunction: 'or', left: $$[$0-2], right: $$[$0]} +break; +case 10: +this.$ = $$[$0-1] +break; +} +}, +table: [{3:1,4:2,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{1:[3]},{5:[1,8],14:$V4,15:$V5},o($V6,[2,6],{12:[1,11]}),{4:12,6:3,7:$V0,9:$V1,10:$V2,16:$V3},o($V7,[2,2],{8:[1,13]}),o($V7,[2,4]),{11:[1,14]},{1:[2,1]},{4:15,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{4:16,6:3,7:$V0,9:$V1,10:$V2,16:$V3},{13:[1,17]},{14:$V4,15:$V5,17:[1,18]},o($V7,[2,3]),{9:[1,19]},o($V6,[2,8]),o([5,15,17],[2,9],{14:$V4}),o($V6,[2,7]),o($V6,[2,10]),o($V7,[2,5])], +defaultActions: {8:[2,1]}, +parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + function _parseError (msg, hash) { + this.message = msg; + this.hash = hash; + } + _parseError.prototype = Error; + + throw new _parseError(str, hash); + } +}, +parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer; + sharedState.yy.parser = this; + if (typeof lexer.yylloc == 'undefined') { + lexer.yylloc = {}; + } + var yyloc = lexer.yylloc; + lstack.push(yyloc); + var ranges = lexer.options && lexer.options.ranges; + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function popStack(n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + _token_stack: + var lex = function () { + var token; + token = lexer.lex() || EOF; + if (typeof token !== 'number') { + token = self.symbols_[token] || token; + } + return token; + }; + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == 'undefined') { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = ''; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\''); + } + } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + } + this.parseError(errStr, { + text: lexer.match, + token: this.terminals_[symbol] || symbol, + line: lexer.yylineno, + loc: yyloc, + expected: expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer.yytext); + lstack.push(lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = lexer.yyleng; + yytext = lexer.yytext; + yylineno = lexer.yylineno; + yyloc = lexer.yylloc; + if (recovering > 0) { + recovering--; + } + } else { + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== 'undefined') { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; +}}; +/* generated by jison-lex 0.3.4 */ +var lexer = (function(){ +var lexer = ({ + +EOF:1, + +parseError:function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + +// resets the lexer, sets new input +setInput:function (input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0,0]; + } + this.offset = 0; + return this; + }, + +// consumes and returns one char from the input +input:function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + + this._input = this._input.slice(1); + return ch; + }, + +// unshifts one char (or a string) into the input +unput:function (ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? + (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length : + this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + +// When called from action, caches matched text and appends it on next action +more:function () { + this._more = true; + return this; + }, + +// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +reject:function () { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + + } + return this; + }, + +// retain first n characters of the match +less:function (n) { + this.unput(this.match.slice(n)); + }, + +// displays already matched input, i.e. for error messages +pastInput:function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); + }, + +// displays upcoming input, i.e. for error messages +upcomingInput:function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20-next.length); + } + return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + +// displays the character position where the lexing error occurred, i.e. for error messages +showPosition:function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + +// test the lexed token: return FALSE when not a match, otherwise return token +test_match:function (match, indexed_rule) { + var token, + lines, + backup; + + if (this.options.backtrack_lexer) { + // save context + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? + lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : + this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + // recover context + for (var k in backup) { + this[k] = backup[k]; + } + return false; // rule action called reject() implying the next rule should be tested instead. + } + return false; + }, + +// return next match in input +next:function () { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + + var token, + match, + tempMatch, + index; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; // rule action called reject() implying a rule MISmatch. + } else { + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + +// return next match that has a token +lex:function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + +// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +begin:function begin(condition) { + this.conditionStack.push(condition); + }, + +// pop the previously active lexer condition state off the condition stack +popState:function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + +// produce the lexer rule set which is active for the currently active lexer condition state +_currentRules:function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + +// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +topState:function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + +// alias for begin(condition) +pushState:function pushState(condition) { + this.begin(condition); + }, + +// return the number of states currently on the stack +stateStackSize:function stateStackSize() { + return this.conditionStack.length; + }, +options: {}, +performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { +var YYSTATE=YY_START; +switch($avoiding_name_collisions) { +case 0:return 5 +break; +case 1:/* skip whitespace */ +break; +case 2:return 8 +break; +case 3:return 16 +break; +case 4:return 17 +break; +case 5:return 11 +break; +case 6:return 10 +break; +case 7:return 9 +break; +case 8:return 14 +break; +case 9:return 15 +break; +case 10:return 12 +break; +case 11:return 7 +break; +case 12:return 7 +break; +case 13:return 7 +break; +case 14:return 7 +break; +case 15:return 7 +break; +case 16:return 7 +break; +case 17:return 7 +break; +case 18:return 7 +break; +case 19:return 7 +break; +case 20:return 7 +break; +case 21:return 7 +break; +case 22:return 7 +break; +case 23:return 7 +break; +case 24:return 13 +break; +case 25:return 13 +break; +case 26:return 13 +break; +case 27:return 13 +break; +case 28:return 13 +break; +case 29:return 13 +break; +case 30:return 13 +break; +case 31:return 13 +break; +case 32:return 7 +break; +case 33:return 13 +break; +case 34:return 7 +break; +case 35:return 13 +break; +case 36:return 7 +break; +case 37:return 13 +break; +case 38:return 13 +break; +case 39:return 7 +break; +case 40:return 13 +break; +case 41:return 13 +break; +case 42:return 13 +break; +case 43:return 13 +break; +case 44:return 13 +break; +case 45:return 7 +break; +case 46:return 13 +break; +case 47:return 7 +break; +case 48:return 7 +break; +case 49:return 7 +break; +case 50:return 7 +break; +case 51:return 7 +break; +case 52:return 7 +break; +case 53:return 7 +break; +case 54:return 7 +break; +case 55:return 7 +break; +case 56:return 7 +break; +case 57:return 7 +break; +case 58:return 7 +break; +case 59:return 7 +break; +case 60:return 7 +break; +case 61:return 7 +break; +case 62:return 7 +break; +case 63:return 13 +break; +case 64:return 7 +break; +case 65:return 7 +break; +case 66:return 13 +break; +case 67:return 7 +break; +case 68:return 7 +break; +case 69:return 7 +break; +case 70:return 7 +break; +case 71:return 7 +break; +case 72:return 7 +break; +case 73:return 13 +break; +case 74:return 7 +break; +case 75:return 13 +break; +case 76:return 7 +break; +case 77:return 7 +break; +case 78:return 7 +break; +case 79:return 7 +break; +case 80:return 7 +break; +case 81:return 7 +break; +case 82:return 7 +break; +case 83:return 7 +break; +case 84:return 7 +break; +case 85:return 7 +break; +case 86:return 7 +break; +case 87:return 7 +break; +case 88:return 7 +break; +case 89:return 7 +break; +case 90:return 7 +break; +case 91:return 7 +break; +case 92:return 7 +break; +case 93:return 7 +break; +case 94:return 7 +break; +case 95:return 7 +break; +case 96:return 7 +break; +case 97:return 7 +break; +case 98:return 7 +break; +case 99:return 7 +break; +case 100:return 7 +break; +case 101:return 7 +break; +case 102:return 7 +break; +case 103:return 7 +break; +case 104:return 7 +break; +case 105:return 7 +break; +case 106:return 7 +break; +case 107:return 7 +break; +case 108:return 7 +break; +case 109:return 7 +break; +case 110:return 7 +break; +case 111:return 7 +break; +case 112:return 7 +break; +case 113:return 7 +break; +case 114:return 7 +break; +case 115:return 7 +break; +case 116:return 7 +break; +case 117:return 7 +break; +case 118:return 7 +break; +case 119:return 7 +break; +case 120:return 7 +break; +case 121:return 7 +break; +case 122:return 7 +break; +case 123:return 7 +break; +case 124:return 7 +break; +case 125:return 7 +break; +case 126:return 7 +break; +case 127:return 7 +break; +case 128:return 7 +break; +case 129:return 7 +break; +case 130:return 7 +break; +case 131:return 7 +break; +case 132:return 7 +break; +case 133:return 7 +break; +case 134:return 7 +break; +case 135:return 7 +break; +case 136:return 7 +break; +case 137:return 7 +break; +case 138:return 7 +break; +case 139:return 7 +break; +case 140:return 7 +break; +case 141:return 7 +break; +case 142:return 7 +break; +case 143:return 7 +break; +case 144:return 7 +break; +case 145:return 7 +break; +case 146:return 7 +break; +case 147:return 7 +break; +case 148:return 7 +break; +case 149:return 7 +break; +case 150:return 7 +break; +case 151:return 7 +break; +case 152:return 7 +break; +case 153:return 7 +break; +case 154:return 7 +break; +case 155:return 7 +break; +case 156:return 7 +break; +case 157:return 7 +break; +case 158:return 7 +break; +case 159:return 7 +break; +case 160:return 7 +break; +case 161:return 7 +break; +case 162:return 7 +break; +case 163:return 7 +break; +case 164:return 7 +break; +case 165:return 7 +break; +case 166:return 7 +break; +case 167:return 7 +break; +case 168:return 7 +break; +case 169:return 7 +break; +case 170:return 7 +break; +case 171:return 7 +break; +case 172:return 7 +break; +case 173:return 7 +break; +case 174:return 7 +break; +case 175:return 7 +break; +case 176:return 7 +break; +case 177:return 7 +break; +case 178:return 7 +break; +case 179:return 7 +break; +case 180:return 7 +break; +case 181:return 7 +break; +case 182:return 7 +break; +case 183:return 7 +break; +case 184:return 7 +break; +case 185:return 7 +break; +case 186:return 7 +break; +case 187:return 7 +break; +case 188:return 7 +break; +case 189:return 7 +break; +case 190:return 7 +break; +case 191:return 7 +break; +case 192:return 7 +break; +case 193:return 7 +break; +case 194:return 7 +break; +case 195:return 7 +break; +case 196:return 7 +break; +case 197:return 7 +break; +case 198:return 7 +break; +case 199:return 7 +break; +case 200:return 7 +break; +case 201:return 7 +break; +case 202:return 7 +break; +case 203:return 7 +break; +case 204:return 7 +break; +case 205:return 7 +break; +case 206:return 7 +break; +case 207:return 7 +break; +case 208:return 7 +break; +case 209:return 7 +break; +case 210:return 7 +break; +case 211:return 7 +break; +case 212:return 7 +break; +case 213:return 7 +break; +case 214:return 7 +break; +case 215:return 7 +break; +case 216:return 7 +break; +case 217:return 7 +break; +case 218:return 7 +break; +case 219:return 7 +break; +case 220:return 7 +break; +case 221:return 7 +break; +case 222:return 7 +break; +case 223:return 7 +break; +case 224:return 7 +break; +case 225:return 7 +break; +case 226:return 7 +break; +case 227:return 7 +break; +case 228:return 7 +break; +case 229:return 7 +break; +case 230:return 7 +break; +case 231:return 7 +break; +case 232:return 7 +break; +case 233:return 7 +break; +case 234:return 7 +break; +case 235:return 7 +break; +case 236:return 7 +break; +case 237:return 7 +break; +case 238:return 7 +break; +case 239:return 7 +break; +case 240:return 7 +break; +case 241:return 7 +break; +case 242:return 7 +break; +case 243:return 7 +break; +case 244:return 7 +break; +case 245:return 7 +break; +case 246:return 7 +break; +case 247:return 7 +break; +case 248:return 7 +break; +case 249:return 7 +break; +case 250:return 7 +break; +case 251:return 7 +break; +case 252:return 7 +break; +case 253:return 7 +break; +case 254:return 7 +break; +case 255:return 7 +break; +case 256:return 7 +break; +case 257:return 7 +break; +case 258:return 7 +break; +case 259:return 7 +break; +case 260:return 7 +break; +case 261:return 7 +break; +case 262:return 7 +break; +case 263:return 7 +break; +case 264:return 7 +break; +case 265:return 7 +break; +case 266:return 7 +break; +case 267:return 7 +break; +case 268:return 7 +break; +case 269:return 7 +break; +case 270:return 7 +break; +case 271:return 7 +break; +case 272:return 7 +break; +case 273:return 7 +break; +case 274:return 7 +break; +case 275:return 7 +break; +case 276:return 7 +break; +case 277:return 7 +break; +case 278:return 7 +break; +case 279:return 7 +break; +case 280:return 7 +break; +case 281:return 7 +break; +case 282:return 7 +break; +case 283:return 7 +break; +case 284:return 7 +break; +case 285:return 7 +break; +case 286:return 7 +break; +case 287:return 7 +break; +case 288:return 7 +break; +case 289:return 7 +break; +case 290:return 7 +break; +case 291:return 7 +break; +case 292:return 7 +break; +case 293:return 7 +break; +case 294:return 7 +break; +case 295:return 7 +break; +case 296:return 7 +break; +case 297:return 7 +break; +case 298:return 7 +break; +case 299:return 7 +break; +case 300:return 7 +break; +case 301:return 7 +break; +case 302:return 7 +break; +case 303:return 7 +break; +case 304:return 7 +break; +case 305:return 7 +break; +case 306:return 7 +break; +case 307:return 7 +break; +case 308:return 7 +break; +case 309:return 7 +break; +case 310:return 7 +break; +case 311:return 7 +break; +case 312:return 7 +break; +case 313:return 7 +break; +case 314:return 7 +break; +case 315:return 7 +break; +case 316:return 7 +break; +case 317:return 7 +break; +case 318:return 7 +break; +case 319:return 7 +break; +case 320:return 7 +break; +case 321:return 7 +break; +case 322:return 7 +break; +case 323:return 7 +break; +case 324:return 7 +break; +case 325:return 7 +break; +case 326:return 7 +break; +case 327:return 7 +break; +case 328:return 7 +break; +case 329:return 7 +break; +case 330:return 7 +break; +case 331:return 7 +break; +case 332:return 7 +break; +case 333:return 7 +break; +case 334:return 7 +break; +case 335:return 7 +break; +case 336:return 7 +break; +case 337:return 7 +break; +case 338:return 7 +break; +case 339:return 7 +break; +case 340:return 7 +break; +case 341:return 7 +break; +case 342:return 7 +break; +case 343:return 7 +break; +case 344:return 7 +break; +case 345:return 7 +break; +case 346:return 7 +break; +case 347:return 7 +break; +case 348:return 7 +break; +case 349:return 7 +break; +case 350:return 7 +break; +case 351:return 7 +break; +case 352:return 7 +break; +case 353:return 7 +break; +case 354:return 7 +break; +case 355:return 7 +break; +case 356:return 7 +break; +case 357:return 7 +break; +case 358:return 7 +break; +case 359:return 7 +break; +case 360:return 7 +break; +case 361:return 7 +break; +case 362:return 7 +break; +case 363:return 7 +break; +case 364:return 7 +break; +} +}, +rules: [/^(?:$)/,/^(?:\s+)/,/^(?:\+)/,/^(?:\()/,/^(?:\))/,/^(?::)/,/^(?:DocumentRef-([0-9A-Za-z-+.]+))/,/^(?:LicenseRef-([0-9A-Za-z-+.]+))/,/^(?:AND)/,/^(?:OR)/,/^(?:WITH)/,/^(?:BSD-3-Clause-No-Nuclear-License-2014)/,/^(?:BSD-3-Clause-No-Nuclear-Warranty)/,/^(?:GPL-2\.0-with-classpath-exception)/,/^(?:GPL-3\.0-with-autoconf-exception)/,/^(?:GPL-2\.0-with-autoconf-exception)/,/^(?:BSD-3-Clause-No-Nuclear-License)/,/^(?:MPL-2\.0-no-copyleft-exception)/,/^(?:GPL-2\.0-with-bison-exception)/,/^(?:GPL-2\.0-with-font-exception)/,/^(?:GPL-2\.0-with-GCC-exception)/,/^(?:CNRI-Python-GPL-Compatible)/,/^(?:GPL-3\.0-with-GCC-exception)/,/^(?:BSD-3-Clause-Attribution)/,/^(?:Classpath-exception-2\.0)/,/^(?:WxWindows-exception-3\.1)/,/^(?:freertos-exception-2\.0)/,/^(?:Autoconf-exception-3\.0)/,/^(?:i2p-gpl-java-exception)/,/^(?:gnu-javamail-exception)/,/^(?:Nokia-Qt-exception-1\.1)/,/^(?:Autoconf-exception-2\.0)/,/^(?:BSD-2-Clause-FreeBSD)/,/^(?:u-boot-exception-2\.0)/,/^(?:zlib-acknowledgement)/,/^(?:Bison-exception-2\.2)/,/^(?:BSD-2-Clause-NetBSD)/,/^(?:CLISP-exception-2\.0)/,/^(?:eCos-exception-2\.0)/,/^(?:BSD-3-Clause-Clear)/,/^(?:Font-exception-2\.0)/,/^(?:FLTK-exception-2\.0)/,/^(?:GCC-exception-2\.0)/,/^(?:Qwt-exception-1\.0)/,/^(?:Libtool-exception)/,/^(?:BSD-3-Clause-LBNL)/,/^(?:GCC-exception-3\.1)/,/^(?:Artistic-1\.0-Perl)/,/^(?:Artistic-1\.0-cl8)/,/^(?:CC-BY-NC-SA-2\.5)/,/^(?:MIT-advertising)/,/^(?:BSD-Source-Code)/,/^(?:CC-BY-NC-SA-4\.0)/,/^(?:LiLiQ-Rplus-1\.1)/,/^(?:CC-BY-NC-SA-3\.0)/,/^(?:BSD-4-Clause-UC)/,/^(?:CC-BY-NC-SA-2\.0)/,/^(?:CC-BY-NC-SA-1\.0)/,/^(?:CC-BY-NC-ND-4\.0)/,/^(?:CC-BY-NC-ND-3\.0)/,/^(?:CC-BY-NC-ND-2\.5)/,/^(?:CC-BY-NC-ND-2\.0)/,/^(?:CC-BY-NC-ND-1\.0)/,/^(?:LZMA-exception)/,/^(?:BitTorrent-1\.1)/,/^(?:CrystalStacker)/,/^(?:FLTK-exception)/,/^(?:SugarCRM-1\.1\.3)/,/^(?:BSD-Protection)/,/^(?:BitTorrent-1\.0)/,/^(?:HaskellReport)/,/^(?:Interbase-1\.0)/,/^(?:StandardML-NJ)/,/^(?:mif-exception)/,/^(?:Frameworx-1\.0)/,/^(?:389-exception)/,/^(?:CC-BY-NC-2\.0)/,/^(?:CC-BY-NC-2\.5)/,/^(?:CC-BY-NC-3\.0)/,/^(?:CC-BY-NC-4\.0)/,/^(?:W3C-19980720)/,/^(?:CC-BY-SA-1\.0)/,/^(?:CC-BY-SA-2\.0)/,/^(?:CC-BY-SA-2\.5)/,/^(?:CC-BY-ND-2\.0)/,/^(?:CC-BY-SA-4\.0)/,/^(?:CC-BY-SA-3\.0)/,/^(?:Artistic-1\.0)/,/^(?:Artistic-2\.0)/,/^(?:CC-BY-ND-2\.5)/,/^(?:CC-BY-ND-3\.0)/,/^(?:CC-BY-ND-4\.0)/,/^(?:CC-BY-ND-1\.0)/,/^(?:BSD-4-Clause)/,/^(?:BSD-3-Clause)/,/^(?:BSD-2-Clause)/,/^(?:CC-BY-NC-1\.0)/,/^(?:bzip2-1\.0\.6)/,/^(?:Unicode-TOU)/,/^(?:CNRI-Jython)/,/^(?:ImageMagick)/,/^(?:Adobe-Glyph)/,/^(?:CUA-OPL-1\.0)/,/^(?:OLDAP-2\.2\.2)/,/^(?:LiLiQ-R-1\.1)/,/^(?:bzip2-1\.0\.5)/,/^(?:LiLiQ-P-1\.1)/,/^(?:OLDAP-2\.0\.1)/,/^(?:OLDAP-2\.2\.1)/,/^(?:CNRI-Python)/,/^(?:XFree86-1\.1)/,/^(?:OSET-PL-2\.1)/,/^(?:Apache-2\.0)/,/^(?:Watcom-1\.0)/,/^(?:PostgreSQL)/,/^(?:Python-2\.0)/,/^(?:RHeCos-1\.1)/,/^(?:EUDatagrid)/,/^(?:Spencer-99)/,/^(?:Intel-ACPI)/,/^(?:CECILL-1\.0)/,/^(?:CECILL-1\.1)/,/^(?:JasPer-2\.0)/,/^(?:CECILL-2\.0)/,/^(?:CECILL-2\.1)/,/^(?:gSOAP-1\.3b)/,/^(?:Spencer-94)/,/^(?:Apache-1\.1)/,/^(?:Spencer-86)/,/^(?:Apache-1\.0)/,/^(?:ClArtistic)/,/^(?:TORQUE-1\.1)/,/^(?:CATOSL-1\.1)/,/^(?:Adobe-2006)/,/^(?:Zimbra-1\.4)/,/^(?:Zimbra-1\.3)/,/^(?:Condor-1\.1)/,/^(?:CC-BY-3\.0)/,/^(?:CC-BY-2\.5)/,/^(?:OLDAP-2\.4)/,/^(?:SGI-B-1\.1)/,/^(?:SISSL-1\.2)/,/^(?:SGI-B-1\.0)/,/^(?:OLDAP-2\.3)/,/^(?:CC-BY-4\.0)/,/^(?:Crossword)/,/^(?:SimPL-2\.0)/,/^(?:OLDAP-2\.2)/,/^(?:OLDAP-2\.1)/,/^(?:ErlPL-1\.1)/,/^(?:LPPL-1\.3a)/,/^(?:LPPL-1\.3c)/,/^(?:OLDAP-2\.0)/,/^(?:Leptonica)/,/^(?:CPOL-1\.02)/,/^(?:OLDAP-1\.4)/,/^(?:OLDAP-1\.3)/,/^(?:CC-BY-2\.0)/,/^(?:Unlicense)/,/^(?:OLDAP-2\.8)/,/^(?:OLDAP-1\.2)/,/^(?:MakeIndex)/,/^(?:OLDAP-2\.7)/,/^(?:OLDAP-1\.1)/,/^(?:Sleepycat)/,/^(?:D-FSL-1\.0)/,/^(?:CC-BY-1\.0)/,/^(?:OLDAP-2\.6)/,/^(?:WXwindows)/,/^(?:NPOSL-3\.0)/,/^(?:FreeImage)/,/^(?:SGI-B-2\.0)/,/^(?:OLDAP-2\.5)/,/^(?:Beerware)/,/^(?:Newsletr)/,/^(?:NBPL-1\.0)/,/^(?:NASA-1\.3)/,/^(?:NLOD-1\.0)/,/^(?:AGPL-1\.0)/,/^(?:OCLC-2\.0)/,/^(?:ODbL-1\.0)/,/^(?:PDDL-1\.0)/,/^(?:Motosoto)/,/^(?:Afmparse)/,/^(?:ANTLR-PD)/,/^(?:LPL-1\.02)/,/^(?:Abstyles)/,/^(?:eCos-2\.0)/,/^(?:APSL-1\.0)/,/^(?:LPPL-1\.2)/,/^(?:LPPL-1\.1)/,/^(?:LPPL-1\.0)/,/^(?:APSL-1\.1)/,/^(?:APSL-2\.0)/,/^(?:Info-ZIP)/,/^(?:Zend-2\.0)/,/^(?:IBM-pibs)/,/^(?:LGPL-2\.0)/,/^(?:LGPL-3\.0)/,/^(?:LGPL-2\.1)/,/^(?:GFDL-1\.3)/,/^(?:PHP-3\.01)/,/^(?:GFDL-1\.2)/,/^(?:GFDL-1\.1)/,/^(?:AGPL-3\.0)/,/^(?:Giftware)/,/^(?:EUPL-1\.1)/,/^(?:RPSL-1\.0)/,/^(?:EUPL-1\.0)/,/^(?:MIT-enna)/,/^(?:CECILL-B)/,/^(?:diffmark)/,/^(?:CECILL-C)/,/^(?:CDDL-1\.0)/,/^(?:Sendmail)/,/^(?:CDDL-1\.1)/,/^(?:CPAL-1\.0)/,/^(?:APSL-1\.2)/,/^(?:NPL-1\.1)/,/^(?:AFL-1\.2)/,/^(?:Caldera)/,/^(?:AFL-2\.0)/,/^(?:FSFULLR)/,/^(?:AFL-2\.1)/,/^(?:VSL-1\.0)/,/^(?:VOSTROM)/,/^(?:UPL-1\.0)/,/^(?:Dotseqn)/,/^(?:CPL-1\.0)/,/^(?:dvipdfm)/,/^(?:EPL-1\.0)/,/^(?:OCCT-PL)/,/^(?:ECL-1\.0)/,/^(?:Latex2e)/,/^(?:ECL-2\.0)/,/^(?:GPL-1\.0)/,/^(?:GPL-2\.0)/,/^(?:GPL-3\.0)/,/^(?:AFL-3\.0)/,/^(?:LAL-1\.2)/,/^(?:LAL-1\.3)/,/^(?:EFL-1\.0)/,/^(?:EFL-2\.0)/,/^(?:gnuplot)/,/^(?:Aladdin)/,/^(?:LPL-1\.0)/,/^(?:libtiff)/,/^(?:Entessa)/,/^(?:AMDPLPA)/,/^(?:IPL-1\.0)/,/^(?:OPL-1\.0)/,/^(?:OSL-1\.0)/,/^(?:OSL-1\.1)/,/^(?:OSL-2\.0)/,/^(?:OSL-2\.1)/,/^(?:OSL-3\.0)/,/^(?:OpenSSL)/,/^(?:ZPL-2\.1)/,/^(?:PHP-3\.0)/,/^(?:ZPL-2\.0)/,/^(?:ZPL-1\.1)/,/^(?:CC0-1\.0)/,/^(?:SPL-1\.0)/,/^(?:psutils)/,/^(?:MPL-1\.0)/,/^(?:QPL-1\.0)/,/^(?:MPL-1\.1)/,/^(?:MPL-2\.0)/,/^(?:APL-1\.0)/,/^(?:RPL-1\.1)/,/^(?:RPL-1\.5)/,/^(?:MIT-CMU)/,/^(?:Multics)/,/^(?:Eurosym)/,/^(?:BSL-1\.0)/,/^(?:MIT-feh)/,/^(?:Saxpath)/,/^(?:Borceux)/,/^(?:OFL-1\.1)/,/^(?:OFL-1\.0)/,/^(?:AFL-1\.1)/,/^(?:YPL-1\.1)/,/^(?:YPL-1\.0)/,/^(?:NPL-1\.0)/,/^(?:iMatix)/,/^(?:mpich2)/,/^(?:APAFML)/,/^(?:Bahyph)/,/^(?:RSA-MD)/,/^(?:psfrag)/,/^(?:Plexus)/,/^(?:eGenix)/,/^(?:Glulxe)/,/^(?:SAX-PD)/,/^(?:Imlib2)/,/^(?:Wsuipa)/,/^(?:LGPLLR)/,/^(?:Libpng)/,/^(?:xinetd)/,/^(?:MITNFA)/,/^(?:NetCDF)/,/^(?:Naumen)/,/^(?:SMPPL)/,/^(?:Nunit)/,/^(?:FSFUL)/,/^(?:GL2PS)/,/^(?:SMLNJ)/,/^(?:Rdisc)/,/^(?:Noweb)/,/^(?:Nokia)/,/^(?:SISSL)/,/^(?:Qhull)/,/^(?:Intel)/,/^(?:Glide)/,/^(?:Xerox)/,/^(?:AMPAS)/,/^(?:WTFPL)/,/^(?:MS-PL)/,/^(?:XSkat)/,/^(?:MS-RL)/,/^(?:MirOS)/,/^(?:RSCPL)/,/^(?:TMate)/,/^(?:OGTSL)/,/^(?:FSFAP)/,/^(?:NCSA)/,/^(?:Zlib)/,/^(?:SCEA)/,/^(?:SNIA)/,/^(?:NGPL)/,/^(?:NOSL)/,/^(?:ADSL)/,/^(?:MTLL)/,/^(?:NLPL)/,/^(?:Ruby)/,/^(?:JSON)/,/^(?:Barr)/,/^(?:0BSD)/,/^(?:Xnet)/,/^(?:Cube)/,/^(?:curl)/,/^(?:DSDP)/,/^(?:Fair)/,/^(?:HPND)/,/^(?:TOSL)/,/^(?:IJG)/,/^(?:SWL)/,/^(?:Vim)/,/^(?:FTL)/,/^(?:ICU)/,/^(?:OML)/,/^(?:NRL)/,/^(?:DOC)/,/^(?:TCL)/,/^(?:W3C)/,/^(?:NTP)/,/^(?:IPA)/,/^(?:ISC)/,/^(?:X11)/,/^(?:AAL)/,/^(?:AML)/,/^(?:xpp)/,/^(?:Zed)/,/^(?:MIT)/,/^(?:Mup)/], +conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364],"inclusive":true}} +}); +return lexer; +})(); +parser.lexer = lexer; +function Parser () { + this.yy = {}; +} +Parser.prototype = parser;parser.Parser = Parser; +return new Parser; +})(); + + +if (typeof require !== 'undefined' && typeof exports !== 'undefined') { +exports.parser = spdxparse; +exports.Parser = spdxparse.Parser; +exports.parse = function () { return spdxparse.parse.apply(spdxparse, arguments); }; +exports.main = function commonjsMain(args) { + if (!args[1]) { + console.log('Usage: '+args[0]+' FILE'); + process.exit(1); + } + var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); + return exports.parser.parse(source); +}; +if (typeof module !== 'undefined' && require.main === module) { + exports.main(process.argv.slice(1)); +} +} diff --git a/node_modules/spdx-license-ids/LICENSE b/node_modules/spdx-license-ids/LICENSE new file mode 100644 index 0000000..68a49da --- /dev/null +++ b/node_modules/spdx-license-ids/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/node_modules/spdx-license-ids/README.md b/node_modules/spdx-license-ids/README.md new file mode 100755 index 0000000..9252353 --- /dev/null +++ b/node_modules/spdx-license-ids/README.md @@ -0,0 +1,55 @@ +# spdx-license-ids + +A list of [SPDX license](https://spdx.org/licenses/) identifiers + +[**Download JSON**](https://raw.githubusercontent.com/shinnn/spdx-license-ids/master/spdx-license-ids.json) + +## Use as a JavaScript Library + +[![NPM version](https://img.shields.io/npm/v/spdx-license-ids.svg)](https://www.npmjs.org/package/spdx-license-ids) +[![Bower version](https://img.shields.io/bower/v/spdx-license-ids.svg)](https://github.com/shinnn/spdx-license-ids/releases) +[![Build Status](https://travis-ci.org/shinnn/spdx-license-ids.svg?branch=master)](https://travis-ci.org/shinnn/spdx-license-ids) +[![Coverage Status](https://img.shields.io/coveralls/shinnn/spdx-license-ids.svg)](https://coveralls.io/r/shinnn/spdx-license-ids) +[![devDependency Status](https://david-dm.org/shinnn/spdx-license-ids/dev-status.svg)](https://david-dm.org/shinnn/spdx-license-ids#info=devDependencies) + +### Installation + +#### Package managers + +##### [npm](https://www.npmjs.com/) + +```sh +npm install spdx-license-ids +``` + +##### [bower](http://bower.io/) + +```sh +bower install spdx-license-ids +``` + +##### [Duo](http://duojs.org/) + +```javascript +const spdxLicenseIds = require('shinnn/spdx-license-ids'); +``` + +#### Standalone + +[Download the script file directly.](https://raw.githubusercontent.com/shinnn/spdx-license-ids/master/spdx-license-ids-browser.js) + +### API + +#### spdxLicenseIds + +Type: `Array` of `String` + +It returns an array of SPDX license identifiers. + +```javascript +const spdxLicenseIds = require('spdx-license-ids'); //=> ['Glide', 'Abstyles', 'AFL-1.1', ... ] +``` + +## License + +[The Unlicense](./LICENSE). diff --git a/node_modules/spdx-license-ids/package.json b/node_modules/spdx-license-ids/package.json new file mode 100644 index 0000000..5c48f7f --- /dev/null +++ b/node_modules/spdx-license-ids/package.json @@ -0,0 +1,116 @@ +{ + "_args": [ + [ + { + "raw": "spdx-license-ids@^1.0.2", + "scope": null, + "escapedName": "spdx-license-ids", + "name": "spdx-license-ids", + "rawSpec": "^1.0.2", + "spec": ">=1.0.2 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/spdx-correct" + ] + ], + "_from": "spdx-license-ids@>=1.0.2 <2.0.0", + "_id": "spdx-license-ids@1.2.2", + "_inCache": true, + "_location": "/spdx-license-ids", + "_nodeVersion": "6.3.0", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/spdx-license-ids-1.2.2.tgz_1469529975605_0.35518706892617047" + }, + "_npmUser": { + "name": "shinnn", + "email": "snnskwtnb@gmail.com" + }, + "_npmVersion": "3.10.5", + "_phantomChildren": {}, + "_requested": { + "raw": "spdx-license-ids@^1.0.2", + "scope": null, + "escapedName": "spdx-license-ids", + "name": "spdx-license-ids", + "rawSpec": "^1.0.2", + "spec": ">=1.0.2 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/spdx-correct" + ], + "_resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "_shasum": "c9df7a3424594ade6bd11900d596696dc06bac57", + "_shrinkwrap": null, + "_spec": "spdx-license-ids@^1.0.2", + "_where": "/home/burchettm/statsbot/node_modules/spdx-correct", + "author": { + "name": "Shinnosuke Watanabe", + "url": "https://github.com/shinnn" + }, + "bugs": { + "url": "https://github.com/shinnn/spdx-license-ids/issues" + }, + "dependencies": {}, + "description": "A list of SPDX license identifiers", + "devDependencies": { + "@shinnn/eslint-config-node": "^3.0.0", + "chalk": "^1.1.3", + "eslint": "^3.1.1", + "get-spdx-license-ids": "^1.0.0", + "istanbul": "^0.4.4", + "loud-rejection": "^1.6.0", + "rimraf-promise": "^2.0.0", + "stringify-object": "^2.4.0", + "tap-spec": "^4.1.1", + "tape": "^4.6.0", + "write-file-atomically": "1.0.0" + }, + "directories": {}, + "dist": { + "shasum": "c9df7a3424594ade6bd11900d596696dc06bac57", + "tarball": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz" + }, + "files": [ + "spdx-license-ids.json" + ], + "gitHead": "70e2541bf04b4fbef4c5df52c581a1861fd355b2", + "homepage": "https://github.com/shinnn/spdx-license-ids#readme", + "keywords": [ + "spdx", + "license", + "licenses", + "id", + "identifier", + "identifiers", + "json", + "array", + "oss", + "browser", + "client-side" + ], + "license": "Unlicense", + "main": "spdx-license-ids.json", + "maintainers": [ + { + "name": "shinnn", + "email": "snnskwtnb@gmail.com" + } + ], + "name": "spdx-license-ids", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/shinnn/spdx-license-ids.git" + }, + "scripts": { + "build": "node --strong_mode build.js", + "coverage": "node --strong_mode node_modules/.bin/istanbul cover test.js", + "lint": "eslint --config @shinnn/node --env browser --ignore-path .gitignore .", + "pretest": "${npm_package_scripts_build} && ${npm_package_scripts_lint}", + "test": "node --strong_mode test.js | tap-spec" + }, + "version": "1.2.2" +} diff --git a/node_modules/spdx-license-ids/spdx-license-ids.json b/node_modules/spdx-license-ids/spdx-license-ids.json new file mode 100644 index 0000000..1c60d6e --- /dev/null +++ b/node_modules/spdx-license-ids/spdx-license-ids.json @@ -0,0 +1,334 @@ +[ + "Glide", + "Abstyles", + "AFL-1.1", + "AFL-1.2", + "AFL-2.0", + "AFL-2.1", + "AFL-3.0", + "AMPAS", + "APL-1.0", + "Adobe-Glyph", + "APAFML", + "Adobe-2006", + "AGPL-1.0", + "Afmparse", + "Aladdin", + "ADSL", + "AMDPLPA", + "ANTLR-PD", + "Apache-1.0", + "Apache-1.1", + "Apache-2.0", + "AML", + "APSL-1.0", + "APSL-1.1", + "APSL-1.2", + "APSL-2.0", + "Artistic-1.0", + "Artistic-1.0-Perl", + "Artistic-1.0-cl8", + "Artistic-2.0", + "AAL", + "Bahyph", + "Barr", + "Beerware", + "BitTorrent-1.0", + "BitTorrent-1.1", + "BSL-1.0", + "Borceux", + "BSD-2-Clause", + "BSD-2-Clause-FreeBSD", + "BSD-2-Clause-NetBSD", + "BSD-3-Clause", + "BSD-3-Clause-Clear", + "BSD-4-Clause", + "BSD-Protection", + "BSD-Source-Code", + "BSD-3-Clause-Attribution", + "0BSD", + "BSD-4-Clause-UC", + "bzip2-1.0.5", + "bzip2-1.0.6", + "Caldera", + "CECILL-1.0", + "CECILL-1.1", + "CECILL-2.0", + "CECILL-2.1", + "CECILL-B", + "CECILL-C", + "ClArtistic", + "MIT-CMU", + "CNRI-Jython", + "CNRI-Python", + "CNRI-Python-GPL-Compatible", + "CPOL-1.02", + "CDDL-1.0", + "CDDL-1.1", + "CPAL-1.0", + "CPL-1.0", + "CATOSL-1.1", + "Condor-1.1", + "CC-BY-1.0", + "CC-BY-2.0", + "CC-BY-2.5", + "CC-BY-3.0", + "CC-BY-4.0", + "CC-BY-ND-1.0", + "CC-BY-ND-2.0", + "CC-BY-ND-2.5", + "CC-BY-ND-3.0", + "CC-BY-ND-4.0", + "CC-BY-NC-1.0", + "CC-BY-NC-2.0", + "CC-BY-NC-2.5", + "CC-BY-NC-3.0", + "CC-BY-NC-4.0", + "CC-BY-NC-ND-1.0", + "CC-BY-NC-ND-2.0", + "CC-BY-NC-ND-2.5", + "CC-BY-NC-ND-3.0", + "CC-BY-NC-ND-4.0", + "CC-BY-NC-SA-1.0", + "CC-BY-NC-SA-2.0", + "CC-BY-NC-SA-2.5", + "CC-BY-NC-SA-3.0", + "CC-BY-NC-SA-4.0", + "CC-BY-SA-1.0", + "CC-BY-SA-2.0", + "CC-BY-SA-2.5", + "CC-BY-SA-3.0", + "CC-BY-SA-4.0", + "CC0-1.0", + "Crossword", + "CrystalStacker", + "CUA-OPL-1.0", + "Cube", + "curl", + "D-FSL-1.0", + "diffmark", + "WTFPL", + "DOC", + "Dotseqn", + "DSDP", + "dvipdfm", + "EPL-1.0", + "ECL-1.0", + "ECL-2.0", + "eGenix", + "EFL-1.0", + "EFL-2.0", + "MIT-advertising", + "MIT-enna", + "Entessa", + "ErlPL-1.1", + "EUDatagrid", + "EUPL-1.0", + "EUPL-1.1", + "Eurosym", + "Fair", + "MIT-feh", + "Frameworx-1.0", + "FreeImage", + "FTL", + "FSFAP", + "FSFUL", + "FSFULLR", + "Giftware", + "GL2PS", + "Glulxe", + "AGPL-3.0", + "GFDL-1.1", + "GFDL-1.2", + "GFDL-1.3", + "GPL-1.0", + "GPL-2.0", + "GPL-3.0", + "LGPL-2.1", + "LGPL-3.0", + "LGPL-2.0", + "gnuplot", + "gSOAP-1.3b", + "HaskellReport", + "HPND", + "IBM-pibs", + "IPL-1.0", + "ICU", + "ImageMagick", + "iMatix", + "Imlib2", + "IJG", + "Info-ZIP", + "Intel-ACPI", + "Intel", + "Interbase-1.0", + "IPA", + "ISC", + "JasPer-2.0", + "JSON", + "LPPL-1.0", + "LPPL-1.1", + "LPPL-1.2", + "LPPL-1.3a", + "LPPL-1.3c", + "Latex2e", + "BSD-3-Clause-LBNL", + "Leptonica", + "LGPLLR", + "Libpng", + "libtiff", + "LAL-1.2", + "LAL-1.3", + "LiLiQ-P-1.1", + "LiLiQ-Rplus-1.1", + "LiLiQ-R-1.1", + "LPL-1.02", + "LPL-1.0", + "MakeIndex", + "MTLL", + "MS-PL", + "MS-RL", + "MirOS", + "MITNFA", + "MIT", + "Motosoto", + "MPL-1.0", + "MPL-1.1", + "MPL-2.0", + "MPL-2.0-no-copyleft-exception", + "mpich2", + "Multics", + "Mup", + "NASA-1.3", + "Naumen", + "NBPL-1.0", + "NetCDF", + "NGPL", + "NOSL", + "NPL-1.0", + "NPL-1.1", + "Newsletr", + "NLPL", + "Nokia", + "NPOSL-3.0", + "NLOD-1.0", + "Noweb", + "NRL", + "NTP", + "Nunit", + "OCLC-2.0", + "ODbL-1.0", + "PDDL-1.0", + "OCCT-PL", + "OGTSL", + "OLDAP-2.2.2", + "OLDAP-1.1", + "OLDAP-1.2", + "OLDAP-1.3", + "OLDAP-1.4", + "OLDAP-2.0", + "OLDAP-2.0.1", + "OLDAP-2.1", + "OLDAP-2.2", + "OLDAP-2.2.1", + "OLDAP-2.3", + "OLDAP-2.4", + "OLDAP-2.5", + "OLDAP-2.6", + "OLDAP-2.7", + "OLDAP-2.8", + "OML", + "OPL-1.0", + "OSL-1.0", + "OSL-1.1", + "OSL-2.0", + "OSL-2.1", + "OSL-3.0", + "OpenSSL", + "OSET-PL-2.1", + "PHP-3.0", + "PHP-3.01", + "Plexus", + "PostgreSQL", + "psfrag", + "psutils", + "Python-2.0", + "QPL-1.0", + "Qhull", + "Rdisc", + "RPSL-1.0", + "RPL-1.1", + "RPL-1.5", + "RHeCos-1.1", + "RSCPL", + "RSA-MD", + "Ruby", + "SAX-PD", + "Saxpath", + "SCEA", + "SWL", + "SMPPL", + "Sendmail", + "SGI-B-1.0", + "SGI-B-1.1", + "SGI-B-2.0", + "OFL-1.0", + "OFL-1.1", + "SimPL-2.0", + "Sleepycat", + "SNIA", + "Spencer-86", + "Spencer-94", + "Spencer-99", + "SMLNJ", + "SugarCRM-1.1.3", + "SISSL", + "SISSL-1.2", + "SPL-1.0", + "Watcom-1.0", + "TCL", + "Unlicense", + "TMate", + "TORQUE-1.1", + "TOSL", + "Unicode-TOU", + "UPL-1.0", + "NCSA", + "Vim", + "VOSTROM", + "VSL-1.0", + "W3C-19980720", + "W3C", + "Wsuipa", + "Xnet", + "X11", + "Xerox", + "XFree86-1.1", + "xinetd", + "xpp", + "XSkat", + "YPL-1.0", + "YPL-1.1", + "Zed", + "Zend-2.0", + "Zimbra-1.3", + "Zimbra-1.4", + "Zlib", + "zlib-acknowledgement", + "ZPL-1.1", + "ZPL-2.0", + "ZPL-2.1", + "BSD-3-Clause-No-Nuclear-License", + "BSD-3-Clause-No-Nuclear-Warranty", + "BSD-3-Clause-No-Nuclear-License-2014", + "eCos-2.0", + "GPL-2.0-with-autoconf-exception", + "GPL-2.0-with-bison-exception", + "GPL-2.0-with-classpath-exception", + "GPL-2.0-with-font-exception", + "GPL-2.0-with-GCC-exception", + "GPL-3.0-with-autoconf-exception", + "GPL-3.0-with-GCC-exception", + "StandardML-NJ", + "WXwindows" +] diff --git a/node_modules/streamroller/.jshintrc b/node_modules/streamroller/.jshintrc new file mode 100644 index 0000000..1d60c63 --- /dev/null +++ b/node_modules/streamroller/.jshintrc @@ -0,0 +1,17 @@ +{ + "node": true, + "laxcomma": true, + "indent": 2, + "globalstrict": true, + "maxparams": 6, + "maxdepth": 3, + "maxstatements": 20, + "maxcomplexity": 10, + "maxlen": 100, + "globals": { + "describe": true, + "it": true, + "before": true, + "after": true + } +} diff --git a/node_modules/streamroller/.npmignore b/node_modules/streamroller/.npmignore new file mode 100644 index 0000000..a72b52e --- /dev/null +++ b/node_modules/streamroller/.npmignore @@ -0,0 +1,15 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +npm-debug.log +node_modules diff --git a/node_modules/streamroller/.travis.yml b/node_modules/streamroller/.travis.yml new file mode 100644 index 0000000..c886a6e --- /dev/null +++ b/node_modules/streamroller/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +sudo: false +node_js: + - "6" + - "5" + - "4" + - "0.12" diff --git a/node_modules/streamroller/LICENSE b/node_modules/streamroller/LICENSE new file mode 100644 index 0000000..f03266b --- /dev/null +++ b/node_modules/streamroller/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Gareth Jones + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/streamroller/README.md b/node_modules/streamroller/README.md new file mode 100644 index 0000000..a3cef05 --- /dev/null +++ b/node_modules/streamroller/README.md @@ -0,0 +1,54 @@ +streamroller +============ + +node.js file streams that roll over when they reach a maximum size, or a date/time. + + npm install streamroller + +## usage + + var rollers = require('streamroller'); + var stream = new rollers.RollingFileStream('myfile', 1024, 3); + stream.write("stuff"); + stream.end(); + +The streams behave the same as standard node.js streams, except that when certain conditions are met they will rename the current file to a backup and start writing to a new file. + +### new RollingFileStream(filename [, maxSize, numBackups, options]) +* `filename` (String) +* `maxSize` - the size in bytes to trigger a rollover, if not provided this defaults to MAX_SAFE_INTEGER and the stream will not roll. +* `numBackups` - the number of old files to keep +* `options` - Object + * `encoding` - defaults to 'utf8' + * `mode` - defaults to 0644 + * `flags` - defaults to 'a' + * `compress` - (boolean) defaults to `false` - compress the backup files using gzip (files will have `.gz` extension). + +This returns a `WritableStream`. When the current file being written to (given by `filename`) gets up to or larger than `maxSize`, then the current file will be renamed to `filename.1` and a new file will start being written to. Up to `numBackups` of old files are maintained, so if `numBackups` is 3 then there will be 4 files: +
+     filename
+     filename.1
+     filename.2
+     filename.3
+
+When filename size >= maxSize then: +
+     filename -> filename.1
+     filename.1 -> filename.2
+     filename.2 -> filename.3
+     filename.3 gets overwritten
+     filename is a new file
+
+ +### new DateRollingFileStream(filename, pattern, options) +* `filename` (String) +* `pattern` (String) - the date pattern to trigger rolling (see below) +* `options` - Object + * `encoding` - defaults to 'utf8' + * `mode` defaults to 0644 + * `flags` defaults to 'a' + * `compress` - (boolean) compress the backup files, defaults to false + * `alwaysIncludePattern` - (boolean) extend the initial file with the pattern, defaults to false + + +This returns a `WritableStream`. When the current time, formatted as `pattern`, changes then the current file will be renamed to `filename.formattedDate` where `formattedDate` is the result of processing the date through the pattern, and a new file will begin to be written. Streamroller uses [date-format](http://github.com/nomiddlename/date-format) to format dates, and the `pattern` should use the date-format format. e.g. with a `pattern` of `"yyyy-MM-dd"`, and assuming today is August 29, 2013 then writing to the stream today will just write to `filename`. At midnight, `filename` will be renamed to `filename.2013-08-29` and a new `filename` will be created. If `options.alwaysIncludePattern` is true, then the initial file will be `filename.2013-08-29` and no renaming will occur at midnight, but a new file will be written to with the name `filename.2013-08-30`. diff --git a/node_modules/streamroller/lib/BaseRollingFileStream.js b/node_modules/streamroller/lib/BaseRollingFileStream.js new file mode 100644 index 0000000..5666c4f --- /dev/null +++ b/node_modules/streamroller/lib/BaseRollingFileStream.js @@ -0,0 +1,118 @@ +"use strict"; +var fs = require('fs') +, zlib = require('zlib') +, debug = require('debug')('streamroller:BaseRollingFileStream') +, mkdirp = require('mkdirp') +, path = require('path') +, util = require('util') +, stream = require('readable-stream'); + +module.exports = BaseRollingFileStream; + +function BaseRollingFileStream(filename, options) { + debug("In BaseRollingFileStream"); + this.filename = filename; + this.options = options || {}; + this.options.encoding = this.options.encoding || 'utf8'; + this.options.mode = this.options.mode || parseInt('0644', 8); + this.options.flags = this.options.flags || 'a'; + + this.currentSize = 0; + + function currentFileSize(file) { + var fileSize = 0; + try { + fileSize = fs.statSync(file).size; + } catch (e) { + // file does not exist + } + return fileSize; + } + + function throwErrorIfArgumentsAreNotValid() { + if (!filename) { + throw new Error("You must specify a filename"); + } + } + + throwErrorIfArgumentsAreNotValid(); + debug("Calling BaseRollingFileStream.super"); + BaseRollingFileStream.super_.call(this); + this.openTheStream(); + this.currentSize = currentFileSize(this.filename); +} +util.inherits(BaseRollingFileStream, stream.Writable); + +BaseRollingFileStream.prototype._write = function(chunk, encoding, callback) { + var that = this; + function writeTheChunk() { + debug("writing the chunk to the underlying stream"); + that.currentSize += chunk.length; + try { + that.theStream.write(chunk, encoding, callback); + } + catch (err){ + debug(err); + callback(); + } + } + + debug("in _write"); + + if (this.shouldRoll()) { + this.currentSize = 0; + this.roll(this.filename, writeTheChunk); + } else { + writeTheChunk(); + } +}; + +BaseRollingFileStream.prototype.openTheStream = function(cb) { + debug("opening the underlying stream"); + var that = this; + mkdirp.sync(path.dirname(this.filename)); + this.theStream = fs.createWriteStream(this.filename, this.options); + this.theStream.on('error', function(err) { + that.emit('error', err); + }); + if (cb) { + this.theStream.on("open", cb); + } +}; + +BaseRollingFileStream.prototype.closeTheStream = function(cb) { + debug("closing the underlying stream"); + this.theStream.end(cb); +}; + +BaseRollingFileStream.prototype.compress = function(filename, cb) { + debug('Compressing ', filename, ' -> ', filename, '.gz'); + var gzip = zlib.createGzip(); + var inp = fs.createReadStream(filename); + var out = fs.createWriteStream(filename+".gz"); + inp.pipe(gzip).pipe(out); + + out.on('finish', function(err) { + debug('Removing original ', filename); + fs.unlink(filename, cb); + }); +}; + +BaseRollingFileStream.prototype.shouldRoll = function() { + return false; // default behaviour is never to roll +}; + +BaseRollingFileStream.prototype.roll = function(filename, callback) { + callback(); // default behaviour is not to do anything +}; + +BaseRollingFileStream.prototype.end = function(chunk, encoding, callback) { + var self = this; + this.theStream.end(chunk, encoding, function(err) { + stream.Writable.prototype.end.call(self, function() { + if (callback) { + callback(err); + } + }); + }); +}; diff --git a/node_modules/streamroller/lib/DateRollingFileStream.js b/node_modules/streamroller/lib/DateRollingFileStream.js new file mode 100644 index 0000000..fb3314b --- /dev/null +++ b/node_modules/streamroller/lib/DateRollingFileStream.js @@ -0,0 +1,136 @@ +"use strict"; +var BaseRollingFileStream = require('./BaseRollingFileStream') + , debug = require('debug')('streamroller:DateRollingFileStream') + , format = require('date-format') + , fs = require('fs') + , path = require('path') + , util = require('util'); + +module.exports = DateRollingFileStream; + +function findTimestampFromFileIfExists(filename, now) { + return fs.existsSync(filename) ? fs.statSync(filename).mtime : new Date(now()); +} + +function DateRollingFileStream(filename, pattern, options, now) { + debug("Now is ", now); + if (pattern && typeof(pattern) === 'object') { + now = options; + options = pattern; + pattern = null; + } + this.pattern = pattern || '.yyyy-MM-dd'; + this.now = now || Date.now; + this.lastTimeWeWroteSomething = format.asString( + this.pattern, + findTimestampFromFileIfExists(filename, this.now) + ); + + this.baseFilename = filename; + this.alwaysIncludePattern = false; + + if (options) { + if (options.alwaysIncludePattern) { + this.alwaysIncludePattern = true; + filename = this.baseFilename + this.lastTimeWeWroteSomething; + } + delete options.alwaysIncludePattern; + if (Object.keys(options).length === 0) { + options = null; + } + } + debug("this.now is ", this.now, ", now is ", now); + + DateRollingFileStream.super_.call(this, filename, options); +} +util.inherits(DateRollingFileStream, BaseRollingFileStream); + +DateRollingFileStream.prototype.shouldRoll = function () { + var lastTime = this.lastTimeWeWroteSomething, + thisTime = format.asString(this.pattern, new Date(this.now())); + + debug("DateRollingFileStream.shouldRoll with now = ", + this.now(), ", thisTime = ", thisTime, ", lastTime = ", lastTime); + + this.lastTimeWeWroteSomething = thisTime; + this.previousTime = lastTime; + + return thisTime !== lastTime; +}; + +DateRollingFileStream.prototype.roll = function (filename, callback) { + var that = this; + + debug("Starting roll"); + + if (this.alwaysIncludePattern) { + this.filename = this.baseFilename + this.lastTimeWeWroteSomething; + this.closeTheStream( + this.compressIfNeeded.bind(this, filename, + this.removeOldFilesIfNeeded.bind(this, + this.openTheStream.bind(this, callback)))); + } else { + var newFilename = this.baseFilename + this.previousTime; + this.closeTheStream( + deleteAnyExistingFile.bind(null, + renameTheCurrentFile.bind(null, + this.compressIfNeeded.bind(this, newFilename, + this.removeOldFilesIfNeeded.bind(this, + this.openTheStream.bind(this, callback)))))); + } + + function deleteAnyExistingFile(cb) { + //on windows, you can get a EEXIST error if you rename a file to an existing file + //so, we'll try to delete the file we're renaming to first + fs.unlink(newFilename, function (err) { + + //ignore err: if we could not delete, it's most likely that it doesn't exist + cb(); + }); + } + + function renameTheCurrentFile(cb) { + debug("Renaming the ", filename, " -> ", newFilename); + fs.rename(filename, newFilename, cb); + } +}; + +DateRollingFileStream.prototype.compressIfNeeded = function (filename, cb) { + debug("Checking if we need to compress the old file"); + if (this.options.compress) { + this.compress(filename, cb); + } else { + cb(); + } +}; + +DateRollingFileStream.prototype.removeOldFilesIfNeeded = function (cb) { + debug("Checking if we need to delete old files"); + if (this.options.daysToKeep && this.options.daysToKeep > 0) { + var oldestDate = new Date(this.now() - (this.options.daysToKeep * (24 * 60 * 60 * 1000))); + debug("Will delete any log files modified before ", oldestDate.toString()); + + this.removeFilesOlderThan(oldestDate); + } + cb(); +}; + +DateRollingFileStream.prototype.removeFilesOlderThan = function (oldestDate) { + + // Loop through any log files and delete any whose mtime is earlier than oldestDate + var dirToScan = path.dirname(this.baseFilename); + var fileToMatch = path.basename(this.baseFilename); + var filesToCheck = fs.readdirSync(dirToScan).filter(function (file) { + return file.indexOf(fileToMatch) > -1; + }); + for (var i = 0; i < filesToCheck.length; i++) { + var fileToCheck = path.join(dirToScan, filesToCheck[i]); + var fileStats = fs.statSync(fileToCheck); + if (fileStats.mtime < oldestDate) { + debug("Deleting old log ", filesToCheck); + fs.unlinkSync(fileToCheck); + } + } +}; + + diff --git a/node_modules/streamroller/lib/RollingFileStream.js b/node_modules/streamroller/lib/RollingFileStream.js new file mode 100644 index 0000000..94211d1 --- /dev/null +++ b/node_modules/streamroller/lib/RollingFileStream.js @@ -0,0 +1,110 @@ +"use strict"; +var BaseRollingFileStream = require('./BaseRollingFileStream') +, debug = require('debug')('streamroller:RollingFileStream') +, util = require('util') +, path = require('path') +, child_process = require('child_process') +, fs = require('fs'); + +module.exports = RollingFileStream; + +function RollingFileStream (filename, size, backups, options) { + //if you don't specify a size, this will behave like a normal file stream + this.size = size || Number.MAX_SAFE_INTEGER; + this.backups = backups || 1; + + function throwErrorIfArgumentsAreNotValid() { + if (!filename || size <= 0) { + throw new Error("You must specify a filename and file size"); + } + } + + throwErrorIfArgumentsAreNotValid(); + + RollingFileStream.super_.call(this, filename, options); +} +util.inherits(RollingFileStream, BaseRollingFileStream); + +RollingFileStream.prototype.shouldRoll = function() { + debug("should roll with current size " + this.currentSize + " and max size " + this.size); + return this.currentSize >= this.size; +}; + +RollingFileStream.prototype.roll = function(filename, callback) { + var that = this, + nameMatcher = new RegExp('^' + path.basename(filename)); + + function justTheseFiles (item) { + return nameMatcher.test(item); + } + + function index(filename_) { + debug('Calculating index of '+filename_); + return parseInt(filename_.substring((path.basename(filename) + '.').length), 10) || 0; + } + + function byIndex(a, b) { + if (index(a) > index(b)) { + return 1; + } else if (index(a) < index(b) ) { + return -1; + } else { + return 0; + } + } + + function increaseFileIndex (fileToRename, cb) { + var idx = index(fileToRename); + debug('Index of ' + fileToRename + ' is ' + idx); + if (idx < that.backups) { + + var ext = path.extname(fileToRename); + var destination = filename + '.' + (idx+1); + if (that.options.compress && /^gz$/.test(ext.substring(1))) { + destination+=ext; + } + //on windows, you can get a EEXIST error if you rename a file to an existing file + //so, we'll try to delete the file we're renaming to first + fs.unlink(destination, function (err) { + //ignore err: if we could not delete, it's most likely that it doesn't exist + debug('Renaming ' + fileToRename + ' -> ' + destination); + fs.rename(path.join(path.dirname(filename), fileToRename), destination, function(err) { + if (err) { + cb(err); + } else { + if (that.options.compress && ext!=".gz") { + that.compress(destination, cb); + } else { + cb(); + } + } + }); + }); + } else { + cb(); + } + } + + function renameTheFiles(cb) { + //roll the backups (rename file.n to file.n+1, where n <= numBackups) + debug("Renaming the old files"); + fs.readdir(path.dirname(filename), function (err, files) { + if (err) { + return cb(err); + } + var filesToProcess = files.filter(justTheseFiles).sort(byIndex); + (function processOne(err) { + var file = filesToProcess.pop(); + if (!file || err) { return cb(err); } + increaseFileIndex(file, processOne); + })(); + }); + } + + debug("Rolling, rolling, rolling"); + this.closeTheStream( + renameTheFiles.bind(null, + this.openTheStream.bind(this, + callback))); + +}; diff --git a/node_modules/streamroller/lib/index.js b/node_modules/streamroller/lib/index.js new file mode 100644 index 0000000..d8e026d --- /dev/null +++ b/node_modules/streamroller/lib/index.js @@ -0,0 +1,3 @@ +"use strict"; +exports.RollingFileStream = require('./RollingFileStream'); +exports.DateRollingFileStream = require('./DateRollingFileStream'); diff --git a/node_modules/streamroller/node_modules/readable-stream/.npmignore b/node_modules/streamroller/node_modules/readable-stream/.npmignore new file mode 100644 index 0000000..38344f8 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/.npmignore @@ -0,0 +1,5 @@ +build/ +test/ +examples/ +fs.js +zlib.js \ No newline at end of file diff --git a/node_modules/streamroller/node_modules/readable-stream/LICENSE b/node_modules/streamroller/node_modules/readable-stream/LICENSE new file mode 100644 index 0000000..e3d4e69 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/LICENSE @@ -0,0 +1,18 @@ +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/node_modules/streamroller/node_modules/readable-stream/README.md b/node_modules/streamroller/node_modules/readable-stream/README.md new file mode 100644 index 0000000..e46b823 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/README.md @@ -0,0 +1,15 @@ +# readable-stream + +***Node-core streams for userland*** + +[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) +[![NPM](https://nodei.co/npm-dl/readable-stream.png&months=6&height=3)](https://nodei.co/npm/readable-stream/) + +This package is a mirror of the Streams2 and Streams3 implementations in Node-core. + +If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core. + +**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12. + +**readable-stream** uses proper patch-level versioning so if you pin to `"~1.0.0"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `"~1.1.0"` + diff --git a/node_modules/streamroller/node_modules/readable-stream/duplex.js b/node_modules/streamroller/node_modules/readable-stream/duplex.js new file mode 100644 index 0000000..ca807af --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/duplex.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/streamroller/node_modules/readable-stream/float.patch b/node_modules/streamroller/node_modules/readable-stream/float.patch new file mode 100644 index 0000000..b984607 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/float.patch @@ -0,0 +1,923 @@ +diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js +index c5a741c..a2e0d8e 100644 +--- a/lib/_stream_duplex.js ++++ b/lib/_stream_duplex.js +@@ -26,8 +26,8 @@ + + module.exports = Duplex; + var util = require('util'); +-var Readable = require('_stream_readable'); +-var Writable = require('_stream_writable'); ++var Readable = require('./_stream_readable'); ++var Writable = require('./_stream_writable'); + + util.inherits(Duplex, Readable); + +diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js +index a5e9864..330c247 100644 +--- a/lib/_stream_passthrough.js ++++ b/lib/_stream_passthrough.js +@@ -25,7 +25,7 @@ + + module.exports = PassThrough; + +-var Transform = require('_stream_transform'); ++var Transform = require('./_stream_transform'); + var util = require('util'); + util.inherits(PassThrough, Transform); + +diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js +index 0c3fe3e..90a8298 100644 +--- a/lib/_stream_readable.js ++++ b/lib/_stream_readable.js +@@ -23,10 +23,34 @@ module.exports = Readable; + Readable.ReadableState = ReadableState; + + var EE = require('events').EventEmitter; ++if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { ++ return emitter.listeners(type).length; ++}; ++ ++if (!global.setImmediate) global.setImmediate = function setImmediate(fn) { ++ return setTimeout(fn, 0); ++}; ++if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) { ++ return clearTimeout(i); ++}; ++ + var Stream = require('stream'); + var util = require('util'); ++if (!util.isUndefined) { ++ var utilIs = require('core-util-is'); ++ for (var f in utilIs) { ++ util[f] = utilIs[f]; ++ } ++} + var StringDecoder; +-var debug = util.debuglog('stream'); ++var debug; ++if (util.debuglog) ++ debug = util.debuglog('stream'); ++else try { ++ debug = require('debuglog')('stream'); ++} catch (er) { ++ debug = function() {}; ++} + + util.inherits(Readable, Stream); + +@@ -380,7 +404,7 @@ function chunkInvalid(state, chunk) { + + + function onEofChunk(stream, state) { +- if (state.decoder && !state.ended) { ++ if (state.decoder && !state.ended && state.decoder.end) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); +diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js +index b1f9fcc..b0caf57 100644 +--- a/lib/_stream_transform.js ++++ b/lib/_stream_transform.js +@@ -64,8 +64,14 @@ + + module.exports = Transform; + +-var Duplex = require('_stream_duplex'); ++var Duplex = require('./_stream_duplex'); + var util = require('util'); ++if (!util.isUndefined) { ++ var utilIs = require('core-util-is'); ++ for (var f in utilIs) { ++ util[f] = utilIs[f]; ++ } ++} + util.inherits(Transform, Duplex); + + +diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js +index ba2e920..f49288b 100644 +--- a/lib/_stream_writable.js ++++ b/lib/_stream_writable.js +@@ -27,6 +27,12 @@ module.exports = Writable; + Writable.WritableState = WritableState; + + var util = require('util'); ++if (!util.isUndefined) { ++ var utilIs = require('core-util-is'); ++ for (var f in utilIs) { ++ util[f] = utilIs[f]; ++ } ++} + var Stream = require('stream'); + + util.inherits(Writable, Stream); +@@ -119,7 +125,7 @@ function WritableState(options, stream) { + function Writable(options) { + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. +- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) ++ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex'))) + return new Writable(options); + + this._writableState = new WritableState(options, this); +diff --git a/test/simple/test-stream-big-push.js b/test/simple/test-stream-big-push.js +index e3787e4..8cd2127 100644 +--- a/test/simple/test-stream-big-push.js ++++ b/test/simple/test-stream-big-push.js +@@ -21,7 +21,7 @@ + + var common = require('../common'); + var assert = require('assert'); +-var stream = require('stream'); ++var stream = require('../../'); + var str = 'asdfasdfasdfasdfasdf'; + + var r = new stream.Readable({ +diff --git a/test/simple/test-stream-end-paused.js b/test/simple/test-stream-end-paused.js +index bb73777..d40efc7 100644 +--- a/test/simple/test-stream-end-paused.js ++++ b/test/simple/test-stream-end-paused.js +@@ -25,7 +25,7 @@ var gotEnd = false; + + // Make sure we don't miss the end event for paused 0-length streams + +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + var stream = new Readable(); + var calledRead = false; + stream._read = function() { +diff --git a/test/simple/test-stream-pipe-after-end.js b/test/simple/test-stream-pipe-after-end.js +index b46ee90..0be8366 100644 +--- a/test/simple/test-stream-pipe-after-end.js ++++ b/test/simple/test-stream-pipe-after-end.js +@@ -22,8 +22,8 @@ + var common = require('../common'); + var assert = require('assert'); + +-var Readable = require('_stream_readable'); +-var Writable = require('_stream_writable'); ++var Readable = require('../../lib/_stream_readable'); ++var Writable = require('../../lib/_stream_writable'); + var util = require('util'); + + util.inherits(TestReadable, Readable); +diff --git a/test/simple/test-stream-pipe-cleanup.js b/test/simple/test-stream-pipe-cleanup.js +deleted file mode 100644 +index f689358..0000000 +--- a/test/simple/test-stream-pipe-cleanup.js ++++ /dev/null +@@ -1,122 +0,0 @@ +-// Copyright Joyent, Inc. and other Node contributors. +-// +-// Permission is hereby granted, free of charge, to any person obtaining a +-// copy of this software and associated documentation files (the +-// "Software"), to deal in the Software without restriction, including +-// without limitation the rights to use, copy, modify, merge, publish, +-// distribute, sublicense, and/or sell copies of the Software, and to permit +-// persons to whom the Software is furnished to do so, subject to the +-// following conditions: +-// +-// The above copyright notice and this permission notice shall be included +-// in all copies or substantial portions of the Software. +-// +-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +-// USE OR OTHER DEALINGS IN THE SOFTWARE. +- +-// This test asserts that Stream.prototype.pipe does not leave listeners +-// hanging on the source or dest. +- +-var common = require('../common'); +-var stream = require('stream'); +-var assert = require('assert'); +-var util = require('util'); +- +-function Writable() { +- this.writable = true; +- this.endCalls = 0; +- stream.Stream.call(this); +-} +-util.inherits(Writable, stream.Stream); +-Writable.prototype.end = function() { +- this.endCalls++; +-}; +- +-Writable.prototype.destroy = function() { +- this.endCalls++; +-}; +- +-function Readable() { +- this.readable = true; +- stream.Stream.call(this); +-} +-util.inherits(Readable, stream.Stream); +- +-function Duplex() { +- this.readable = true; +- Writable.call(this); +-} +-util.inherits(Duplex, Writable); +- +-var i = 0; +-var limit = 100; +- +-var w = new Writable(); +- +-var r; +- +-for (i = 0; i < limit; i++) { +- r = new Readable(); +- r.pipe(w); +- r.emit('end'); +-} +-assert.equal(0, r.listeners('end').length); +-assert.equal(limit, w.endCalls); +- +-w.endCalls = 0; +- +-for (i = 0; i < limit; i++) { +- r = new Readable(); +- r.pipe(w); +- r.emit('close'); +-} +-assert.equal(0, r.listeners('close').length); +-assert.equal(limit, w.endCalls); +- +-w.endCalls = 0; +- +-r = new Readable(); +- +-for (i = 0; i < limit; i++) { +- w = new Writable(); +- r.pipe(w); +- w.emit('close'); +-} +-assert.equal(0, w.listeners('close').length); +- +-r = new Readable(); +-w = new Writable(); +-var d = new Duplex(); +-r.pipe(d); // pipeline A +-d.pipe(w); // pipeline B +-assert.equal(r.listeners('end').length, 2); // A.onend, A.cleanup +-assert.equal(r.listeners('close').length, 2); // A.onclose, A.cleanup +-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup +-assert.equal(d.listeners('close').length, 3); // A.cleanup, B.onclose, B.cleanup +-assert.equal(w.listeners('end').length, 0); +-assert.equal(w.listeners('close').length, 1); // B.cleanup +- +-r.emit('end'); +-assert.equal(d.endCalls, 1); +-assert.equal(w.endCalls, 0); +-assert.equal(r.listeners('end').length, 0); +-assert.equal(r.listeners('close').length, 0); +-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup +-assert.equal(d.listeners('close').length, 2); // B.onclose, B.cleanup +-assert.equal(w.listeners('end').length, 0); +-assert.equal(w.listeners('close').length, 1); // B.cleanup +- +-d.emit('end'); +-assert.equal(d.endCalls, 1); +-assert.equal(w.endCalls, 1); +-assert.equal(r.listeners('end').length, 0); +-assert.equal(r.listeners('close').length, 0); +-assert.equal(d.listeners('end').length, 0); +-assert.equal(d.listeners('close').length, 0); +-assert.equal(w.listeners('end').length, 0); +-assert.equal(w.listeners('close').length, 0); +diff --git a/test/simple/test-stream-pipe-error-handling.js b/test/simple/test-stream-pipe-error-handling.js +index c5d724b..c7d6b7d 100644 +--- a/test/simple/test-stream-pipe-error-handling.js ++++ b/test/simple/test-stream-pipe-error-handling.js +@@ -21,7 +21,7 @@ + + var common = require('../common'); + var assert = require('assert'); +-var Stream = require('stream').Stream; ++var Stream = require('../../').Stream; + + (function testErrorListenerCatches() { + var source = new Stream(); +diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js +index cb9d5fe..56f8d61 100644 +--- a/test/simple/test-stream-pipe-event.js ++++ b/test/simple/test-stream-pipe-event.js +@@ -20,7 +20,7 @@ + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + var common = require('../common'); +-var stream = require('stream'); ++var stream = require('../../'); + var assert = require('assert'); + var util = require('util'); + +diff --git a/test/simple/test-stream-push-order.js b/test/simple/test-stream-push-order.js +index f2e6ec2..a5c9bf9 100644 +--- a/test/simple/test-stream-push-order.js ++++ b/test/simple/test-stream-push-order.js +@@ -20,7 +20,7 @@ + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + var common = require('../common.js'); +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + var assert = require('assert'); + + var s = new Readable({ +diff --git a/test/simple/test-stream-push-strings.js b/test/simple/test-stream-push-strings.js +index 06f43dc..1701a9a 100644 +--- a/test/simple/test-stream-push-strings.js ++++ b/test/simple/test-stream-push-strings.js +@@ -22,7 +22,7 @@ + var common = require('../common'); + var assert = require('assert'); + +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + var util = require('util'); + + util.inherits(MyStream, Readable); +diff --git a/test/simple/test-stream-readable-event.js b/test/simple/test-stream-readable-event.js +index ba6a577..a8e6f7b 100644 +--- a/test/simple/test-stream-readable-event.js ++++ b/test/simple/test-stream-readable-event.js +@@ -22,7 +22,7 @@ + var common = require('../common'); + var assert = require('assert'); + +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + + (function first() { + // First test, not reading when the readable is added. +diff --git a/test/simple/test-stream-readable-flow-recursion.js b/test/simple/test-stream-readable-flow-recursion.js +index 2891ad6..11689ba 100644 +--- a/test/simple/test-stream-readable-flow-recursion.js ++++ b/test/simple/test-stream-readable-flow-recursion.js +@@ -27,7 +27,7 @@ var assert = require('assert'); + // more data continuously, but without triggering a nextTick + // warning or RangeError. + +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + + // throw an error if we trigger a nextTick warning. + process.throwDeprecation = true; +diff --git a/test/simple/test-stream-unshift-empty-chunk.js b/test/simple/test-stream-unshift-empty-chunk.js +index 0c96476..7827538 100644 +--- a/test/simple/test-stream-unshift-empty-chunk.js ++++ b/test/simple/test-stream-unshift-empty-chunk.js +@@ -24,7 +24,7 @@ var assert = require('assert'); + + // This test verifies that stream.unshift(Buffer(0)) or + // stream.unshift('') does not set state.reading=false. +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + + var r = new Readable(); + var nChunks = 10; +diff --git a/test/simple/test-stream-unshift-read-race.js b/test/simple/test-stream-unshift-read-race.js +index 83fd9fa..17c18aa 100644 +--- a/test/simple/test-stream-unshift-read-race.js ++++ b/test/simple/test-stream-unshift-read-race.js +@@ -29,7 +29,7 @@ var assert = require('assert'); + // 3. push() after the EOF signaling null is an error. + // 4. _read() is not called after pushing the EOF null chunk. + +-var stream = require('stream'); ++var stream = require('../../'); + var hwm = 10; + var r = stream.Readable({ highWaterMark: hwm }); + var chunks = 10; +@@ -51,7 +51,14 @@ r._read = function(n) { + + function push(fast) { + assert(!pushedNull, 'push() after null push'); +- var c = pos >= data.length ? null : data.slice(pos, pos + n); ++ var c; ++ if (pos >= data.length) ++ c = null; ++ else { ++ if (n + pos > data.length) ++ n = data.length - pos; ++ c = data.slice(pos, pos + n); ++ } + pushedNull = c === null; + if (fast) { + pos += n; +diff --git a/test/simple/test-stream-writev.js b/test/simple/test-stream-writev.js +index 5b49e6e..b5321f3 100644 +--- a/test/simple/test-stream-writev.js ++++ b/test/simple/test-stream-writev.js +@@ -22,7 +22,7 @@ + var common = require('../common'); + var assert = require('assert'); + +-var stream = require('stream'); ++var stream = require('../../'); + + var queue = []; + for (var decode = 0; decode < 2; decode++) { +diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js +index 3814bf0..248c1be 100644 +--- a/test/simple/test-stream2-basic.js ++++ b/test/simple/test-stream2-basic.js +@@ -21,7 +21,7 @@ + + + var common = require('../common.js'); +-var R = require('_stream_readable'); ++var R = require('../../lib/_stream_readable'); + var assert = require('assert'); + + var util = require('util'); +diff --git a/test/simple/test-stream2-compatibility.js b/test/simple/test-stream2-compatibility.js +index 6cdd4e9..f0fa84b 100644 +--- a/test/simple/test-stream2-compatibility.js ++++ b/test/simple/test-stream2-compatibility.js +@@ -21,7 +21,7 @@ + + + var common = require('../common.js'); +-var R = require('_stream_readable'); ++var R = require('../../lib/_stream_readable'); + var assert = require('assert'); + + var util = require('util'); +diff --git a/test/simple/test-stream2-finish-pipe.js b/test/simple/test-stream2-finish-pipe.js +index 39b274f..006a19b 100644 +--- a/test/simple/test-stream2-finish-pipe.js ++++ b/test/simple/test-stream2-finish-pipe.js +@@ -20,7 +20,7 @@ + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + var common = require('../common.js'); +-var stream = require('stream'); ++var stream = require('../../'); + var Buffer = require('buffer').Buffer; + + var r = new stream.Readable(); +diff --git a/test/simple/test-stream2-fs.js b/test/simple/test-stream2-fs.js +deleted file mode 100644 +index e162406..0000000 +--- a/test/simple/test-stream2-fs.js ++++ /dev/null +@@ -1,72 +0,0 @@ +-// Copyright Joyent, Inc. and other Node contributors. +-// +-// Permission is hereby granted, free of charge, to any person obtaining a +-// copy of this software and associated documentation files (the +-// "Software"), to deal in the Software without restriction, including +-// without limitation the rights to use, copy, modify, merge, publish, +-// distribute, sublicense, and/or sell copies of the Software, and to permit +-// persons to whom the Software is furnished to do so, subject to the +-// following conditions: +-// +-// The above copyright notice and this permission notice shall be included +-// in all copies or substantial portions of the Software. +-// +-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +-// USE OR OTHER DEALINGS IN THE SOFTWARE. +- +- +-var common = require('../common.js'); +-var R = require('_stream_readable'); +-var assert = require('assert'); +- +-var fs = require('fs'); +-var FSReadable = fs.ReadStream; +- +-var path = require('path'); +-var file = path.resolve(common.fixturesDir, 'x1024.txt'); +- +-var size = fs.statSync(file).size; +- +-var expectLengths = [1024]; +- +-var util = require('util'); +-var Stream = require('stream'); +- +-util.inherits(TestWriter, Stream); +- +-function TestWriter() { +- Stream.apply(this); +- this.buffer = []; +- this.length = 0; +-} +- +-TestWriter.prototype.write = function(c) { +- this.buffer.push(c.toString()); +- this.length += c.length; +- return true; +-}; +- +-TestWriter.prototype.end = function(c) { +- if (c) this.buffer.push(c.toString()); +- this.emit('results', this.buffer); +-} +- +-var r = new FSReadable(file); +-var w = new TestWriter(); +- +-w.on('results', function(res) { +- console.error(res, w.length); +- assert.equal(w.length, size); +- var l = 0; +- assert.deepEqual(res.map(function (c) { +- return c.length; +- }), expectLengths); +- console.log('ok'); +-}); +- +-r.pipe(w); +diff --git a/test/simple/test-stream2-httpclient-response-end.js b/test/simple/test-stream2-httpclient-response-end.js +deleted file mode 100644 +index 15cffc2..0000000 +--- a/test/simple/test-stream2-httpclient-response-end.js ++++ /dev/null +@@ -1,52 +0,0 @@ +-// Copyright Joyent, Inc. and other Node contributors. +-// +-// Permission is hereby granted, free of charge, to any person obtaining a +-// copy of this software and associated documentation files (the +-// "Software"), to deal in the Software without restriction, including +-// without limitation the rights to use, copy, modify, merge, publish, +-// distribute, sublicense, and/or sell copies of the Software, and to permit +-// persons to whom the Software is furnished to do so, subject to the +-// following conditions: +-// +-// The above copyright notice and this permission notice shall be included +-// in all copies or substantial portions of the Software. +-// +-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +-// USE OR OTHER DEALINGS IN THE SOFTWARE. +- +-var common = require('../common.js'); +-var assert = require('assert'); +-var http = require('http'); +-var msg = 'Hello'; +-var readable_event = false; +-var end_event = false; +-var server = http.createServer(function(req, res) { +- res.writeHead(200, {'Content-Type': 'text/plain'}); +- res.end(msg); +-}).listen(common.PORT, function() { +- http.get({port: common.PORT}, function(res) { +- var data = ''; +- res.on('readable', function() { +- console.log('readable event'); +- readable_event = true; +- data += res.read(); +- }); +- res.on('end', function() { +- console.log('end event'); +- end_event = true; +- assert.strictEqual(msg, data); +- server.close(); +- }); +- }); +-}); +- +-process.on('exit', function() { +- assert(readable_event); +- assert(end_event); +-}); +- +diff --git a/test/simple/test-stream2-large-read-stall.js b/test/simple/test-stream2-large-read-stall.js +index 2fbfbca..667985b 100644 +--- a/test/simple/test-stream2-large-read-stall.js ++++ b/test/simple/test-stream2-large-read-stall.js +@@ -30,7 +30,7 @@ var PUSHSIZE = 20; + var PUSHCOUNT = 1000; + var HWM = 50; + +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + var r = new Readable({ + highWaterMark: HWM + }); +@@ -39,23 +39,23 @@ var rs = r._readableState; + r._read = push; + + r.on('readable', function() { +- console.error('>> readable'); ++ //console.error('>> readable'); + do { +- console.error(' > read(%d)', READSIZE); ++ //console.error(' > read(%d)', READSIZE); + var ret = r.read(READSIZE); +- console.error(' < %j (%d remain)', ret && ret.length, rs.length); ++ //console.error(' < %j (%d remain)', ret && ret.length, rs.length); + } while (ret && ret.length === READSIZE); + +- console.error('<< after read()', +- ret && ret.length, +- rs.needReadable, +- rs.length); ++ //console.error('<< after read()', ++ // ret && ret.length, ++ // rs.needReadable, ++ // rs.length); + }); + + var endEmitted = false; + r.on('end', function() { + endEmitted = true; +- console.error('end'); ++ //console.error('end'); + }); + + var pushes = 0; +@@ -64,11 +64,11 @@ function push() { + return; + + if (pushes++ === PUSHCOUNT) { +- console.error(' push(EOF)'); ++ //console.error(' push(EOF)'); + return r.push(null); + } + +- console.error(' push #%d', pushes); ++ //console.error(' push #%d', pushes); + if (r.push(new Buffer(PUSHSIZE))) + setTimeout(push); + } +diff --git a/test/simple/test-stream2-objects.js b/test/simple/test-stream2-objects.js +index 3e6931d..ff47d89 100644 +--- a/test/simple/test-stream2-objects.js ++++ b/test/simple/test-stream2-objects.js +@@ -21,8 +21,8 @@ + + + var common = require('../common.js'); +-var Readable = require('_stream_readable'); +-var Writable = require('_stream_writable'); ++var Readable = require('../../lib/_stream_readable'); ++var Writable = require('../../lib/_stream_writable'); + var assert = require('assert'); + + // tiny node-tap lookalike. +diff --git a/test/simple/test-stream2-pipe-error-handling.js b/test/simple/test-stream2-pipe-error-handling.js +index cf7531c..e3f3e4e 100644 +--- a/test/simple/test-stream2-pipe-error-handling.js ++++ b/test/simple/test-stream2-pipe-error-handling.js +@@ -21,7 +21,7 @@ + + var common = require('../common'); + var assert = require('assert'); +-var stream = require('stream'); ++var stream = require('../../'); + + (function testErrorListenerCatches() { + var count = 1000; +diff --git a/test/simple/test-stream2-pipe-error-once-listener.js b/test/simple/test-stream2-pipe-error-once-listener.js +index 5e8e3cb..53b2616 100755 +--- a/test/simple/test-stream2-pipe-error-once-listener.js ++++ b/test/simple/test-stream2-pipe-error-once-listener.js +@@ -24,7 +24,7 @@ var common = require('../common.js'); + var assert = require('assert'); + + var util = require('util'); +-var stream = require('stream'); ++var stream = require('../../'); + + + var Read = function() { +diff --git a/test/simple/test-stream2-push.js b/test/simple/test-stream2-push.js +index b63edc3..eb2b0e9 100644 +--- a/test/simple/test-stream2-push.js ++++ b/test/simple/test-stream2-push.js +@@ -20,7 +20,7 @@ + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + var common = require('../common.js'); +-var stream = require('stream'); ++var stream = require('../../'); + var Readable = stream.Readable; + var Writable = stream.Writable; + var assert = require('assert'); +diff --git a/test/simple/test-stream2-read-sync-stack.js b/test/simple/test-stream2-read-sync-stack.js +index e8a7305..9740a47 100644 +--- a/test/simple/test-stream2-read-sync-stack.js ++++ b/test/simple/test-stream2-read-sync-stack.js +@@ -21,7 +21,7 @@ + + var common = require('../common'); + var assert = require('assert'); +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + var r = new Readable(); + var N = 256 * 1024; + +diff --git a/test/simple/test-stream2-readable-empty-buffer-no-eof.js b/test/simple/test-stream2-readable-empty-buffer-no-eof.js +index cd30178..4b1659d 100644 +--- a/test/simple/test-stream2-readable-empty-buffer-no-eof.js ++++ b/test/simple/test-stream2-readable-empty-buffer-no-eof.js +@@ -22,10 +22,9 @@ + var common = require('../common'); + var assert = require('assert'); + +-var Readable = require('stream').Readable; ++var Readable = require('../../').Readable; + + test1(); +-test2(); + + function test1() { + var r = new Readable(); +@@ -88,31 +87,3 @@ function test1() { + console.log('ok'); + }); + } +- +-function test2() { +- var r = new Readable({ encoding: 'base64' }); +- var reads = 5; +- r._read = function(n) { +- if (!reads--) +- return r.push(null); // EOF +- else +- return r.push(new Buffer('x')); +- }; +- +- var results = []; +- function flow() { +- var chunk; +- while (null !== (chunk = r.read())) +- results.push(chunk + ''); +- } +- r.on('readable', flow); +- r.on('end', function() { +- results.push('EOF'); +- }); +- flow(); +- +- process.on('exit', function() { +- assert.deepEqual(results, [ 'eHh4', 'eHg=', 'EOF' ]); +- console.log('ok'); +- }); +-} +diff --git a/test/simple/test-stream2-readable-from-list.js b/test/simple/test-stream2-readable-from-list.js +index 7c96ffe..04a96f5 100644 +--- a/test/simple/test-stream2-readable-from-list.js ++++ b/test/simple/test-stream2-readable-from-list.js +@@ -21,7 +21,7 @@ + + var assert = require('assert'); + var common = require('../common.js'); +-var fromList = require('_stream_readable')._fromList; ++var fromList = require('../../lib/_stream_readable')._fromList; + + // tiny node-tap lookalike. + var tests = []; +diff --git a/test/simple/test-stream2-readable-legacy-drain.js b/test/simple/test-stream2-readable-legacy-drain.js +index 675da8e..51fd3d5 100644 +--- a/test/simple/test-stream2-readable-legacy-drain.js ++++ b/test/simple/test-stream2-readable-legacy-drain.js +@@ -22,7 +22,7 @@ + var common = require('../common'); + var assert = require('assert'); + +-var Stream = require('stream'); ++var Stream = require('../../'); + var Readable = Stream.Readable; + + var r = new Readable(); +diff --git a/test/simple/test-stream2-readable-non-empty-end.js b/test/simple/test-stream2-readable-non-empty-end.js +index 7314ae7..c971898 100644 +--- a/test/simple/test-stream2-readable-non-empty-end.js ++++ b/test/simple/test-stream2-readable-non-empty-end.js +@@ -21,7 +21,7 @@ + + var assert = require('assert'); + var common = require('../common.js'); +-var Readable = require('_stream_readable'); ++var Readable = require('../../lib/_stream_readable'); + + var len = 0; + var chunks = new Array(10); +diff --git a/test/simple/test-stream2-readable-wrap-empty.js b/test/simple/test-stream2-readable-wrap-empty.js +index 2e5cf25..fd8a3dc 100644 +--- a/test/simple/test-stream2-readable-wrap-empty.js ++++ b/test/simple/test-stream2-readable-wrap-empty.js +@@ -22,7 +22,7 @@ + var common = require('../common'); + var assert = require('assert'); + +-var Readable = require('_stream_readable'); ++var Readable = require('../../lib/_stream_readable'); + var EE = require('events').EventEmitter; + + var oldStream = new EE(); +diff --git a/test/simple/test-stream2-readable-wrap.js b/test/simple/test-stream2-readable-wrap.js +index 90eea01..6b177f7 100644 +--- a/test/simple/test-stream2-readable-wrap.js ++++ b/test/simple/test-stream2-readable-wrap.js +@@ -22,8 +22,8 @@ + var common = require('../common'); + var assert = require('assert'); + +-var Readable = require('_stream_readable'); +-var Writable = require('_stream_writable'); ++var Readable = require('../../lib/_stream_readable'); ++var Writable = require('../../lib/_stream_writable'); + var EE = require('events').EventEmitter; + + var testRuns = 0, completedRuns = 0; +diff --git a/test/simple/test-stream2-set-encoding.js b/test/simple/test-stream2-set-encoding.js +index 5d2c32a..685531b 100644 +--- a/test/simple/test-stream2-set-encoding.js ++++ b/test/simple/test-stream2-set-encoding.js +@@ -22,7 +22,7 @@ + + var common = require('../common.js'); + var assert = require('assert'); +-var R = require('_stream_readable'); ++var R = require('../../lib/_stream_readable'); + var util = require('util'); + + // tiny node-tap lookalike. +diff --git a/test/simple/test-stream2-transform.js b/test/simple/test-stream2-transform.js +index 9c9ddd8..a0cacc6 100644 +--- a/test/simple/test-stream2-transform.js ++++ b/test/simple/test-stream2-transform.js +@@ -21,8 +21,8 @@ + + var assert = require('assert'); + var common = require('../common.js'); +-var PassThrough = require('_stream_passthrough'); +-var Transform = require('_stream_transform'); ++var PassThrough = require('../../').PassThrough; ++var Transform = require('../../').Transform; + + // tiny node-tap lookalike. + var tests = []; +diff --git a/test/simple/test-stream2-unpipe-drain.js b/test/simple/test-stream2-unpipe-drain.js +index d66dc3c..365b327 100644 +--- a/test/simple/test-stream2-unpipe-drain.js ++++ b/test/simple/test-stream2-unpipe-drain.js +@@ -22,7 +22,7 @@ + + var common = require('../common.js'); + var assert = require('assert'); +-var stream = require('stream'); ++var stream = require('../../'); + var crypto = require('crypto'); + + var util = require('util'); +diff --git a/test/simple/test-stream2-unpipe-leak.js b/test/simple/test-stream2-unpipe-leak.js +index 99f8746..17c92ae 100644 +--- a/test/simple/test-stream2-unpipe-leak.js ++++ b/test/simple/test-stream2-unpipe-leak.js +@@ -22,7 +22,7 @@ + + var common = require('../common.js'); + var assert = require('assert'); +-var stream = require('stream'); ++var stream = require('../../'); + + var chunk = new Buffer('hallo'); + +diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js +index 704100c..209c3a6 100644 +--- a/test/simple/test-stream2-writable.js ++++ b/test/simple/test-stream2-writable.js +@@ -20,8 +20,8 @@ + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + var common = require('../common.js'); +-var W = require('_stream_writable'); +-var D = require('_stream_duplex'); ++var W = require('../../').Writable; ++var D = require('../../').Duplex; + var assert = require('assert'); + + var util = require('util'); +diff --git a/test/simple/test-stream3-pause-then-read.js b/test/simple/test-stream3-pause-then-read.js +index b91bde3..2f72c15 100644 +--- a/test/simple/test-stream3-pause-then-read.js ++++ b/test/simple/test-stream3-pause-then-read.js +@@ -22,7 +22,7 @@ + var common = require('../common'); + var assert = require('assert'); + +-var stream = require('stream'); ++var stream = require('../../'); + var Readable = stream.Readable; + var Writable = stream.Writable; + diff --git a/node_modules/streamroller/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_duplex.js new file mode 100644 index 0000000..b513d61 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_duplex.js @@ -0,0 +1,89 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +module.exports = Duplex; + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +} +/**/ + + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +forEach(objectKeys(Writable.prototype), function(method) { + if (!Duplex.prototype[method]) + Duplex.prototype[method] = Writable.prototype[method]; +}); + +function Duplex(options) { + if (!(this instanceof Duplex)) + return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) + this.readable = false; + + if (options && options.writable === false) + this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) + this.allowHalfOpen = false; + + this.once('end', onend); +} + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) + return; + + // no more data can be written. + // But allow more writes to happen in this tick. + process.nextTick(this.end.bind(this)); +} + +function forEach (xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} diff --git a/node_modules/streamroller/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_passthrough.js new file mode 100644 index 0000000..895ca50 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_passthrough.js @@ -0,0 +1,46 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) + return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function(chunk, encoding, cb) { + cb(null, chunk); +}; diff --git a/node_modules/streamroller/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 0000000..19ab358 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,951 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + + +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Readable.ReadableState = ReadableState; + +var EE = require('events').EventEmitter; + +/**/ +if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +var Stream = require('stream'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var StringDecoder; + + +/**/ +var debug = require('util'); +if (debug && debug.debuglog) { + debug = debug.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + + +util.inherits(Readable, Stream); + +function ReadableState(options, stream) { + var Duplex = require('./_stream_duplex'); + + options = options || {}; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var defaultHwm = options.objectMode ? 16 : 16 * 1024; + this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + this.buffer = []; + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) + this.objectMode = this.objectMode || !!options.readableObjectMode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + var Duplex = require('./_stream_duplex'); + + if (!(this instanceof Readable)) + return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + Stream.call(this); +} + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function(chunk, encoding) { + var state = this._readableState; + + if (util.isString(chunk) && !state.objectMode) { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = new Buffer(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function(chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); +}; + +function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (util.isNullOrUndefined(chunk)) { + state.reading = false; + if (!state.ended) + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var e = new Error('stream.unshift() after end event'); + stream.emit('error', e); + } else { + if (state.decoder && !addToFront && !encoding) + chunk = state.decoder.write(chunk); + + if (!addToFront) + state.reading = false; + + // if we want the data now, just emit it. + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) + state.buffer.unshift(chunk); + else + state.buffer.push(chunk); + + if (state.needReadable) + emitReadable(stream); + } + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); +} + + + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && + (state.needReadable || + state.length < state.highWaterMark || + state.length === 0); +} + +// backwards compatibility. +Readable.prototype.setEncoding = function(enc) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 128MB +var MAX_HWM = 0x800000; +function roundUpToNextPowerOf2(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 + n--; + for (var p = 1; p < 32; p <<= 1) n |= n >> p; + n++; + } + return n; +} + +function howMuchToRead(n, state) { + if (state.length === 0 && state.ended) + return 0; + + if (state.objectMode) + return n === 0 ? 0 : 1; + + if (isNaN(n) || util.isNull(n)) { + // only flow one buffer at a time + if (state.flowing && state.buffer.length) + return state.buffer[0].length; + else + return state.length; + } + + if (n <= 0) + return 0; + + // If we're asking for more than the target buffer level, + // then raise the water mark. Bump up to the next highest + // power of 2, to prevent increasing it excessively in tiny + // amounts. + if (n > state.highWaterMark) + state.highWaterMark = roundUpToNextPowerOf2(n); + + // don't have that much. return null, unless we've ended. + if (n > state.length) { + if (!state.ended) { + state.needReadable = true; + return 0; + } else + return state.length; + } + + return n; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function(n) { + debug('read', n); + var state = this._readableState; + var nOrig = n; + + if (!util.isNumber(n) || n > 0) + state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && + state.needReadable && + (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) + endReadable(this); + else + emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) + endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } + + if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) + state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + } + + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (doRead && !state.reading) + n = howMuchToRead(nOrig, state); + + var ret; + if (n > 0) + ret = fromList(n, state); + else + ret = null; + + if (util.isNull(ret)) { + state.needReadable = true; + n = 0; + } + + state.length -= n; + + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (state.length === 0 && !state.ended) + state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended && state.length === 0) + endReadable(this); + + if (!util.isNull(ret)) + this.emit('data', ret); + + return ret; +}; + +function chunkInvalid(state, chunk) { + var er = null; + if (!util.isBuffer(chunk) && + !util.isString(chunk) && + !util.isNullOrUndefined(chunk) && + !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + + +function onEofChunk(stream, state) { + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) + process.nextTick(function() { + emitReadable_(stream); + }); + else + emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(function() { + maybeReadMore_(stream, state); + }); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && + state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break; + else + len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function(n) { + this.emit('error', new Error('not implemented')); +}; + +Readable.prototype.pipe = function(dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && + dest !== process.stdout && + dest !== process.stderr; + + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) + process.nextTick(endFn); + else + src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + debug('onunpipe'); + if (readable === src) { + cleanup(); + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + src.removeListener('data', ondata); + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && + (!dest._writableState || dest._writableState.needDrain)) + ondrain(); + } + + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + if (false === ret) { + debug('false write response, pause', + src._readableState.awaitDrain); + src._readableState.awaitDrain++; + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EE.listenerCount(dest, 'error') === 0) + dest.emit('error', er); + } + // This is a brutally ugly hack to make sure that our error handler + // is attached before any userland ones. NEVER DO THIS. + if (!dest._events || !dest._events.error) + dest.on('error', onerror); + else if (isArray(dest._events.error)) + dest._events.error.unshift(onerror); + else + dest._events.error = [onerror, dest._events.error]; + + + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function() { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) + state.awaitDrain--; + if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + + +Readable.prototype.unpipe = function(dest) { + var state = this._readableState; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) + return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) + return this; + + if (!dest) + dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) + dest.emit('unpipe', this); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) + dests[i].emit('unpipe', this); + return this; + } + + // try to find the right one. + var i = indexOf(state.pipes, dest); + if (i === -1) + return this; + + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) + state.pipes = state.pipes[0]; + + dest.emit('unpipe', this); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function(ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + // If listening to data, and it has not explicitly been paused, + // then call resume to start the flow of data on the next tick. + if (ev === 'data' && false !== this._readableState.flowing) { + this.resume(); + } + + if (ev === 'readable' && this.readable) { + var state = this._readableState; + if (!state.readableListening) { + state.readableListening = true; + state.emittedReadable = false; + state.needReadable = true; + if (!state.reading) { + var self = this; + process.nextTick(function() { + debug('readable nexttick read 0'); + self.read(0); + }); + } else if (state.length) { + emitReadable(this, state); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function() { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + if (!state.reading) { + debug('resume read 0'); + this.read(0); + } + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process.nextTick(function() { + resume_(stream, state); + }); + } +} + +function resume_(stream, state) { + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) + stream.read(0); +} + +Readable.prototype.pause = function() { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + if (state.flowing) { + do { + var chunk = stream.read(); + } while (null !== chunk && state.flowing); + } +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function(stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function() { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) + self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function(chunk) { + debug('wrapped data'); + if (state.decoder) + chunk = state.decoder.write(chunk); + if (!chunk || !state.objectMode && !chunk.length) + return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (util.isFunction(stream[i]) && util.isUndefined(this[i])) { + this[i] = function(method) { return function() { + return stream[method].apply(stream, arguments); + }}(i); + } + } + + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function(ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function(n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; +}; + + + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +function fromList(n, state) { + var list = state.buffer; + var length = state.length; + var stringMode = !!state.decoder; + var objectMode = !!state.objectMode; + var ret; + + // nothing in the list, definitely empty. + if (list.length === 0) + return null; + + if (length === 0) + ret = null; + else if (objectMode) + ret = list.shift(); + else if (!n || n >= length) { + // read it all, truncate the array. + if (stringMode) + ret = list.join(''); + else + ret = Buffer.concat(list, length); + list.length = 0; + } else { + // read just some of it. + if (n < list[0].length) { + // just take a part of the first list item. + // slice is the same for buffers and strings. + var buf = list[0]; + ret = buf.slice(0, n); + list[0] = buf.slice(n); + } else if (n === list[0].length) { + // first list is a perfect match + ret = list.shift(); + } else { + // complex case. + // we have enough to cover it, but it spans past the first buffer. + if (stringMode) + ret = ''; + else + ret = new Buffer(n); + + var c = 0; + for (var i = 0, l = list.length; i < l && c < n; i++) { + var buf = list[0]; + var cpy = Math.min(n - c, buf.length); + + if (stringMode) + ret += buf.slice(0, cpy); + else + buf.copy(ret, c, 0, cpy); + + if (cpy < buf.length) + list[0] = buf.slice(cpy); + else + list.shift(); + + c += cpy; + } + } + } + + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) + throw new Error('endReadable called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + process.nextTick(function() { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } + }); + } +} + +function forEach (xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} + +function indexOf (xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} diff --git a/node_modules/streamroller/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 0000000..905c5e4 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,209 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + + +function TransformState(options, stream) { + this.afterTransform = function(er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; +} + +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) + return stream.emit('error', new Error('no writecb in Transform class')); + + ts.writechunk = null; + ts.writecb = null; + + if (!util.isNullOrUndefined(data)) + stream.push(data); + + if (cb) + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } +} + + +function Transform(options) { + if (!(this instanceof Transform)) + return new Transform(options); + + Duplex.call(this, options); + + this._transformState = new TransformState(options, this); + + // when the writable side finishes, then flush out anything remaining. + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + this.once('prefinish', function() { + if (util.isFunction(this._flush)) + this._flush(function(er) { + done(stream, er); + }); + else + done(stream); + }); +} + +Transform.prototype.push = function(chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function(chunk, encoding, cb) { + throw new Error('not implemented'); +}; + +Transform.prototype._write = function(chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || + rs.needReadable || + rs.length < rs.highWaterMark) + this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function(n) { + var ts = this._transformState; + + if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + + +function done(stream, er) { + if (er) + return stream.emit('error', er); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var ts = stream._transformState; + + if (ws.length) + throw new Error('calling transform done when ws.length != 0'); + + if (ts.transforming) + throw new Error('calling transform done when still transforming'); + + return stream.push(null); +} diff --git a/node_modules/streamroller/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 0000000..db8539c --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,477 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, cb), and it'll handle all +// the drain event emission and buffering. + +module.exports = Writable; + +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Writable.WritableState = WritableState; + + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Stream = require('stream'); + +util.inherits(Writable, Stream); + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; +} + +function WritableState(options, stream) { + var Duplex = require('./_stream_duplex'); + + options = options || {}; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var defaultHwm = options.objectMode ? 16 : 16 * 1024; + this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) + this.objectMode = this.objectMode || !!options.writableObjectMode; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function(er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.buffer = []; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; +} + +function Writable(options) { + var Duplex = require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) + return new Writable(options); + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function() { + this.emit('error', new Error('Cannot pipe. Not readable.')); +}; + + +function writeAfterEnd(stream, state, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); +} + +// If we get something that is not a buffer, string, null, or undefined, +// and we're not in objectMode, then that's an error. +// Otherwise stream chunks are all considered to be of length=1, and the +// watermarks determine how many objects to keep in the buffer, rather than +// how many bytes or characters. +function validChunk(stream, state, chunk, cb) { + var valid = true; + if (!util.isBuffer(chunk) && + !util.isString(chunk) && + !util.isNullOrUndefined(chunk) && + !state.objectMode) { + var er = new TypeError('Invalid non-string/buffer chunk'); + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); + valid = false; + } + return valid; +} + +Writable.prototype.write = function(chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + if (util.isFunction(encoding)) { + cb = encoding; + encoding = null; + } + + if (util.isBuffer(chunk)) + encoding = 'buffer'; + else if (!encoding) + encoding = state.defaultEncoding; + + if (!util.isFunction(cb)) + cb = function() {}; + + if (state.ended) + writeAfterEnd(this, state, cb); + else if (validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function() { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function() { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && + !state.corked && + !state.finished && + !state.bufferProcessing && + state.buffer.length) + clearBuffer(this, state); + } +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && + state.decodeStrings !== false && + util.isString(chunk)) { + chunk = new Buffer(chunk, encoding); + } + return chunk; +} + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + if (util.isBuffer(chunk)) + encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) + state.needDrain = true; + + if (state.writing || state.corked) + state.buffer.push(new WriteReq(chunk, encoding, cb)); + else + doWrite(stream, state, false, len, chunk, encoding, cb); + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) + stream._writev(chunk, state.onwrite); + else + stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + if (sync) + process.nextTick(function() { + state.pendingcb--; + cb(er); + }); + else { + state.pendingcb--; + cb(er); + } + + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) + onwriteError(stream, state, sync, er, cb); + else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(stream, state); + + if (!finished && + !state.corked && + !state.bufferProcessing && + state.buffer.length) { + clearBuffer(stream, state); + } + + if (sync) { + process.nextTick(function() { + afterWrite(stream, state, finished, cb); + }); + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) + onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + + if (stream._writev && state.buffer.length > 1) { + // Fast case, write everything using _writev() + var cbs = []; + for (var c = 0; c < state.buffer.length; c++) + cbs.push(state.buffer[c].callback); + + // count the one we are adding, as well. + // TODO(isaacs) clean this up + state.pendingcb++; + doWrite(stream, state, true, state.length, state.buffer, '', function(err) { + for (var i = 0; i < cbs.length; i++) { + state.pendingcb--; + cbs[i](err); + } + }); + + // Clear buffer + state.buffer = []; + } else { + // Slow case, write chunks one-by-one + for (var c = 0; c < state.buffer.length; c++) { + var entry = state.buffer[c]; + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + c++; + break; + } + } + + if (c < state.buffer.length) + state.buffer = state.buffer.slice(c); + else + state.buffer.length = 0; + } + + state.bufferProcessing = false; +} + +Writable.prototype._write = function(chunk, encoding, cb) { + cb(new Error('not implemented')); + +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function(chunk, encoding, cb) { + var state = this._writableState; + + if (util.isFunction(chunk)) { + cb = chunk; + chunk = null; + encoding = null; + } else if (util.isFunction(encoding)) { + cb = encoding; + encoding = null; + } + + if (!util.isNullOrUndefined(chunk)) + this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) + endWritable(this, state, cb); +}; + + +function needFinish(stream, state) { + return (state.ending && + state.length === 0 && + !state.finished && + !state.writing); +} + +function prefinish(stream, state) { + if (!state.prefinished) { + state.prefinished = true; + stream.emit('prefinish'); + } +} + +function finishMaybe(stream, state) { + var need = needFinish(stream, state); + if (need) { + if (state.pendingcb === 0) { + prefinish(stream, state); + state.finished = true; + stream.emit('finish'); + } else + prefinish(stream, state); + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) + process.nextTick(cb); + else + stream.once('finish', cb); + } + state.ended = true; +} diff --git a/node_modules/streamroller/node_modules/readable-stream/package.json b/node_modules/streamroller/node_modules/readable-stream/package.json new file mode 100644 index 0000000..77a56f5 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/package.json @@ -0,0 +1,112 @@ +{ + "_args": [ + [ + { + "raw": "readable-stream@^1.1.7", + "scope": null, + "escapedName": "readable-stream", + "name": "readable-stream", + "rawSpec": "^1.1.7", + "spec": ">=1.1.7 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/streamroller" + ] + ], + "_from": "readable-stream@>=1.1.7 <2.0.0", + "_id": "readable-stream@1.1.14", + "_inCache": true, + "_location": "/streamroller/readable-stream", + "_nodeVersion": "5.10.1", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/readable-stream-1.1.14.tgz_1460563293219_0.5682175166439265" + }, + "_npmUser": { + "name": "cwmma", + "email": "calvin.metcalf@gmail.com" + }, + "_npmVersion": "3.8.3", + "_phantomChildren": {}, + "_requested": { + "raw": "readable-stream@^1.1.7", + "scope": null, + "escapedName": "readable-stream", + "name": "readable-stream", + "rawSpec": "^1.1.7", + "spec": ">=1.1.7 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/streamroller" + ], + "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "_shasum": "7cf4c54ef648e3813084c636dd2079e166c081d9", + "_shrinkwrap": null, + "_spec": "readable-stream@^1.1.7", + "_where": "/home/burchettm/statsbot/node_modules/streamroller", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "browser": { + "util": false + }, + "bugs": { + "url": "https://github.com/isaacs/readable-stream/issues" + }, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + }, + "description": "Streams3, a user-land copy of the stream library from Node.js v0.11.x", + "devDependencies": { + "tap": "~0.2.6" + }, + "directories": {}, + "dist": { + "shasum": "7cf4c54ef648e3813084c636dd2079e166c081d9", + "tarball": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + }, + "gitHead": "52550840cb1d6e8a98ef9a909a4bea360bc6f7da", + "homepage": "https://github.com/isaacs/readable-stream#readme", + "keywords": [ + "readable", + "stream", + "pipe" + ], + "license": "MIT", + "main": "readable.js", + "maintainers": [ + { + "name": "isaacs", + "email": "isaacs@npmjs.com" + }, + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + { + "name": "rvagg", + "email": "rod@vagg.org" + }, + { + "name": "cwmma", + "email": "calvin.metcalf@gmail.com" + } + ], + "name": "readable-stream", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/readable-stream.git" + }, + "scripts": { + "test": "tap test/simple/*.js" + }, + "version": "1.1.14" +} diff --git a/node_modules/streamroller/node_modules/readable-stream/passthrough.js b/node_modules/streamroller/node_modules/readable-stream/passthrough.js new file mode 100644 index 0000000..27e8d8a --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/passthrough.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/streamroller/node_modules/readable-stream/readable.js b/node_modules/streamroller/node_modules/readable-stream/readable.js new file mode 100644 index 0000000..2a8b5c6 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/readable.js @@ -0,0 +1,10 @@ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = require('stream'); +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); +if (!process.browser && process.env.READABLE_STREAM === 'disable') { + module.exports = require('stream'); +} diff --git a/node_modules/streamroller/node_modules/readable-stream/transform.js b/node_modules/streamroller/node_modules/readable-stream/transform.js new file mode 100644 index 0000000..5d482f0 --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/transform.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/streamroller/node_modules/readable-stream/writable.js b/node_modules/streamroller/node_modules/readable-stream/writable.js new file mode 100644 index 0000000..e1e9efd --- /dev/null +++ b/node_modules/streamroller/node_modules/readable-stream/writable.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/streamroller/package.json b/node_modules/streamroller/package.json new file mode 100644 index 0000000..2987443 --- /dev/null +++ b/node_modules/streamroller/package.json @@ -0,0 +1,110 @@ +{ + "_args": [ + [ + { + "raw": "streamroller@^0.4.0", + "scope": null, + "escapedName": "streamroller", + "name": "streamroller", + "rawSpec": "^0.4.0", + "spec": ">=0.4.0 <0.5.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/log4js" + ] + ], + "_from": "streamroller@>=0.4.0 <0.5.0", + "_id": "streamroller@0.4.0", + "_inCache": true, + "_location": "/streamroller", + "_nodeVersion": "6.9.4", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/streamroller-0.4.0.tgz_1488230366735_0.8600998979527503" + }, + "_npmUser": { + "name": "csausdev", + "email": "gareth.nomiddlename@gmail.com" + }, + "_npmVersion": "3.10.10", + "_phantomChildren": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + }, + "_requested": { + "raw": "streamroller@^0.4.0", + "scope": null, + "escapedName": "streamroller", + "name": "streamroller", + "rawSpec": "^0.4.0", + "spec": ">=0.4.0 <0.5.0", + "type": "range" + }, + "_requiredBy": [ + "/log4js" + ], + "_resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.4.0.tgz", + "_shasum": "a273f1f91994549a2ddd112ccaa2d1dd23cb758c", + "_shrinkwrap": null, + "_spec": "streamroller@^0.4.0", + "_where": "/home/burchettm/statsbot/node_modules/log4js", + "author": { + "name": "Gareth Jones", + "email": "gareth.nomiddlename@gmail.com" + }, + "bugs": { + "url": "https://github.com/nomiddlename/streamroller/issues" + }, + "dependencies": { + "date-format": "^0.0.0", + "debug": "^0.7.2", + "mkdirp": "^0.5.1", + "readable-stream": "^1.1.7" + }, + "description": "file streams that roll over when size limits, or dates are reached", + "devDependencies": { + "async": "^0.2.9", + "jshint": "^2.9.4", + "mocha": "^1.12.0", + "sandboxed-module": "^0.2.1", + "should": "^1.2.2" + }, + "directories": { + "test": "test" + }, + "dist": { + "shasum": "a273f1f91994549a2ddd112ccaa2d1dd23cb758c", + "tarball": "https://registry.npmjs.org/streamroller/-/streamroller-0.4.0.tgz" + }, + "engines": { + "node": ">=0.12.0" + }, + "gitHead": "ece35d7d86c87c04ff09e8604accae81cf36a0ce", + "homepage": "https://github.com/nomiddlename/streamroller#readme", + "keywords": [ + "stream", + "rolling" + ], + "license": "MIT", + "main": "lib/index.js", + "maintainers": [ + { + "name": "csausdev", + "email": "gareth.jones@sensis.com.au" + } + ], + "name": "streamroller", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/nomiddlename/streamroller.git" + }, + "scripts": { + "pretest": "jshint lib/ test/", + "test": "mocha" + }, + "version": "0.4.0" +} diff --git a/node_modules/streamroller/test/BaseRollingFileStream-test.js b/node_modules/streamroller/test/BaseRollingFileStream-test.js new file mode 100644 index 0000000..8961779 --- /dev/null +++ b/node_modules/streamroller/test/BaseRollingFileStream-test.js @@ -0,0 +1,93 @@ +"use strict"; +var should = require('should') +, fs = require('fs') +, sandbox = require('sandboxed-module'); + +describe('BaseRollingFileStream', function() { + describe('when no filename is passed', function() { + it('should throw an error', function() { + var BaseRollingFileStream = require('../lib/BaseRollingFileStream'); + (function() { + new BaseRollingFileStream(); + }).should.throw(); + }); + }); + + describe('default behaviour', function() { + var stream; + + before(function() { + var BaseRollingFileStream = require('../lib/BaseRollingFileStream'); + stream = new BaseRollingFileStream('basetest.log'); + }); + + after(function(done) { + fs.unlink('basetest.log', done); + }); + + it('should not want to roll', function() { + stream.shouldRoll().should.eql(false); + }); + + it('should not roll', function() { + var cbCalled = false; + //just calls the callback straight away, no async calls + stream.roll('basetest.log', function() { cbCalled = true; }); + cbCalled.should.eql(true); + }); + + it('should pass options to the underlying write stream', function() { + var underlyingStreamOptions; + + var BaseRollingFileStream = sandbox.require( + '../lib/BaseRollingFileStream', + { + requires: { + 'fs': { + createWriteStream: function(filename, options) { + underlyingStreamOptions = options; + return { + on: function() {} + }; + } + } + } + } + ); + var stream = new BaseRollingFileStream('cheese.log', { encoding: 'utf904'}); + stream.openTheStream(); + + underlyingStreamOptions.should.eql({ encoding: 'utf904', mode: 420, flags: 'a'}); + }); + }); + + describe('when end is called', function() { + it('should close the underlying stream', function(done) { + var stream = new (require('../lib/BaseRollingFileStream'))('cheese.log'); + + stream.theStream.on('close', function() { + done(); + }); + + stream.end(); + }); + }); + + describe('when the file is in a non-existent directory', function() { + var stream; + before(function() { + var BaseRollingFileStream = require('../lib/BaseRollingFileStream'); + stream = new BaseRollingFileStream('subdir/test.log'); + }); + + after(function() { + fs.unlinkSync('subdir/test.log'); + fs.rmdir('subdir'); + }); + + it('should create the directory', function() { + fs.existsSync('subdir/test.log').should.eql(true); + stream.end(); + }); + }); +}); diff --git a/node_modules/streamroller/test/DateRollingFileStream-test.js b/node_modules/streamroller/test/DateRollingFileStream-test.js new file mode 100644 index 0000000..5ba3f54 --- /dev/null +++ b/node_modules/streamroller/test/DateRollingFileStream-test.js @@ -0,0 +1,508 @@ +"use strict"; +var should = require('should') + , fs = require('fs') + , zlib = require('zlib') + , util = require('util') + , async = require('async') + , format = require('date-format') + , streams = require('readable-stream') + , DateRollingFileStream + , testTime = new Date(2012, 8, 12, 10, 37, 11); + +DateRollingFileStream = require('../lib').DateRollingFileStream; + +function remove(filename, cb) { + fs.unlink(filename, function () { + cb(); + }); +} + +function now() { + return testTime.getTime(); +} + +describe('DateRollingFileStream', function () { + describe('arguments', function () { + var stream; + + before(function (done) { + stream = new DateRollingFileStream( + __dirname + '/test-date-rolling-file-stream-1', + 'yyyy-mm-dd.hh' + ); + done(); + }); + + after(function (done) { + remove(__dirname + '/test-date-rolling-file-stream-1', done); + }); + + it('should take a filename and a pattern and return a WritableStream', function (done) { + stream.filename.should.eql(__dirname + '/test-date-rolling-file-stream-1'); + stream.pattern.should.eql('yyyy-mm-dd.hh'); + stream.should.be.instanceOf(streams.Writable); + done(); + }); + + it('with default settings for the underlying stream', function (done) { + stream.theStream.mode.should.eql(420); + stream.theStream.flags.should.eql('a'); + //encoding is not available on the underlying stream + //assert.equal(stream.encoding, 'utf8'); + done(); + }); + }); + + describe('default arguments', function () { + var stream; + + before(function(done) { + stream = new DateRollingFileStream(__dirname + '/test-date-rolling-file-stream-2'); + done(); + }); + + after(function (done) { + remove(__dirname + '/test-date-rolling-file-stream-2', done); + }); + + it('should have pattern of .yyyy-MM-dd', function (done) { + stream.pattern.should.eql('.yyyy-MM-dd'); + done(); + }); + }); + + describe('with stream arguments', function () { + var stream; + + before(function(done) { + stream = new DateRollingFileStream( + __dirname + '/test-date-rolling-file-stream-3', + 'yyyy-MM-dd', + {mode: parseInt('0666', 8)} + ); + done(); + }); + + after(function (done) { + remove(__dirname + '/test-date-rolling-file-stream-3', done); + }); + + it('should pass them to the underlying stream', function (done) { + stream.theStream.mode.should.eql(parseInt('0666', 8)); + done(); + }); + }); + + describe('with stream arguments but no pattern', function () { + var stream; + + before(function (done) { + stream = new DateRollingFileStream( + __dirname + '/test-date-rolling-file-stream-4', + {mode: parseInt('0666', 8)} + ); + done(); + }); + + after(function (done) { + remove(__dirname + '/test-date-rolling-file-stream-4', done); + }); + + it('should pass them to the underlying stream', function (done) { + stream.theStream.mode.should.eql(parseInt('0666', 8)); + done(); + }); + + it('should use default pattern', function (done) { + stream.pattern.should.eql('.yyyy-MM-dd'); + done(); + }); + }); + + describe('with a pattern of .yyyy-MM-dd', function () { + var stream; + + before(function (done) { + stream = new DateRollingFileStream( + __dirname + '/test-date-rolling-file-stream-5', '.yyyy-MM-dd', + null, + now + ); + stream.write("First message\n", 'utf8', done); + }); + + after(function (done) { + remove(__dirname + '/test-date-rolling-file-stream-5', done); + }); + + it('should create a file with the base name', function (done) { + fs.readFile(__dirname + '/test-date-rolling-file-stream-5', 'utf8', function (err, contents) { + contents.should.eql("First message\n"); + done(err); + }); + }); + + describe('when the day changes', function () { + + before(function (done) { + testTime = new Date(2012, 8, 13, 0, 10, 12); + stream.write("Second message\n", 'utf8', done); + }); + + after(function (done) { + remove(__dirname + '/test-date-rolling-file-stream-5.2012-09-12', done); + }); + + describe('the number of files', function () { + var files = []; + + before(function (done) { + fs.readdir(__dirname, function (err, list) { + files = list; + done(err); + }); + }); + + it('should be two', function (done) { + files.filter( + function (file) { + return file.indexOf('test-date-rolling-file-stream-5') > -1; + } + ).should.have.length(2); + done(); + }); + }); + + describe('the file without a date', function () { + it('should contain the second message', function (done) { + fs.readFile( + __dirname + '/test-date-rolling-file-stream-5', 'utf8', + function (err, contents) { + contents.should.eql("Second message\n"); + done(err); + } + ); + }); + }); + + describe('the file with the date', function () { + it('should contain the first message', function (done) { + fs.readFile( + __dirname + '/test-date-rolling-file-stream-5.2012-09-12', 'utf8', + function (err, contents) { + contents.should.eql("First message\n"); + done(err); + } + ); + }); + }); + }); + }); + + describe('with alwaysIncludePattern', function () { + var stream; + + before(function (done) { + testTime = new Date(2012, 8, 12, 0, 10, 12); + remove( + __dirname + '/test-date-rolling-file-stream-pattern.2012-09-12', + function () { + stream = new DateRollingFileStream( + __dirname + '/test-date-rolling-file-stream-pattern', + '.yyyy-MM-dd', + {alwaysIncludePattern: true}, + now + ); + stream.write("First message\n", 'utf8', done); + } + ); + }); + + after(function (done) { + remove(__dirname + '/test-date-rolling-file-stream-pattern.2012-09-12', done); + }); + + it('should create a file with the pattern set', function (done) { + fs.readFile( + __dirname + '/test-date-rolling-file-stream-pattern.2012-09-12', 'utf8', + function (err, contents) { + contents.should.eql("First message\n"); + done(err); + } + ); + }); + + describe('when the day changes', function () { + before(function (done) { + testTime = new Date(2012, 8, 13, 0, 10, 12); + stream.write("Second message\n", 'utf8', done); + }); + + after(function (done) { + remove(__dirname + '/test-date-rolling-file-stream-pattern.2012-09-13', done); + }); + + describe('the number of files', function () { + it('should be two', function (done) { + fs.readdir(__dirname, function (err, files) { + files.filter( + function (file) { + return file.indexOf('test-date-rolling-file-stream-pattern') > -1; + } + ).should.have.length(2); + done(err); + }); + }); + }); + + describe('the file with the later date', function () { + it('should contain the second message', function (done) { + fs.readFile( + __dirname + '/test-date-rolling-file-stream-pattern.2012-09-13', 'utf8', + function (err, contents) { + contents.should.eql("Second message\n"); + done(err); + } + ); + }); + }); + + describe('the file with the date', function () { + it('should contain the first message', function (done) { + fs.readFile( + __dirname + '/test-date-rolling-file-stream-pattern.2012-09-12', 'utf8', + function (err, contents) { + contents.should.eql("First message\n"); + done(err); + } + ); + }); + }); + }); + }); + + describe('with compress option', function () { + var stream; + + before(function (done) { + testTime = new Date(2012, 8, 12, 0, 10, 12); + stream = new DateRollingFileStream( + __dirname + '/compressed.log', + '.yyyy-MM-dd', + {compress: true}, + now + ); + stream.write("First message\n", 'utf8', done); + }); + + describe('when the day changes', function () { + before(function (done) { + testTime = new Date(2012, 8, 13, 0, 10, 12); + stream.write("Second message\n", 'utf8', done); + }); + + it('should be two files, one compressed', function (done) { + fs.readdir(__dirname, function (err, files) { + var logFiles = files.filter( + function (file) { + return file.indexOf('compressed.log') > -1; + } + ); + logFiles.should.have.length(2); + + zlib.gunzip( + fs.readFileSync(__dirname + '/compressed.log.2012-09-12.gz'), + function (err, contents) { + contents.toString('utf8').should.eql('First message\n'); + fs.readFileSync(__dirname + '/compressed.log', 'utf8').should.eql('Second message\n'); + done(err); + } + ); + }); + }); + }); + + after(function (done) { + remove( + __dirname + '/compressed.log', + function () { + remove(__dirname + '/compressed.log.2012-09-12.gz', done); + } + ); + }); + + }); + + describe('with daysToKeep option', function () { + var stream; + var daysToKeep = 4; + var numOriginalLogs = 10; + + before(function (done) { + var day = 0; + var streams = []; + async.whilst( + function () { + return day < numOriginalLogs; + }, + function (nextCallback) { + testTime = new Date(2012, 8, 20 - day, 0, 10, 12); + var currentStream = new DateRollingFileStream( + __dirname + '/daysToKeep.log', + '.yyyy-MM-dd', + { + alwaysIncludePattern: true, + daysToKeep: daysToKeep + }, + now + ); + async.waterfall([ + function (callback) { + currentStream.write(util.format("Message on day %d\n", day), 'utf8', callback); + }, + function (callback) { + fs.utimes(currentStream.filename, testTime, testTime, callback); + } + ], + function (err) { + day++; + streams.push(currentStream); + nextCallback(err); + }); + }, + function (err, n) { + stream = streams[0]; + done(err); + }); + + describe('when the day changes', function () { + before(function (done) { + testTime = new Date(2012, 8, 21, 0, 10, 12); + stream.write("Second message\n", 'utf8', done); + }); + + it('should be daysToKeep + 1 files left from numOriginalLogs', function (done) { + fs.readdir(__dirname, function (err, files) { + var logFiles = files.filter( + function (file) { + return file.indexOf('daysToKeep.log') > -1; + } + ); + logFiles.should.have.length(daysToKeep + 1); + done(err); + }); + }); + }); + + after(function (done) { + fs.readdir(__dirname, function (err, files) { + var logFiles = files.filter( + function (file) { + return file.indexOf('daysToKeep.log') > -1; + } + ); + async.each(logFiles, function (logFile, nextCallback) { + remove(__dirname + "/" + logFile, nextCallback); + }, + function (err) { + done(err); + }); + }); + }); + }); + }); + + describe('with daysToKeep and compress options', function () { + var stream; + var daysToKeep = 4; + var numOriginalLogs = 10; + + before(function (done) { + var day = 0; + var streams = []; + async.whilst( + function () { + return day < numOriginalLogs; + }, + function (nextCallback) { + testTime = new Date(2012, 8, 20 - day, 0, 10, 12); + var currentStream = new DateRollingFileStream( + __dirname + '/compressedDaysToKeep.log', + '.yyyy-MM-dd', + { + alwaysIncludePattern: true, + compress: true, + daysToKeep: daysToKeep + }, + now + ); + async.waterfall([ + function (callback) { + currentStream.write(util.format("Message on day %d\n", day), 'utf8', callback); + }, + function (callback) { + currentStream.compress(currentStream.filename, callback); + }, + function (callback) { + fs.utimes(currentStream.filename + ".gz", testTime, testTime, callback); + } + ], + function (err) { + day++; + streams.push(currentStream); + nextCallback(err); + }); + }, + function (err, n) { + + // Uncompress the most recent stream which will be the one we roll over + // for testing + stream = streams[0]; + var compressedFilename = stream.filename + '.gz'; + var gzip = zlib.createGzip(); + var inp = fs.createReadStream(compressedFilename); + var out = fs.createWriteStream(stream.filename); + inp.pipe(gzip).pipe(out); + + out.on('finish', function (err) { + fs.unlink(compressedFilename, done); + }); + }); + }); + + describe('when the day changes', function () { + before(function (done) { + testTime = new Date(2012, 8, 21, 0, 10, 12); + stream.write("New file message\n", 'utf8', done); + }); + + it('should be 4 files left from original 3', function (done) { + fs.readdir(__dirname, function (err, files) { + var logFiles = files.filter( + function (file) { + return file.indexOf('compressedDaysToKeep.log') > -1; + } + ); + logFiles.should.have.length(daysToKeep + 1); + done(err); + }); + }); + }); + + after(function (done) { + fs.readdir(__dirname, function (err, files) { + var logFiles = files.filter( + function (file) { + return file.indexOf('compressedDaysToKeep.log') > -1; + } + ); + async.each(logFiles, function (logFile, nextCallback) { + remove(__dirname + "/" + logFile, nextCallback); + }, + function (err) { + done(err); + }); + }); + }); + }); +}); diff --git a/node_modules/streamroller/test/RollingFileStream-test.js b/node_modules/streamroller/test/RollingFileStream-test.js new file mode 100644 index 0000000..7d09fb2 --- /dev/null +++ b/node_modules/streamroller/test/RollingFileStream-test.js @@ -0,0 +1,357 @@ +"use strict"; +var async = require('async') +, should = require('should') +, fs = require('fs') +, path = require('path') +, zlib = require('zlib') +, streams = require('readable-stream') +, RollingFileStream = require('../lib').RollingFileStream; + +function remove(filename, cb) { + fs.unlink(filename, function(err) { cb(); }); +} + +function create(filename, cb) { + fs.writeFile(filename, "test file", cb); +} + +describe('RollingFileStream', function() { + + describe('arguments', function() { + var stream; + + before(function(done) { + remove(__dirname + "/test-rolling-file-stream", function() { + stream = new RollingFileStream(__dirname + "/test-rolling-file-stream", 1024, 5); + done(); + }); + }); + + after(function(done) { + remove(__dirname + "/test-rolling-file-stream", done); + }); + + it('should take a filename, file size (bytes), no. backups, return Writable', function() { + stream.should.be.an.instanceOf(streams.Writable); + stream.filename.should.eql(__dirname + "/test-rolling-file-stream"); + stream.size.should.eql(1024); + stream.backups.should.eql(5); + }); + + it('should apply default settings to the underlying stream', function() { + stream.theStream.mode.should.eql(420); + stream.theStream.flags.should.eql('a'); + //encoding isn't a property on the underlying stream + //assert.equal(stream.theStream.encoding, 'utf8'); + }); + }); + + describe('with stream arguments', function() { + it('should pass them to the underlying stream', function() { + var stream = new RollingFileStream( + __dirname + '/test-rolling-file-stream', + 1024, + 5, + { mode: parseInt('0666', 8) } + ); + stream.theStream.mode.should.eql(parseInt('0666', 8)); + }); + + after(function(done) { + remove(__dirname + '/test-rolling-file-stream', done); + }); + }); + + describe('without size', function() { + it('should default to max int size', function() { + var stream = new RollingFileStream(__dirname + "/test-rolling-file-stream"); + stream.size.should.eql(Number.MAX_SAFE_INTEGER); + }); + + after(function(done) { + remove(__dirname + "/test-rolling-file-stream", done); + }); + }); + + describe('without number of backups', function() { + it('should default to 1 backup', function() { + var stream = new RollingFileStream(__dirname + "/test-rolling-file-stream", 1024); + stream.backups.should.eql(1); + }); + + after(function(done) { + remove(__dirname + "/test-rolling-file-stream", done); + }); + }); + + describe('writing less than the file size', function() { + + before(function(done) { + remove(__dirname + "/test-rolling-file-stream-write-less", function() { + var stream = new RollingFileStream( + __dirname + "/test-rolling-file-stream-write-less", + 100 + ); + stream.write("cheese", "utf8", function() { + stream.end(done); + }); + }); + }); + + after(function(done) { + remove(__dirname + "/test-rolling-file-stream-write-less", done); + }); + + it('should write to the file', function(done) { + fs.readFile( + __dirname + "/test-rolling-file-stream-write-less", "utf8", + function(err, contents) { + contents.should.eql("cheese"); + done(err); + } + ); + }); + + it('should write one file', function(done) { + fs.readdir(__dirname, function(err, files) { + files.filter( + function(file) { return file.indexOf('test-rolling-file-stream-write-less') > -1; } + ).should.have.length(1); + done(err); + }); + }); + }); + + describe('writing more than the file size', function() { + before(function(done) { + async.forEach( + [ + __dirname + "/test-rolling-file-stream-write-more", + __dirname + "/test-rolling-file-stream-write-more.1" + ], + remove, + function() { + var stream = new RollingFileStream( + __dirname + "/test-rolling-file-stream-write-more", + 45 + ); + async.forEachSeries( + [0, 1, 2, 3, 4, 5, 6], + function(i, cb) { + stream.write(i +".cheese\n", "utf8", cb); + }, + function() { + stream.end(done); + } + ); + } + ); + }); + + after(function(done) { + async.forEach( + [ + __dirname + "/test-rolling-file-stream-write-more", + __dirname + "/test-rolling-file-stream-write-more.1" + ], + remove, + done + ); + }); + + it('should write two files' , function(done) { + fs.readdir(__dirname, function(err, files) { + files.filter( + function(file) { + return file.indexOf('test-rolling-file-stream-write-more') > -1; + } + ).should.have.length(2); + done(err); + }); + }); + + it('should write the last two log messages to the first file', function(done) { + fs.readFile( + __dirname + "/test-rolling-file-stream-write-more", "utf8", + function(err, contents) { + contents.should.eql('5.cheese\n6.cheese\n'); + done(err); + }); + }); + + it('should write the first five log messages to the second file', function(done) { + fs.readFile( + __dirname + '/test-rolling-file-stream-write-more.1', "utf8", + function(err, contents) { + contents.should.eql('0.cheese\n1.cheese\n2.cheese\n3.cheese\n4.cheese\n'); + done(err); + } + ); + }); + }); + + describe('with options.compress = true', function() { + before(function(done) { + var stream = new RollingFileStream( + path.join(__dirname, 'compressed-backups.log'), + 30, //30 bytes max size + 2, //two backup files to keep + { compress: true } + ); + async.forEachSeries( + [ + "This is the first log message.", + "This is the second log message.", + "This is the third log message.", + "This is the fourth log message." + ], + function(i, cb) { + stream.write(i + "\n", "utf8", cb); + }, + function() { + stream.end(done); + } + ); + }); + + it('should produce three files, with the backups compressed', function(done) { + fs.readdir(__dirname, function(err, files) { + var testFiles = files.filter( + function(f) { return f.indexOf('compressed-backups.log') > -1; } + ).sort(); + + testFiles.length.should.eql(3); + testFiles.should.eql([ + 'compressed-backups.log', + 'compressed-backups.log.1.gz', + 'compressed-backups.log.2.gz', + ]); + + fs.readFile(path.join(__dirname, testFiles[0]), 'utf8', function(err, contents) { + contents.should.eql('This is the fourth log message.\n'); + + zlib.gunzip(fs.readFileSync(path.join(__dirname, testFiles[1])), + function(err, contents) { + contents.toString('utf8').should.eql('This is the third log message.\n'); + zlib.gunzip(fs.readFileSync(path.join(__dirname, testFiles[2])), + function(err, contents) { + contents.toString('utf8').should.eql('This is the second log message.\n'); + done(err); + } + ); + } + ); + }); + }); + }); + + after(function(done) { + async.forEach([ + path.join(__dirname, 'compressed-backups.log'), + path.join(__dirname, 'compressed-backups.log.1.gz'), + path.join(__dirname, 'compressed-backups.log.2.gz'), + ], remove, done); + }); + + }); + + describe('when many files already exist', function() { + before(function(done) { + async.forEach( + [ + __dirname + '/test-rolling-stream-with-existing-files.11', + __dirname + '/test-rolling-stream-with-existing-files.20', + __dirname + '/test-rolling-stream-with-existing-files.-1', + __dirname + '/test-rolling-stream-with-existing-files.1.1', + __dirname + '/test-rolling-stream-with-existing-files.1' + ], + remove, + function(err) { + if (err) done(err); + + async.forEach( + [ + __dirname + '/test-rolling-stream-with-existing-files.11', + __dirname + '/test-rolling-stream-with-existing-files.20', + __dirname + '/test-rolling-stream-with-existing-files.-1', + __dirname + '/test-rolling-stream-with-existing-files.1.1', + __dirname + '/test-rolling-stream-with-existing-files.1' + ], + create, + function(err) { + if (err) done(err); + + var stream = new RollingFileStream( + __dirname + "/test-rolling-stream-with-existing-files", + 45, + 5 + ); + + async.forEachSeries( + [0, 1, 2, 3, 4, 5, 6], + function(i, cb) { + stream.write(i +".cheese\n", "utf8", cb); + }, + function() { + stream.end(done); + } + ); + } + ); + } + ); + }); + + after(function(done) { + async.forEach([ + __dirname + '/test-rolling-stream-with-existing-files', + __dirname + '/test-rolling-stream-with-existing-files.0', + __dirname + '/test-rolling-stream-with-existing-files.1', + __dirname + '/test-rolling-stream-with-existing-files.2', + __dirname + '/test-rolling-stream-with-existing-files.3', + __dirname + '/test-rolling-stream-with-existing-files.4', + __dirname + '/test-rolling-stream-with-existing-files.5', + __dirname + '/test-rolling-stream-with-existing-files.11', + __dirname + '/test-rolling-stream-with-existing-files.20' + ], remove, done); + }); + + it('should roll the files', function(done) { + fs.readdir(__dirname, function(err, files) { + files.should.include('test-rolling-stream-with-existing-files'); + files.should.include('test-rolling-stream-with-existing-files.1'); + files.should.include('test-rolling-stream-with-existing-files.2'); + files.should.include('test-rolling-stream-with-existing-files.11'); + files.should.include('test-rolling-stream-with-existing-files.20'); + done(err); + }); + }); + }); + + describe('when the directory gets deleted', function() { + var stream; + before(function(done) { + stream = new RollingFileStream(path.join('subdir', 'test-rolling-file-stream'), 5, 5); + stream.write('initial', 'utf8', done); + }); + + after(function() { + fs.unlinkSync(path.join('subdir', 'test-rolling-file-stream')); + fs.rmdirSync('subdir'); + }); + + it('handles directory deletion gracefully', function(done) { + stream.theStream.on('error', done); + + remove(path.join('subdir', 'test-rolling-file-stream'), function() { + fs.rmdir('subdir', function() { + stream.write('rollover', 'utf8', function() { + fs.readFileSync(path.join('subdir', 'test-rolling-file-stream'), 'utf8') + .should.eql('rollover'); + done(); + }); + }); + }); + }); + }); +}); diff --git a/node_modules/streamroller/test/read-only-file-test.js b/node_modules/streamroller/test/read-only-file-test.js new file mode 100644 index 0000000..1c6619e --- /dev/null +++ b/node_modules/streamroller/test/read-only-file-test.js @@ -0,0 +1,28 @@ +"use strict"; +var should = require('should') +, fs = require('fs') +, path = require('path') +, streamroller = require('../lib/index.js'); + +describe('when the destination file is read-only', function() { + var testFile = path.join(__dirname, 'read-only-file.log'); + before(function() { + fs.writeFileSync( + testFile, + "Some test content" + ); + fs.chmodSync(testFile, 292 /* 0o444 - octal literals not allowed in old node */); + }); + + it('should generate an error when writing', function(done) { + var stream = new streamroller.RollingFileStream(testFile); + stream.on('error', function(e) { + e.code.should.eql('EACCES'); + done(); + }); + }); + + after(function() { + fs.unlinkSync(testFile); + }); +}); diff --git a/node_modules/string_decoder/.npmignore b/node_modules/string_decoder/.npmignore new file mode 100644 index 0000000..206320c --- /dev/null +++ b/node_modules/string_decoder/.npmignore @@ -0,0 +1,2 @@ +build +test diff --git a/node_modules/string_decoder/LICENSE b/node_modules/string_decoder/LICENSE new file mode 100644 index 0000000..6de584a --- /dev/null +++ b/node_modules/string_decoder/LICENSE @@ -0,0 +1,20 @@ +Copyright Joyent, Inc. and other Node contributors. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string_decoder/README.md b/node_modules/string_decoder/README.md new file mode 100644 index 0000000..4d2aa00 --- /dev/null +++ b/node_modules/string_decoder/README.md @@ -0,0 +1,7 @@ +**string_decoder.js** (`require('string_decoder')`) from Node.js core + +Copyright Joyent, Inc. and other Node contributors. See LICENCE file for details. + +Version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. **Prefer the stable version over the unstable.** + +The *build/* directory contains a build script that will scrape the source from the [joyent/node](https://github.com/joyent/node) repo given a specific Node version. \ No newline at end of file diff --git a/node_modules/string_decoder/index.js b/node_modules/string_decoder/index.js new file mode 100644 index 0000000..b00e54f --- /dev/null +++ b/node_modules/string_decoder/index.js @@ -0,0 +1,221 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var Buffer = require('buffer').Buffer; + +var isBufferEncoding = Buffer.isEncoding + || function(encoding) { + switch (encoding && encoding.toLowerCase()) { + case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; + default: return false; + } + } + + +function assertEncoding(encoding) { + if (encoding && !isBufferEncoding(encoding)) { + throw new Error('Unknown encoding: ' + encoding); + } +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. CESU-8 is handled as part of the UTF-8 encoding. +// +// @TODO Handling all encodings inside a single object makes it very difficult +// to reason about this code, so it should be split up in the future. +// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code +// points as used by CESU-8. +var StringDecoder = exports.StringDecoder = function(encoding) { + this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); + assertEncoding(encoding); + switch (this.encoding) { + case 'utf8': + // CESU-8 represents each of Surrogate Pair by 3-bytes + this.surrogateSize = 3; + break; + case 'ucs2': + case 'utf16le': + // UTF-16 represents each of Surrogate Pair by 2-bytes + this.surrogateSize = 2; + this.detectIncompleteChar = utf16DetectIncompleteChar; + break; + case 'base64': + // Base-64 stores 3 bytes in 4 chars, and pads the remainder. + this.surrogateSize = 3; + this.detectIncompleteChar = base64DetectIncompleteChar; + break; + default: + this.write = passThroughWrite; + return; + } + + // Enough space to store all bytes of a single character. UTF-8 needs 4 + // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). + this.charBuffer = new Buffer(6); + // Number of bytes received for the current incomplete multi-byte character. + this.charReceived = 0; + // Number of bytes expected for the current incomplete multi-byte character. + this.charLength = 0; +}; + + +// write decodes the given buffer and returns it as JS string that is +// guaranteed to not contain any partial multi-byte characters. Any partial +// character found at the end of the buffer is buffered up, and will be +// returned when calling write again with the remaining bytes. +// +// Note: Converting a Buffer containing an orphan surrogate to a String +// currently works, but converting a String to a Buffer (via `new Buffer`, or +// Buffer#write) will replace incomplete surrogates with the unicode +// replacement character. See https://codereview.chromium.org/121173009/ . +StringDecoder.prototype.write = function(buffer) { + var charStr = ''; + // if our last write ended with an incomplete multibyte character + while (this.charLength) { + // determine how many remaining bytes this buffer has to offer for this char + var available = (buffer.length >= this.charLength - this.charReceived) ? + this.charLength - this.charReceived : + buffer.length; + + // add the new bytes to the char buffer + buffer.copy(this.charBuffer, this.charReceived, 0, available); + this.charReceived += available; + + if (this.charReceived < this.charLength) { + // still not enough chars in this buffer? wait for more ... + return ''; + } + + // remove bytes belonging to the current character from the buffer + buffer = buffer.slice(available, buffer.length); + + // get the character that was split + charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); + + // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character + var charCode = charStr.charCodeAt(charStr.length - 1); + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + this.charLength += this.surrogateSize; + charStr = ''; + continue; + } + this.charReceived = this.charLength = 0; + + // if there are no more bytes in this buffer, just emit our char + if (buffer.length === 0) { + return charStr; + } + break; + } + + // determine and set charLength / charReceived + this.detectIncompleteChar(buffer); + + var end = buffer.length; + if (this.charLength) { + // buffer the incomplete character bytes we got + buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); + end -= this.charReceived; + } + + charStr += buffer.toString(this.encoding, 0, end); + + var end = charStr.length - 1; + var charCode = charStr.charCodeAt(end); + // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + var size = this.surrogateSize; + this.charLength += size; + this.charReceived += size; + this.charBuffer.copy(this.charBuffer, size, 0, size); + buffer.copy(this.charBuffer, 0, 0, size); + return charStr.substring(0, end); + } + + // or just emit the charStr + return charStr; +}; + +// detectIncompleteChar determines if there is an incomplete UTF-8 character at +// the end of the given buffer. If so, it sets this.charLength to the byte +// length that character, and sets this.charReceived to the number of bytes +// that are available for this character. +StringDecoder.prototype.detectIncompleteChar = function(buffer) { + // determine how many bytes we have to check at the end of this buffer + var i = (buffer.length >= 3) ? 3 : buffer.length; + + // Figure out if one of the last i bytes of our buffer announces an + // incomplete char. + for (; i > 0; i--) { + var c = buffer[buffer.length - i]; + + // See http://en.wikipedia.org/wiki/UTF-8#Description + + // 110XXXXX + if (i == 1 && c >> 5 == 0x06) { + this.charLength = 2; + break; + } + + // 1110XXXX + if (i <= 2 && c >> 4 == 0x0E) { + this.charLength = 3; + break; + } + + // 11110XXX + if (i <= 3 && c >> 3 == 0x1E) { + this.charLength = 4; + break; + } + } + this.charReceived = i; +}; + +StringDecoder.prototype.end = function(buffer) { + var res = ''; + if (buffer && buffer.length) + res = this.write(buffer); + + if (this.charReceived) { + var cr = this.charReceived; + var buf = this.charBuffer; + var enc = this.encoding; + res += buf.slice(0, cr).toString(enc); + } + + return res; +}; + +function passThroughWrite(buffer) { + return buffer.toString(this.encoding); +} + +function utf16DetectIncompleteChar(buffer) { + this.charReceived = buffer.length % 2; + this.charLength = this.charReceived ? 2 : 0; +} + +function base64DetectIncompleteChar(buffer) { + this.charReceived = buffer.length % 3; + this.charLength = this.charReceived ? 3 : 0; +} diff --git a/node_modules/string_decoder/package.json b/node_modules/string_decoder/package.json new file mode 100644 index 0000000..e064089 --- /dev/null +++ b/node_modules/string_decoder/package.json @@ -0,0 +1,87 @@ +{ + "_args": [ + [ + { + "raw": "string_decoder@~0.10.x", + "scope": null, + "escapedName": "string_decoder", + "name": "string_decoder", + "rawSpec": "~0.10.x", + "spec": ">=0.10.0 <0.11.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/readable-stream" + ] + ], + "_from": "string_decoder@>=0.10.0 <0.11.0", + "_id": "string_decoder@0.10.31", + "_inCache": true, + "_location": "/string_decoder", + "_npmUser": { + "name": "rvagg", + "email": "rod@vagg.org" + }, + "_npmVersion": "1.4.23", + "_phantomChildren": {}, + "_requested": { + "raw": "string_decoder@~0.10.x", + "scope": null, + "escapedName": "string_decoder", + "name": "string_decoder", + "rawSpec": "~0.10.x", + "spec": ">=0.10.0 <0.11.0", + "type": "range" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", + "_shrinkwrap": null, + "_spec": "string_decoder@~0.10.x", + "_where": "/home/burchettm/statsbot/node_modules/readable-stream", + "bugs": { + "url": "https://github.com/rvagg/string_decoder/issues" + }, + "dependencies": {}, + "description": "The string_decoder module from Node core", + "devDependencies": { + "tap": "~0.4.8" + }, + "directories": {}, + "dist": { + "shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", + "tarball": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + }, + "gitHead": "d46d4fd87cf1d06e031c23f1ba170ca7d4ade9a0", + "homepage": "https://github.com/rvagg/string_decoder", + "keywords": [ + "string", + "decoder", + "browser", + "browserify" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + }, + { + "name": "rvagg", + "email": "rod@vagg.org" + } + ], + "name": "string_decoder", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/rvagg/string_decoder.git" + }, + "scripts": { + "test": "tap test/simple/*.js" + }, + "version": "0.10.31" +} diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js new file mode 100644 index 0000000..099480f --- /dev/null +++ b/node_modules/strip-ansi/index.js @@ -0,0 +1,6 @@ +'use strict'; +var ansiRegex = require('ansi-regex')(); + +module.exports = function (str) { + return typeof str === 'string' ? str.replace(ansiRegex, '') : str; +}; diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/strip-ansi/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json new file mode 100644 index 0000000..49cacf6 --- /dev/null +++ b/node_modules/strip-ansi/package.json @@ -0,0 +1,123 @@ +{ + "_args": [ + [ + { + "raw": "strip-ansi@^3.0.0", + "scope": null, + "escapedName": "strip-ansi", + "name": "strip-ansi", + "rawSpec": "^3.0.0", + "spec": ">=3.0.0 <4.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/chalk" + ] + ], + "_from": "strip-ansi@>=3.0.0 <4.0.0", + "_id": "strip-ansi@3.0.1", + "_inCache": true, + "_location": "/strip-ansi", + "_nodeVersion": "0.12.7", + "_npmOperationalInternal": { + "host": "packages-9-west.internal.npmjs.com", + "tmp": "tmp/strip-ansi-3.0.1.tgz_1456057278183_0.28958667791448534" + }, + "_npmUser": { + "name": "jbnicolai", + "email": "jappelman@xebia.com" + }, + "_npmVersion": "2.11.3", + "_phantomChildren": {}, + "_requested": { + "raw": "strip-ansi@^3.0.0", + "scope": null, + "escapedName": "strip-ansi", + "name": "strip-ansi", + "rawSpec": "^3.0.0", + "spec": ">=3.0.0 <4.0.0", + "type": "range" + }, + "_requiredBy": [ + "/chalk" + ], + "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "_shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", + "_shrinkwrap": null, + "_spec": "strip-ansi@^3.0.0", + "_where": "/home/burchettm/statsbot/node_modules/chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/strip-ansi/issues" + }, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "description": "Strip ANSI escape codes", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", + "tarball": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "8270705c704956da865623e564eba4875c3ea17f", + "homepage": "https://github.com/chalk/strip-ansi", + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + { + "name": "jbnicolai", + "email": "jappelman@xebia.com" + } + ], + "name": "strip-ansi", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/strip-ansi.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.0.1" +} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md new file mode 100644 index 0000000..cb7d9ff --- /dev/null +++ b/node_modules/strip-ansi/readme.md @@ -0,0 +1,33 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install --save strip-ansi +``` + + +## Usage + +```js +var stripAnsi = require('strip-ansi'); + +stripAnsi('\u001b[4mcake\u001b[0m'); +//=> 'cake' +``` + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/strip-bom/index.js b/node_modules/strip-bom/index.js new file mode 100644 index 0000000..5695c5c --- /dev/null +++ b/node_modules/strip-bom/index.js @@ -0,0 +1,17 @@ +'use strict'; +var isUtf8 = require('is-utf8'); + +module.exports = function (x) { + // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string + // conversion translates it to FEFF (UTF-16 BOM) + if (typeof x === 'string' && x.charCodeAt(0) === 0xFEFF) { + return x.slice(1); + } + + if (Buffer.isBuffer(x) && isUtf8(x) && + x[0] === 0xEF && x[1] === 0xBB && x[2] === 0xBF) { + return x.slice(3); + } + + return x; +}; diff --git a/node_modules/strip-bom/license b/node_modules/strip-bom/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/strip-bom/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strip-bom/package.json b/node_modules/strip-bom/package.json new file mode 100644 index 0000000..6c47f3a --- /dev/null +++ b/node_modules/strip-bom/package.json @@ -0,0 +1,105 @@ +{ + "_args": [ + [ + { + "raw": "strip-bom@^2.0.0", + "scope": null, + "escapedName": "strip-bom", + "name": "strip-bom", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/load-json-file" + ] + ], + "_from": "strip-bom@>=2.0.0 <3.0.0", + "_id": "strip-bom@2.0.0", + "_inCache": true, + "_location": "/strip-bom", + "_nodeVersion": "0.12.5", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.11.2", + "_phantomChildren": {}, + "_requested": { + "raw": "strip-bom@^2.0.0", + "scope": null, + "escapedName": "strip-bom", + "name": "strip-bom", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/load-json-file" + ], + "_resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "_shasum": "6219a85616520491f35788bdbf1447a99c7e6b0e", + "_shrinkwrap": null, + "_spec": "strip-bom@^2.0.0", + "_where": "/home/burchettm/statsbot/node_modules/load-json-file", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/strip-bom/issues" + }, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "description": "Strip UTF-8 byte order mark (BOM) from a string/buffer", + "devDependencies": { + "mocha": "*" + }, + "directories": {}, + "dist": { + "shasum": "6219a85616520491f35788bdbf1447a99c7e6b0e", + "tarball": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "851b9c126dba9561cc14ef3dc2634dcc11df4d11", + "homepage": "https://github.com/sindresorhus/strip-bom", + "keywords": [ + "bom", + "strip", + "byte", + "mark", + "unicode", + "utf8", + "utf-8", + "remove", + "delete", + "trim", + "text", + "buffer", + "string" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "strip-bom", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/strip-bom.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "2.0.0" +} diff --git a/node_modules/strip-bom/readme.md b/node_modules/strip-bom/readme.md new file mode 100644 index 0000000..8ecf258 --- /dev/null +++ b/node_modules/strip-bom/readme.md @@ -0,0 +1,39 @@ +# strip-bom [![Build Status](https://travis-ci.org/sindresorhus/strip-bom.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-bom) + +> Strip UTF-8 [byte order mark](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8) (BOM) from a string/buffer + +From Wikipedia: + +> The Unicode Standard permits the BOM in UTF-8, but does not require nor recommend its use. Byte order has no meaning in UTF-8. + + +## Install + +``` +$ npm install --save strip-bom +``` + + +## Usage + +```js +var fs = require('fs'); +var stripBom = require('strip-bom'); + +stripBom('\uFEFFunicorn'); +//=> 'unicorn' + +stripBom(fs.readFileSync('unicorn.txt')); +//=> 'unicorn' +``` + + +## Related + +- [strip-bom-cli](https://github.com/sindresorhus/strip-bom-cli) - CLI for this module +- [strip-bom-stream](https://github.com/sindresorhus/strip-bom-stream) - Stream version of this module + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/strip-indent/cli.js b/node_modules/strip-indent/cli.js new file mode 100755 index 0000000..bcd5f8d --- /dev/null +++ b/node_modules/strip-indent/cli.js @@ -0,0 +1,49 @@ +#!/usr/bin/env node +'use strict'; +var fs = require('fs'); +var stdin = require('get-stdin'); +var pkg = require('./package.json'); +var stripIndent = require('./'); +var argv = process.argv.slice(2); +var input = argv[0]; + +function help() { + console.log([ + '', + ' ' + pkg.description, + '', + ' Usage', + ' strip-indent ', + ' echo | strip-indent', + '', + ' Example', + ' echo \'\\tunicorn\\n\\t\\tcake\' | strip-indent', + ' unicorn', + ' \tcake' + ].join('\n')); +} + +function init(data) { + console.log(stripIndent(data)); +} + +if (argv.indexOf('--help') !== -1) { + help(); + return; +} + +if (argv.indexOf('--version') !== -1) { + console.log(pkg.version); + return; +} + +if (process.stdin.isTTY) { + if (!input) { + help(); + return; + } + + init(fs.readFileSync(input, 'utf8')); +} else { + stdin(init); +} diff --git a/node_modules/strip-indent/index.js b/node_modules/strip-indent/index.js new file mode 100644 index 0000000..8f8f4f4 --- /dev/null +++ b/node_modules/strip-indent/index.js @@ -0,0 +1,16 @@ +'use strict'; +module.exports = function (str) { + var match = str.match(/^[ \t]*(?=\S)/gm); + + if (!match) { + return str; + } + + var indent = Math.min.apply(Math, match.map(function (el) { + return el.length; + })); + + var re = new RegExp('^[ \\t]{' + indent + '}', 'gm'); + + return indent > 0 ? str.replace(re, '') : str; +}; diff --git a/node_modules/strip-indent/license b/node_modules/strip-indent/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/strip-indent/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strip-indent/package.json b/node_modules/strip-indent/package.json new file mode 100644 index 0000000..eb69de9 --- /dev/null +++ b/node_modules/strip-indent/package.json @@ -0,0 +1,109 @@ +{ + "_args": [ + [ + { + "raw": "strip-indent@^1.0.1", + "scope": null, + "escapedName": "strip-indent", + "name": "strip-indent", + "rawSpec": "^1.0.1", + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/redent" + ] + ], + "_from": "strip-indent@>=1.0.1 <2.0.0", + "_id": "strip-indent@1.0.1", + "_inCache": true, + "_location": "/strip-indent", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.5.1", + "_phantomChildren": {}, + "_requested": { + "raw": "strip-indent@^1.0.1", + "scope": null, + "escapedName": "strip-indent", + "name": "strip-indent", + "rawSpec": "^1.0.1", + "spec": ">=1.0.1 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/redent" + ], + "_resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "_shasum": "0c7962a6adefa7bbd4ac366460a638552ae1a0a2", + "_shrinkwrap": null, + "_spec": "strip-indent@^1.0.1", + "_where": "/home/burchettm/statsbot/node_modules/redent", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "bin": { + "strip-indent": "cli.js" + }, + "bugs": { + "url": "https://github.com/sindresorhus/strip-indent/issues" + }, + "dependencies": { + "get-stdin": "^4.0.1" + }, + "description": "Strip leading whitespace from every line in a string", + "devDependencies": { + "mocha": "*" + }, + "directories": {}, + "dist": { + "shasum": "0c7962a6adefa7bbd4ac366460a638552ae1a0a2", + "tarball": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js", + "cli.js" + ], + "gitHead": "addcf90a56001ea122e9f1254987016bc87e5b5f", + "homepage": "https://github.com/sindresorhus/strip-indent", + "keywords": [ + "cli", + "bin", + "browser", + "strip", + "normalize", + "remove", + "indent", + "indentation", + "whitespace", + "space", + "tab", + "string", + "str" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "strip-indent", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/strip-indent.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "1.0.1" +} diff --git a/node_modules/strip-indent/readme.md b/node_modules/strip-indent/readme.md new file mode 100644 index 0000000..d622f03 --- /dev/null +++ b/node_modules/strip-indent/readme.md @@ -0,0 +1,61 @@ +# strip-indent [![Build Status](https://travis-ci.org/sindresorhus/strip-indent.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-indent) + +> Strip leading whitespace from every line in a string + +The line with the least number of leading whitespace, ignoring empty lines, determines the number to remove. + +Useful for removing redundant indentation. + + +## Install + +```sh +$ npm install --save strip-indent +``` + + +## Usage + +```js +var str = '\tunicorn\n\t\tcake'; +/* + unicorn + cake +*/ + +stripIndent('\tunicorn\n\t\tcake'); +/* +unicorn + cake +*/ +``` + + +## CLI + +```sh +$ npm install --global strip-indent +``` + +```sh +$ strip-indent --help + + Usage + strip-indent + echo | strip-indent + + Example + echo '\tunicorn\n\t\tcake' | strip-indent + unicorn + cake +``` + + +## Related + +- [indent-string](https://github.com/sindresorhus/indent-string) - Indent each line in a string + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/superagent/.npmignore b/node_modules/superagent/.npmignore new file mode 100644 index 0000000..90d998b --- /dev/null +++ b/node_modules/superagent/.npmignore @@ -0,0 +1,6 @@ +support +test +examples +*.sock +lib-cov +coverage.html diff --git a/node_modules/superagent/.travis.yml b/node_modules/superagent/.travis.yml new file mode 100644 index 0000000..0262c01 --- /dev/null +++ b/node_modules/superagent/.travis.yml @@ -0,0 +1,18 @@ +sudo: false +language: node_js +node_js: + - "5.4" + - "4.2" + - "0.12" + - "0.10" + - "iojs" + +env: + global: + - SAUCE_USERNAME='shtylman-superagent' + - SAUCE_ACCESS_KEY='39a45464-cb1d-4b8d-aa1f-83c7c04fa673' + +matrix: + include: + - node_js: "4.2" + env: BROWSER=1 diff --git a/node_modules/superagent/.zuul.yml b/node_modules/superagent/.zuul.yml new file mode 100644 index 0000000..031c56a --- /dev/null +++ b/node_modules/superagent/.zuul.yml @@ -0,0 +1,15 @@ +ui: mocha-bdd +server: ./test/support/server.js +browsers: + - name: chrome + version: latest + - name: firefox + version: latest + - name: safari + version: latest + - name: iphone + version: latest + - name: android + version: latest + - name: ie + version: 9..latest diff --git a/node_modules/superagent/Contributing.md b/node_modules/superagent/Contributing.md new file mode 100644 index 0000000..1eca592 --- /dev/null +++ b/node_modules/superagent/Contributing.md @@ -0,0 +1,7 @@ +When submitting a PR, your chance of acceptance increases if you do the following: + +* Code style is consistent with existing in the file. +* Tests are passing (client and server). +* You add a test for the failing issue you are fixing. +* Code changes are focused on the area of discussion. +* Do not rebuild the distribution files or increment version numbers. diff --git a/node_modules/superagent/History.md b/node_modules/superagent/History.md new file mode 100644 index 0000000..553a5ea --- /dev/null +++ b/node_modules/superagent/History.md @@ -0,0 +1,554 @@ +# 1.8.2 (2016-03-20) + + * Fixed handling of HTTP status 204 with content-encoding: gzip (Andrew Shelton) + * Handling of FormData error events (scriptype) + * Fixed parsing of `vnd+json` MIME types (Kornel Lesiński) + * Aliased browser implementation of `.parse()` as `.serialize()` for forward compatibility + +# 1.8.1 (2016-03-14) + + * Fixed form-data incompatibility with IE9 + +# 1.8.0 (2016-03-09) + + * Extracted common code into request-base class (Peter Lyons) + * It does not affect the public API, but please let us know if you notice any plugins/subclasses breaking! + * Added option `{type:'auto'}` to `auth` method, which enables browser-native auth types (Jungle, Askar Yusupov) + * Added `responseType()` to set XHR `responseType` (chris) + * Switched to form-data for browserify-compatible `FormData` (Peter Lyons) + * Added `statusCode` to error response when JSON response is malformed (mattdell) + * Prevented TCP port conflicts in all tests (Peter Lyons) + * Updated form-data dependency + +# 1.7.2 (2016-01-26) + + * Fix case-sensitivity of header fields introduced by a4ddd6a. (Edward J. Jinotti) + * bump extend dependency, as former version did not contain any license information (Lukas Eipert) + +# 1.7.1 (2016-01-21) + + * Fixed a conflict with express when using npm 3.x (Glenn) + * Fixed redirects after a multipart/form-data POST request (cyclist2) + +# 1.7.0 (2016-01-18) + + * When attaching files, read default filename from the `File` object (JD Isaacks) + * Add `direction` property to `progress` events (Joseph Dykstra) + * Update component-emitter & formidable (Kornel Lesiński) + * Don't re-encode query string needlessly (Ruben Verborgh) + * ensure querystring is appended when doing `stream.pipe(request)` (Keith Grennan) + * change set header function, not call `this.request()` until call `this.end()` (vicanso) + * Add no-op `withCredentials` to Node API (markdalgleish) + * fix `delete` breaking on ie8 (kenjiokabe) + * Don't let request error override responses (Clay Reimann) + * Increased number of tests shared between node and client (Kornel Lesiński) + +# 1.6.0/1.6.1 (2015-12-09) + + * avoid misleading CORS error message + * added 'progress' event on file/form upload in Node (Olivier Lalonde) + * return raw response if the response parsing fails (Rei Colina) + * parse content-types ending with `+json` as JSON (Eiryyy) + * fix to avoid throwing errors on aborted requests (gjurgens) + * retain cookies on redirect when hosts match (Tom Conroy) + * added Bower manifest (Johnny Freeman) + * upgrade to latest cookiejar (Andy Burke) + +# 1.5.0 (2015-11-30) + + * encode array values as `key=1&key=2&key=3` etc... (aalpern, Davis Kim) + * avoid the error which is omitted from 'socket hang up' + * faster JSON parsing, handling of zlib errors (jbellenger) + * fix IE11 sends 'undefined' string if data was undefined (Vadim Goncharov) + * alias `del()` method as `delete()` (Aaron Krause) + * revert Request#parse since it was actually Response#parse + +# 1.4.0 (2015-09-14) + + * add Request#parse method to client library + * add missing statusCode in client response + * don't apply JSON heuristics if a valid parser is found + * fix detection of root object for webworkers + +# 1.3.0 (2015-08-05) + + * fix incorrect content-length of data set to buffer + * serialize request data takes into account charsets + * add basic promise support via a `then` function + +# 1.2.0 (2015-04-13) + + * add progress events to downlodas + * make usable in webworkers + * add support for 308 redirects + * update node-form-data dependency + * update to work in react native + * update node-mime dependency + +# 1.1.0 (2015-03-13) + + * Fix responseType checks without xhr2 and ie9 tests (rase-) + * errors have .status and .response fields if applicable (defunctzombie) + * fix end callback called before saving cookies (rase-) + +1.0.0 / 2015-03-08 +================== + + * All non-200 responses are treated as errors now. (The callback is called with an error when the response has a status < 200 or >= 300 now. In previous versions this would not have raised an error and the client would have to check the `res` object. See [#283](https://github.com/visionmedia/superagent/issues/283). + * keep timeouts intact across redirects (hopkinsth) + * handle falsy json values (themaarten) + * fire response events in browser version (Schoonology) + * getXHR exported in client version (KidsKilla) + * remove arity check on `.end()` callbacks (defunctzombie) + * avoid setting content-type for host objects (rexxars) + * don't index array strings in querystring (travisjeffery) + * fix pipe() with redirects (cyrilis) + * add xhr2 file download (vstirbu) + * set default response type to text/plain if not specified (warrenseine) + +0.21.0 / 2014-11-11 +================== + + * Trim text before parsing json (gjohnson) + * Update tests to express 4 (gaastonsr) + * Prevent double callback when error is thrown (pgn-vole) + * Fix missing clearTimeout (nickdima) + * Update debug (TooTallNate) + +0.20.0 / 2014-10-02 +================== + + * Add toJSON() to request and response instances. (yields) + * Prevent HEAD requests from getting parsed. (gjohnson) + * Update debug. (TooTallNate) + +0.19.1 / 2014-09-24 +================== + + * Fix basic auth issue when password is falsey value. (gjohnson) + +0.19.0 / 2014-09-24 +================== + + * Add unset() to browser. (shesek) + * Prefer XHR over ActiveX. (omeid) + * Catch parse errors. (jacwright) + * Update qs dependency. (wercker) + * Add use() to node. (Financial-Times) + * Add response text to errors. (yields) + * Don't send empty cookie headers. (undoZen) + * Don't parse empty response bodies. (DveMac) + * Use hostname when setting cookie host. (prasunsultania) + +0.18.2 / 2014-07-12 +================== + + * Handle parser errors. (kof) + * Ensure not to use default parsers when there is a user defined one. (kof) + +0.18.1 / 2014-07-05 +================== + + * Upgrade cookiejar dependency (juanpin) + * Support image mime types (nebulade) + * Make .agent chainable (kof) + * Upgrade debug (TooTallNate) + * Fix docs (aheckmann) + +0.18.0 / 2014-04-29 +=================== + +* Use "form-data" module for the multipart/form-data implementation. (TooTallNate) +* Add basic `field()` and `attach()` functions for HTML5 FormData. (TooTallNate) +* Deprecate `part()`. (TooTallNate) +* Set default user-agent header. (bevacqua) +* Add `unset()` method for removing headers. (bevacqua) +* Update cookiejar. (missinglink) +* Fix response error formatting. (shesek) + +0.17.0 / 2014-03-06 +=================== + + * supply uri malformed error to the callback (yields) + * add request event (yields) + * allow simple auth (yields) + * add request event (yields) + * switch to component/reduce (visionmedia) + * fix part content-disposition (mscdex) + * add browser testing via zuul (defunctzombie) + * adds request.use() (johntron) + +0.16.0 / 2014-01-07 +================== + + * remove support for 0.6 (superjoe30) + * fix CORS withCredentials (wejendorp) + * add "test" script (superjoe30) + * add request .accept() method (nickl-) + * add xml to mime types mappings (nickl-) + * fix parse body error on HEAD requests (gjohnson) + * fix documentation typos (matteofigus) + * fix content-type + charset (bengourley) + * fix null values on query parameters (cristiandouce) + +0.15.7 / 2013-10-19 +================== + + * pin should.js to 1.3.0 due to breaking change in 2.0.x + * fix browserify regression + +0.15.5 / 2013-10-09 +================== + + * add browser field to support browserify + * fix .field() value number support + +0.15.4 / 2013-07-09 +================== + + * node: add a Request#agent() function to set the http Agent to use + +0.15.3 / 2013-07-05 +================== + + * fix .pipe() unzipping on more recent nodes. Closes #240 + * fix passing an empty object to .query() no longer appends "?" + * fix formidable error handling + * update formidable + +0.15.2 / 2013-07-02 +================== + + * fix: emit 'end' when piping. + +0.15.1 / 2013-06-26 +================== + + * add try/catch around parseLinks + +0.15.0 / 2013-06-25 +================== + + * make `Response#toError()` have a more meaningful `message` + +0.14.9 / 2013-06-15 +================== + + * add debug()s to the node client + * add .abort() method to node client + +0.14.8 / 2013-06-13 +================== + + * set .agent = false always + * remove X-Requested-With. Closes #189 + +0.14.7 / 2013-06-06 +================== + + * fix unzip error handling + +0.14.6 / 2013-05-23 +================== + + * fix HEAD unzip bug + +0.14.5 / 2013-05-23 +================== + + * add flag to ensure the callback is __never__ invoked twice + +0.14.4 / 2013-05-22 +================== + + * add superagent.js build output + * update qs + * update emitter-component + * revert "add browser field to support browserify" see GH-221 + +0.14.3 / 2013-05-18 +================== + + * add browser field to support browserify + +0.14.2/ 2013-05-07 +================== + + * add host object check to fix serialization of File/Blobs etc as json + +0.14.1 / 2013-04-09 +================== + + * update qs + +0.14.0 / 2013-04-02 +================== + + * add client-side basic auth + * fix retaining of .set() header field case + +0.13.0 / 2013-03-13 +================== + + * add progress events to client + * add simple example + * add res.headers as alias of res.header for browser client + * add res.get(field) to node/client + +0.12.4 / 2013-02-11 +================== + + * fix get content-type even if can't get other headers in firefox. fixes #181 + +0.12.3 / 2013-02-11 +================== + + * add quick "progress" event support + +0.12.2 / 2013-02-04 +================== + + * add test to check if response acts as a readable stream + * add ReadableStream in the Response prototype. + * add test to assert correct redirection when the host changes in the location header. + * add default Accept-Encoding. Closes #155 + * fix req.pipe() return value of original stream for node parity. Closes #171 + * remove the host header when cleaning headers to properly follow the redirection. + +0.12.1 / 2013-01-10 +================== + + * add x-domain error handling + +0.12.0 / 2013-01-04 +================== + + * add header persistence on redirects + +0.11.0 / 2013-01-02 +================== + + * add .error Error object. Closes #156 + * add forcing of res.text removal for FF HEAD responses. Closes #162 + * add reduce component usage. Closes #90 + * move better-assert dep to development deps + +0.10.0 / 2012-11-14 +================== + + * add req.timeout(ms) support for the client + +0.9.10 / 2012-11-14 +================== + + * fix client-side .query(str) support + +0.9.9 / 2012-11-14 +================== + + * add .parse(fn) support + * fix socket hangup with dates in querystring. Closes #146 + * fix socket hangup "error" event when a callback of arity 2 is provided + +0.9.8 / 2012-11-03 +================== + + * add emission of error from `Request#callback()` + * add a better fix for nodes weird socket hang up error + * add PUT/POST/PATCH data support to client short-hand functions + * add .license property to component.json + * change client portion to build using component(1) + * fix GET body support [guille] + +0.9.7 / 2012-10-19 +================== + + * fix `.buffer()` `res.text` when no parser matches + +0.9.6 / 2012-10-17 +================== + + * change: use `this` when `window` is undefined + * update to new component spec [juliangruber] + * fix emission of "data" events for compressed responses without encoding. Closes #125 + +0.9.5 / 2012-10-01 +================== + + * add field name to .attach() + * add text "parser" + * refactor isObject() + * remove wtf isFunction() helper + +0.9.4 / 2012-09-20 +================== + + * fix `Buffer` responses [TooTallNate] + * fix `res.type` when a "type" param is present [TooTallNate] + +0.9.3 / 2012-09-18 +================== + + * remove __GET__ `.send()` == `.query()` special-case (__API__ change !!!) + +0.9.2 / 2012-09-17 +================== + + * add `.aborted` prop + * add `.abort()`. Closes #115 + +0.9.1 / 2012-09-07 +================== + + * add `.forbidden` response property + * add component.json + * change emitter-component to 0.0.5 + * fix client-side tests + +0.9.0 / 2012-08-28 +================== + + * add `.timeout(ms)`. Closes #17 + +0.8.2 / 2012-08-28 +================== + + * fix pathname relative redirects. Closes #112 + +0.8.1 / 2012-08-21 +================== + + * fix redirects when schema is specified + +0.8.0 / 2012-08-19 +================== + + * add `res.buffered` flag + * add buffering of text/*, json and forms only by default. Closes #61 + * add `.buffer(false)` cancellation + * add cookie jar support [hunterloftis] + * add agent functionality [hunterloftis] + +0.7.0 / 2012-08-03 +================== + + * allow `query()` to be called after the internal `req` has been created [tootallnate] + +0.6.0 / 2012-07-17 +================== + + * add `res.send('foo=bar')` default of "application/x-www-form-urlencoded" + +0.5.1 / 2012-07-16 +================== + + * add "methods" dep + * add `.end()` arity check to node callbacks + * fix unzip support due to weird node internals + +0.5.0 / 2012-06-16 +================== + + * Added "Link" response header field parsing, exposing `res.links` + +0.4.3 / 2012-06-15 +================== + + * Added 303, 305 and 307 as redirect status codes [slaskis] + * Fixed passing an object as the url + +0.4.2 / 2012-06-02 +================== + + * Added component support + * Fixed redirect data + +0.4.1 / 2012-04-13 +================== + + * Added HTTP PATCH support + * Fixed: GET / HEAD when following redirects. Closes #86 + * Fixed Content-Length detection for multibyte chars + +0.4.0 / 2012-03-04 +================== + + * Added `.head()` method [browser]. Closes #78 + * Added `make test-cov` support + * Added multipart request support. Closes #11 + * Added all methods that node supports. Closes #71 + * Added "response" event providing a Response object. Closes #28 + * Added `.query(obj)`. Closes #59 + * Added `res.type` (browser). Closes #54 + * Changed: default `res.body` and `res.files` to {} + * Fixed: port existing query-string fix (browser). Closes #57 + +0.3.0 / 2012-01-24 +================== + + * Added deflate/gzip support [guillermo] + * Added `res.type` (Content-Type void of params) + * Added `res.statusCode` to mirror node + * Added `res.headers` to mirror node + * Changed: parsers take callbacks + * Fixed optional schema support. Closes #49 + +0.2.0 / 2012-01-05 +================== + + * Added url auth support + * Added `.auth(username, password)` + * Added basic auth support [node]. Closes #41 + * Added `make test-docs` + * Added guillermo's EventEmitter. Closes #16 + * Removed `Request#data()` for SS, renamed to `send()` + * Removed `Request#data()` from client, renamed to `send()` + * Fixed array support. [browser] + * Fixed array support. Closes #35 [node] + * Fixed `EventEmitter#emit()` + +0.1.3 / 2011-10-25 +================== + + * Added error to callback + * Bumped node dep for 0.5.x + +0.1.2 / 2011-09-24 +================== + + * Added markdown documentation + * Added `request(url[, fn])` support to the client + * Added `qs` dependency to package.json + * Added options for `Request#pipe()` + * Added support for `request(url, callback)` + * Added `request(url)` as shortcut for `request.get(url)` + * Added `Request#pipe(stream)` + * Added inherit from `Stream` + * Added multipart support + * Added ssl support (node) + * Removed Content-Length field from client + * Fixed buffering, `setEncoding()` to utf8 [reported by stagas] + * Fixed "end" event when piping + +0.1.1 / 2011-08-20 +================== + + * Added `res.redirect` flag (node) + * Added redirect support (node) + * Added `Request#redirects(n)` (node) + * Added `.set(object)` header field support + * Fixed `Content-Length` support + +0.1.0 / 2011-08-09 +================== + + * Added support for multiple calls to `.data()` + * Added support for `.get(uri, obj)` + * Added GET `.data()` querystring support + * Added IE{6,7,8} support [alexyoung] + +0.0.1 / 2011-08-05 +================== + + * Initial commit + diff --git a/node_modules/superagent/LICENSE b/node_modules/superagent/LICENSE new file mode 100644 index 0000000..1b188ba --- /dev/null +++ b/node_modules/superagent/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014-2016 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/superagent/Makefile b/node_modules/superagent/Makefile new file mode 100644 index 0000000..bac2be5 --- /dev/null +++ b/node_modules/superagent/Makefile @@ -0,0 +1,57 @@ + +NODETESTS ?= test/*.js test/node/*.js +BROWSERTESTS ?= test/*.js test/client/*.js +REPORTER = spec + +all: superagent.js + +test: + @if [ "x$(BROWSER)" = "x" ]; then make test-node; else make test-browser; fi + +test-node: + @NODE_ENV=test NODE_TLS_REJECT_UNAUTHORIZED=0 ./node_modules/.bin/mocha \ + --require should \ + --reporter $(REPORTER) \ + --timeout 5000 \ + --growl \ + $(NODETESTS) + +test-cov: lib-cov + SUPERAGENT_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html + +test-browser: + ./node_modules/.bin/zuul -- $(BROWSERTESTS) + +test-browser-local: + ./node_modules/.bin/zuul --local 4000 -- $(BROWSERTESTS) + +lib-cov: + jscoverage lib lib-cov + +superagent.js: lib/node/*.js lib/node/parsers/*.js + @./node_modules/.bin/browserify \ + --standalone superagent \ + --outfile superagent.js . + +test-server: + @node test/server + +docs: index.html test-docs + +index.html: docs/index.md + marked < $< \ + | cat docs/head.html - docs/tail.html \ + > $@ + +docclean: + rm -f index.html test.html + +test-docs: + make test REPORTER=doc \ + | cat docs/head.html - docs/tail.html \ + > test.html + +clean: + rm -fr superagent.js components + +.PHONY: test-cov test docs test-docs clean test-browser-local diff --git a/node_modules/superagent/Readme.md b/node_modules/superagent/Readme.md new file mode 100644 index 0000000..eed472d --- /dev/null +++ b/node_modules/superagent/Readme.md @@ -0,0 +1,116 @@ +# SuperAgent [![Build Status](https://travis-ci.org/visionmedia/superagent.svg?branch=master)](https://travis-ci.org/visionmedia/superagent) + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/shtylman-superagent.svg)](https://saucelabs.com/u/shtylman-superagent) + +SuperAgent is a small progressive __client-side__ HTTP request library, and __Node.js__ module with the same API, sporting many high-level HTTP client features. View the [docs](http://visionmedia.github.io/superagent/). + +![super agent](http://f.cl.ly/items/3d282n3A0h0Z0K2w0q2a/Screenshot.png) + +## Installation + +node: + +``` +$ npm install superagent +``` + +component: + +``` +$ component install visionmedia/superagent +``` + +Works with [browserify](https://github.com/substack/node-browserify) and should work with [webpack](https://github.com/visionmedia/superagent/wiki/Superagent-for-Webpack) + +```js +request + .post('/api/pet') + .send({ name: 'Manny', species: 'cat' }) + .set('X-API-Key', 'foobar') + .set('Accept', 'application/json') + .end(function(err, res){ + // Calling the end function will send the request + }); +``` + +## Supported browsers + +Tested browsers: + +- Latest Android +- Latest Firefox +- Latest Chrome +- IE9 through latest +- Latest iPhone +- Latest Safari + +Even though IE9 is supported, a polyfill `window.btoa` is needed to use basic auth. + +# Plugins + +Superagent is easily extended via plugins. + +```js +var nocache = require('superagent-no-cache'); +var request = require('superagent'); +var prefix = require('superagent-prefix')('/static'); + +request +.get('/some-url') +.use(prefix) // Prefixes *only* this request +.use(nocache) // Prevents caching of *only* this request +.end(function(err, res){ + // Do something +}); +``` + +Existing plugins: + * [superagent-no-cache](https://github.com/johntron/superagent-no-cache) - prevents caching by including Cache-Control header + * [superagent-prefix](https://github.com/johntron/superagent-prefix) - prefixes absolute URLs (useful in test environment) + * [superagent-suffix](https://github.com/timneutkens1/superagent-suffix) - suffix URLs with a given path + * [superagent-mock](https://github.com/M6Web/superagent-mock) - simulate HTTP calls by returning data fixtures based on the requested URL + * [superagent-mocker](https://github.com/shuvalov-anton/superagent-mocker) — simulate REST API + * [superagent-cache](https://github.com/jpodwys/superagent-cache) - superagent with built-in, flexible caching + * [superagent-jsonapify](https://github.com/alex94puchades/superagent-jsonapify) - A lightweight [json-api](http://jsonapi.org/format/) client addon for superagent + * [superagent-serializer](https://github.com/zzarcon/superagent-serializer) - Converts server payload into different cases + * [superagent-promise-plugin](https://github.com/jomaxx/superagent-promise-plugin) - Shims req.end to return a promise when executed with no callback. + * [superagent-use](https://github.com/koenpunt/superagent-use) - A client addon to apply plugins to all requests. + +Please prefix your plugin with `superagent-*` so that it can easily be found by others. + +For superagent extensions such as couchdb and oauth visit the [wiki](https://github.com/visionmedia/superagent/wiki). + +## Running node tests + +Install dependencies: + +```shell +$ npm install +``` +Run em! + +```shell +$ make test +``` + +## Running browser tests + +Install dependencies: + +```shell +$ npm install +``` + +Start the test runner: + +```shell +$ make test-browser-local +``` + +Visit `http://localhost:4000/__zuul` in your browser. + +Edit tests and refresh your browser. You do not have to restart the test runner. + +## License + +MIT diff --git a/node_modules/superagent/bower.json b/node_modules/superagent/bower.json new file mode 100644 index 0000000..d01423c --- /dev/null +++ b/node_modules/superagent/bower.json @@ -0,0 +1,4 @@ +{ + "name": "superagent", + "main": "lib/client.js" +} diff --git a/node_modules/superagent/component.json b/node_modules/superagent/component.json new file mode 100644 index 0000000..d9bd87f --- /dev/null +++ b/node_modules/superagent/component.json @@ -0,0 +1,21 @@ +{ + "name": "superagent", + "repo": "visionmedia/superagent", + "version": "1.8.2", + "description": "elegant & feature rich browser / node HTTP with a fluent API", + "keywords": [ + "http", + "ajax", + "request", + "agent" + ], + "scripts": [ + "lib/client.js" + ], + "main": "lib/client.js", + "dependencies": { + "component/emitter": "*", + "component/reduce": "*" + }, + "license": "MIT" +} diff --git a/node_modules/superagent/docs/head.html b/node_modules/superagent/docs/head.html new file mode 100644 index 0000000..4d3bc50 --- /dev/null +++ b/node_modules/superagent/docs/head.html @@ -0,0 +1,21 @@ + + + + SuperAgent - Ajax with less suck + + + + + + + + + +
diff --git a/node_modules/superagent/docs/highlight.js b/node_modules/superagent/docs/highlight.js new file mode 100644 index 0000000..b37eefb --- /dev/null +++ b/node_modules/superagent/docs/highlight.js @@ -0,0 +1,17 @@ + +$(function(){ + $('code').each(function(){ + $(this).html(highlight($(this).text())); + }); +}); + +function highlight(js) { + return js + .replace(//g, '>') + .replace(/('.*?')/gm, '$1') + .replace(/(\d+\.\d+)/gm, '$1') + .replace(/(\d+)/gm, '$1') + .replace(/\bnew *(\w+)/gm, 'new $1') + .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1') +} \ No newline at end of file diff --git a/node_modules/superagent/docs/images/bg.png b/node_modules/superagent/docs/images/bg.png new file mode 100644 index 0000000..ca3d267 Binary files /dev/null and b/node_modules/superagent/docs/images/bg.png differ diff --git a/node_modules/superagent/docs/index.md b/node_modules/superagent/docs/index.md new file mode 100644 index 0000000..3dc9843 --- /dev/null +++ b/node_modules/superagent/docs/index.md @@ -0,0 +1,448 @@ + +# SuperAgent + + Super Agent is light-weight progressive ajax API crafted for flexibility, readability, and a low learning curve after being frustrated with many of the existing request APIs. It also works with Node.js! + + request + .post('/api/pet') + .send({ name: 'Manny', species: 'cat' }) + .set('X-API-Key', 'foobar') + .set('Accept', 'application/json') + .end(function(err, res){ + if (err || !res.ok) { + alert('Oh no! error'); + } else { + alert('yay got ' + JSON.stringify(res.body)); + } + }); + +## Test documentation + + The following [test documentation](docs/test.html) was generated with [Mocha's](http://visionmedia.github.com/mocha) "doc" reporter, and directly reflects the test suite. This provides an additional source of documentation. + +## Request basics + + A request can be initiated by invoking the appropriate method on the `request` object, then calling `.end()` to send the request. For example a simple GET request: + + request + .get('/search') + .end(function(err, res){ + + }); + + A method string may also be passed: + + request('GET', '/search').end(callback); + + The __node__ client may also provide absolute urls: + + request + .get('http://example.com/search') + .end(function(err, res){ + + }); + + __DELETE__, __HEAD__, __POST__, __PUT__ and other __HTTP__ verbs may also be used, simply change the method name: + + request + .head('/favicon.ico') + .end(function(err, res){ + + }); + + __DELETE__ is a special-case, as it's a reserved word, so the method is named `.del()`: + + request + .del('/user/1') + .end(function(err, res){ + + }); + + The HTTP method defaults to __GET__, so if you wish, the following is valid: + + request('/search', function(err, res){ + + }); + +## Setting header fields + + Setting header fields is simple, invoke `.set()` with a field name and value: + + request + .get('/search') + .set('API-Key', 'foobar') + .set('Accept', 'application/json') + .end(callback); + + You may also pass an object to set several fields in a single call: + + request + .get('/search') + .set({ 'API-Key': 'foobar', Accept: 'application/json' }) + .end(callback); + +## GET requests + + The `.query()` method accepts objects, which when used with the __GET__ method will form a query-string. The following will produce the path `/search?query=Manny&range=1..5&order=desc`. + + request + .get('/search') + .query({ query: 'Manny' }) + .query({ range: '1..5' }) + .query({ order: 'desc' }) + .end(function(err, res){ + + }); + + Or as a single object: + + request + .get('/search') + .query({ query: 'Manny', range: '1..5', order: 'desc' }) + .end(function(err, res){ + + }); + + The `.query()` method accepts strings as well: + + request + .get('/querystring') + .query('search=Manny&range=1..5') + .end(function(err, res){ + + }); + + Or joined: + + request + .get('/querystring') + .query('search=Manny') + .query('range=1..5') + .end(function(err, res){ + + }); + +## HEAD requests + +You can also use the `.query()` method for HEAD requests. The following will produce the path `/users?email=joe@smith.com`. + + request + .head('/users') + .query({ email: 'joe@smith.com' }) + .end(function(err, res){ + + }); + +## POST / PUT requests + + A typical JSON __POST__ request might look a little like the following, where we set the Content-Type header field appropriately, and "write" some data, in this case just a JSON string. + + request.post('/user') + .set('Content-Type', 'application/json') + .send('{"name":"tj","pet":"tobi"}') + .end(callback) + + Since JSON is undoubtably the most common, it's the _default_! The following example is equivalent to the previous. + + request.post('/user') + .send({ name: 'tj', pet: 'tobi' }) + .end(callback) + + Or using multiple `.send()` calls: + + request.post('/user') + .send({ name: 'tj' }) + .send({ pet: 'tobi' }) + .end(callback) + + By default sending strings will set the Content-Type to `application/x-www-form-urlencoded`, + multiple calls will be concatenated with `&`, here resulting in `name=tj&pet=tobi`: + + request.post('/user') + .send('name=tj') + .send('pet=tobi') + .end(callback); + + SuperAgent formats are extensible, however by default "json" and "form" are supported. To send the data as `application/x-www-form-urlencoded` simply invoke `.type()` with "form", where the default is "json". This request will POST the body "name=tj&pet=tobi". + + request.post('/user') + .type('form') + .send({ name: 'tj' }) + .send({ pet: 'tobi' }) + .end(callback) + + Note: "form" is aliased as "form-data" and "urlencoded" for backwards compat. + +## Setting the Content-Type + + The obvious solution is to use the `.set()` method: + + request.post('/user') + .set('Content-Type', 'application/json') + + As a short-hand the `.type()` method is also available, accepting + the canonicalized MIME type name complete with type/subtype, or + simply the extension name such as "xml", "json", "png", etc: + + request.post('/user') + .type('application/json') + + request.post('/user') + .type('json') + + request.post('/user') + .type('png') + +## Setting Accept + +In a similar fashion to the `.type()` method it is also possible to set the Accept header via the short hand method `.accept()`. Which references `request.types` as well allowing you to specify either the full canonicalized MIME type name as type/subtype, or the extension suffix form as "xml", "json", "png", etc for convenience: + + request.get('/user') + .accept('application/json') + + request.get('/user') + .accept('json') + + request.post('/user') + .accept('png') + +## Query strings + + `res.query(obj)` is a method which may be used to build up a query-string. For example populating `?format=json&dest=/login` on a __POST__: + + request + .post('/') + .query({ format: 'json' }) + .query({ dest: '/login' }) + .send({ post: 'data', here: 'wahoo' }) + .end(callback); + +## Parsing response bodies + + Super Agent will parse known response-body data for you, currently supporting _application/x-www-form-urlencoded_, _application/json_, and _multipart/form-data_. + +### JSON / Urlencoded + + The property `res.body` is the parsed object, for example if a request responded with the JSON string '{"user":{"name":"tobi"}}', `res.body.user.name` would be "tobi". Likewise the x-www-form-urlencoded value of "user[name]=tobi" would yield the same result. + +### Multipart + + The Node client supports _multipart/form-data_ via the [Formidable](https://github.com/felixge/node-formidable) module. When parsing multipart responses, the object `res.files` is also available to you. Suppose for example a request responds with the following multipart body: + + --whoop + Content-Disposition: attachment; name="image"; filename="tobi.png" + Content-Type: image/png + + ... data here ... + --whoop + Content-Disposition: form-data; name="name" + Content-Type: text/plain + + Tobi + --whoop-- + + You would have the values `res.body.name` provided as "Tobi", and `res.files.image` as a `File` object containing the path on disk, filename, and other properties. + +## Response properties + + Many helpful flags and properties are set on the `Response` object, ranging from the response text, parsed response body, header fields, status flags and more. + +### Response text + + The `res.text` property contains the unparsed response body string. This + property is always present for the client API, and only when the mime type + matches "text/*", "*/json", or "x-www-form-urlencoding" by default for node. The + reasoning is to conserve memory, as buffering text of large bodies such as multipart files or images is extremely inefficient. + + To force buffering see the "Buffering responses" section. + +### Response body + + Much like SuperAgent can auto-serialize request data, it can also automatically parse it. When a parser is defined for the Content-Type, it is parsed, which by default includes "application/json" and "application/x-www-form-urlencoded". The parsed object is then available via `res.body`. + +### Response header fields + + The `res.header` contains an object of parsed header fields, lowercasing field names much like node does. For example `res.header['content-length']`. + +### Response Content-Type + + The Content-Type response header is special-cased, providing `res.type`, which is void of the charset (if any). For example the Content-Type of "text/html; charset=utf8" will provide "text/html" as `res.type`, and the `res.charset` property would then contain "utf8". + +### Response status + + The response status flags help determine if the request was a success, among other useful information, making SuperAgent ideal for interacting with RESTful web services. These flags are currently defined as: + + var type = status / 100 | 0; + + // status / class + res.status = status; + res.statusType = type; + + // basics + res.info = 1 == type; + res.ok = 2 == type; + res.clientError = 4 == type; + res.serverError = 5 == type; + res.error = 4 == type || 5 == type; + + // sugar + res.accepted = 202 == status; + res.noContent = 204 == status || 1223 == status; + res.badRequest = 400 == status; + res.unauthorized = 401 == status; + res.notAcceptable = 406 == status; + res.notFound = 404 == status; + res.forbidden = 403 == status; + +## Aborting requests + + To abort requests simply invoke the `req.abort()` method. + +## Request timeouts + + A timeout can be applied by invoking `req.timeout(ms)`, after which an error + will be triggered. To differentiate between other errors the `err.timeout` property + is set to the `ms` value. __NOTE__ that this is a timeout applied to the request + and all subsequent redirects, not per request. + +## Basic authentication + + Basic auth is currently provided by the _node_ client in two forms, first via the URL as "user:pass": + + request.get('http://tobi:learnboost@local').end(callback); + + As well as via the `.auth()` method: + + request + .get('http://local') + .auth('tobi', 'learnboost') + .end(callback); + +## Following redirects + + By default up to 5 redirects will be followed, however you may specify this with the `res.redirects(n)` method: + + request + .get('/some.png') + .redirects(2) + .end(callback); + +## Piping data + + The Node client allows you to pipe data to and from the request. For example piping a file's contents as the request: + + var request = require('superagent') + , fs = require('fs'); + + var stream = fs.createReadStream('path/to/my.json'); + var req = request.post('/somewhere'); + req.type('json'); + stream.pipe(req); + + Or piping the response to a file: + + var request = require('superagent') + , fs = require('fs'); + + var stream = fs.createWriteStream('path/to/my.json'); + var req = request.get('/some.json'); + req.pipe(stream); + +## Multipart requests + + Super Agent is also great for _building_ multipart requests for which it provides methods `.attach()` and `.field()`. + +### Attaching files + + As mentioned a higher-level API is also provided, in the form of `.attach(name, [path], [filename])` and `.field(name, value)`. Attaching several files is simple, you can also provide a custom filename for the attachment, otherwise the basename of the attached file is used. + + request + .post('/upload') + .attach('avatar', 'path/to/tobi.png', 'user.png') + .attach('image', 'path/to/loki.png') + .attach('file', 'path/to/jane.png') + .end(callback); + +### Field values + + Much like form fields in HTML, you can set field values with the `.field(name, value)` method. Suppose you want to upload a few images with your name and email, your request might look something like this: + + request + .post('/upload') + .field('user[name]', 'Tobi') + .field('user[email]', 'tobi@learnboost.com') + .attach('image', 'path/to/tobi.png') + .end(callback); + +## Compression + + The node client supports compressed responses, best of all, you don't have to do anything! It just works. + +## Buffering responses + + To force buffering of response bodies as `res.text` you may invoke `req.buffer()`. To undo the default of buffering for text responses such + as "text/plain", "text/html" etc you may invoke `req.buffer(false)`. + + When buffered the `res.buffered` flag is provided, you may use this to + handle both buffered and unbuffered responses in the same callback. + +## CORS + + The `.withCredentials()` method enables the ability to send cookies + from the origin, however only when "Access-Control-Allow-Origin" is + _not_ a wildcard ("*"), and "Access-Control-Allow-Credentials" is "true". + + request + .get('http://localhost:4001/') + .withCredentials() + .end(function(err, res){ + assert(200 == res.status); + assert('tobi' == res.text); + next(); + }) + +## Error handling + +Your callback function will always be passed two arguments: error and response. If no error occurred, the first argument will be null: + + request + .post('/upload') + .attach('image', 'path/to/tobi.png') + .end(function(err, res){ + + }); + + An "error" event is also emitted, with you can listen for: + + request + .post('/upload') + .attach('image', 'path/to/tobi.png') + .on('error', handle) + .end(function(err, res){ + + }); + + Note that a 4xx or 5xx response with super agent **are** considered an error by default. For example if you get a 500 or 403 response, this status information will be available via `err.status`. Errors from such responses also contain an `err.response` field with all of the properties mentioned in "Response properties". The library behaves in this way to handle the common case of wanting success responses and treating HTTP error status codes as errors while still allowing for custom logic around specific error conditions. + + Network failures, timeouts, and other errors that produce no response will contain no `err.status` or `err.response` fields. + + If you wish to handle 404 or other HTTP error responses, you can query the `err.status` property. + When an HTTP error occurs (4xx or 5xx response) the `res.error` property is an `Error` object, + this allows you to perform checks such as: + + if (err && err.status === 404) { + alert('oh no ' + res.body.message); + } + else if (err) { + // all other error types we handle generically + } + +## Generator support + +Superagent now supports easier control flow using generators. By using a generator control flow +like [co](https://github.com/tj/co) or a web framework like [koa](https://github.com/koajs/koa), +you can `yield` on any superagent method: + + var res = yield request + .get('http://local') + .auth('tobi', 'learnboost') diff --git a/node_modules/superagent/docs/jquery-ui.min.js b/node_modules/superagent/docs/jquery-ui.min.js new file mode 100644 index 0000000..932f867 --- /dev/null +++ b/node_modules/superagent/docs/jquery-ui.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.11.4 - 2015-11-20 +* http://jqueryui.com +* Includes: widget.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t=0,i=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var s,n,a=i.call(arguments,1),o=0,r=a.length;r>o;o++)for(s in a[o])n=a[o][s],a[o].hasOwnProperty(s)&&void 0!==n&&(t[s]=e.isPlainObject(n)?e.isPlainObject(t[s])?e.widget.extend({},t[s],n):e.widget.extend({},n):n);return t},e.widget.bridge=function(t,s){var n=s.prototype.widgetFullName||t;e.fn[t]=function(a){var o="string"==typeof a,r=i.call(arguments,1),h=this;return o?this.each(function(){var i,s=e.data(this,n);return"instance"===a?(h=s,!1):s?e.isFunction(s[a])&&"_"!==a.charAt(0)?(i=s[a].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+a+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+a+"'")}):(r.length&&(a=e.widget.extend.apply(null,[a].concat(r))),this.each(function(){var t=e.data(this,n);t?(t.option(a||{}),t._init&&t._init()):e.data(this,n,new s(a,this))})),h}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{disabled:!1,create:null},_createWidget:function(i,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=t++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget}); \ No newline at end of file diff --git a/node_modules/superagent/docs/jquery.js b/node_modules/superagent/docs/jquery.js new file mode 100644 index 0000000..d2424e6 --- /dev/null +++ b/node_modules/superagent/docs/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7 jquery.com | jquery.org/license */ +(function(a,b){function cA(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cx(a){if(!cm[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"":"")+""),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="
"+""+"
";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&& +(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after" +,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/node_modules/superagent/docs/jquery.tocify.min.js b/node_modules/superagent/docs/jquery.tocify.min.js new file mode 100755 index 0000000..0fc0442 --- /dev/null +++ b/node_modules/superagent/docs/jquery.tocify.min.js @@ -0,0 +1,4 @@ +/*! jquery.tocify - v1.9.0 - 2013-10-01 +* http://gregfranko.com/jquery.tocify.js/ +* Copyright (c) 2013 Greg Franko; Licensed MIT*/ +(function(e){"use strict";e(window.jQuery,window,document)})(function(e,t,s){"use strict";var i="tocify",o="tocify-focus",n="tocify-hover",a="tocify-hide",l="tocify-header",h="."+l,r="tocify-subheader",d="."+r,c="tocify-item",f="."+c,u="tocify-extend-page",p="."+u;e.widget("toc.tocify",{version:"1.9.0",options:{context:"body",ignoreSelector:null,selectors:"h1, h2, h3",showAndHide:!0,showEffect:"slideDown",showEffectSpeed:"medium",hideEffect:"slideUp",hideEffectSpeed:"medium",smoothScroll:!0,smoothScrollSpeed:"medium",scrollTo:0,showAndHideOnScroll:!0,highlightOnScroll:!0,highlightOffset:40,theme:"bootstrap",extendPage:!0,extendPageOffset:100,history:!0,scrollHistory:!1,hashGenerator:"compact",highlightDefault:!0},_create:function(){var s=this;s.extendPageScroll=!0,s.items=[],s._generateToc(),s._addCSSClasses(),s.webkit=function(){for(var e in t)if(e&&-1!==e.toLowerCase().indexOf("webkit"))return!0;return!1}(),s._setEventHandlers(),e(t).load(function(){s._setActiveElement(!0),e("html, body").promise().done(function(){setTimeout(function(){s.extendPageScroll=!1},0)})})},_generateToc:function(){var t,s,o=this,n=o.options.ignoreSelector;return t=-1!==this.options.selectors.indexOf(",")?e(this.options.context).find(this.options.selectors.replace(/ /g,"").substr(0,this.options.selectors.indexOf(","))):e(this.options.context).find(this.options.selectors.replace(/ /g,"")),t.length?(o.element.addClass(i),t.each(function(t){e(this).is(n)||(s=e("
    ",{id:l+t,"class":l}).append(o._nestElements(e(this),t)),o.element.append(s),e(this).nextUntil(this.nodeName.toLowerCase()).each(function(){0===e(this).find(o.options.selectors).length?e(this).filter(o.options.selectors).each(function(){e(this).is(n)||o._appendSubheaders.call(this,o,s)}):e(this).find(o.options.selectors).each(function(){e(this).is(n)||o._appendSubheaders.call(this,o,s)})}))}),undefined):(o.element.addClass(a),undefined)},_setActiveElement:function(e){var s=this,i=t.location.hash.substring(1),o=s.element.find('li[data-unique="'+i+'"]');return i.length?(s.element.find("."+s.focusClass).removeClass(s.focusClass),o.addClass(s.focusClass),s.options.showAndHide&&o.click()):(s.element.find("."+s.focusClass).removeClass(s.focusClass),!i.length&&e&&s.options.highlightDefault&&s.element.find(f).first().addClass(s.focusClass)),s},_nestElements:function(t,s){var i,o,n;return i=e.grep(this.items,function(e){return e===t.text()}),i.length?this.items.push(t.text()+s):this.items.push(t.text()),n=this._generateHashValue(i,t,s),o=e("
  • ",{"class":c,"data-unique":n}).append(e("",{text:t.text()})),t.before(e("
    ",{name:n,"data-unique":n})),o},_generateHashValue:function(e,t,s){var i="",o=this.options.hashGenerator;if("pretty"===o){for(i=t.text().toLowerCase().replace(/\s/g,"-");i.indexOf("--")>-1;)i=i.replace(/--/g,"-");for(;i.indexOf(":-")>-1;)i=i.replace(/:-/g,"-")}else i="function"==typeof o?o(t.text(),t):t.text().replace(/\s/g,"");return e.length&&(i+=""+s),i},_appendSubheaders:function(t,s){var i=e(this).index(t.options.selectors),o=e(t.options.selectors).eq(i-1),n=+e(this).prop("tagName").charAt(1),a=+o.prop("tagName").charAt(1);a>n?t.element.find(d+"[data-tag="+n+"]").last().append(t._nestElements(e(this),i)):n===a?s.find(f).last().after(t._nestElements(e(this),i)):s.find(f).last().after(e("
      ",{"class":r,"data-tag":n})).next(d).append(t._nestElements(e(this),i))},_setEventHandlers:function(){var i=this;this.element.on("click.tocify","li",function(){if(i.options.history&&(t.location.hash=e(this).attr("data-unique")),i.element.find("."+i.focusClass).removeClass(i.focusClass),e(this).addClass(i.focusClass),i.options.showAndHide){var s=e('li[data-unique="'+e(this).attr("data-unique")+'"]');i._triggerShow(s)}i._scrollTo(e(this))}),this.element.find("li").on({"mouseenter.tocify":function(){e(this).addClass(i.hoverClass),e(this).css("cursor","pointer")},"mouseleave.tocify":function(){"bootstrap"!==i.options.theme&&e(this).removeClass(i.hoverClass)}}),(i.options.extendPage||i.options.highlightOnScroll||i.options.scrollHistory||i.options.showAndHideOnScroll)&&e(t).on("scroll.tocify",function(){e("html, body").promise().done(function(){var o,n,a,l,h=e(t).scrollTop(),r=e(t).height(),d=e(s).height(),c=e("body")[0].scrollHeight;if(i.options.extendPage&&(i.webkit&&h>=c-r-i.options.extendPageOffset||!i.webkit&&r+h>d-i.options.extendPageOffset)&&!e(p).length){if(n=e('div[data-unique="'+e(f).last().attr("data-unique")+'"]'),!n.length)return;a=n.offset().top,e(i.options.context).append(e("
      ",{"class":u,height:Math.abs(a-h)+"px","data-unique":u})),i.extendPageScroll&&(l=i.element.find("li.active"),i._scrollTo(e('div[data-unique="'+l.attr("data-unique")+'"]')))}setTimeout(function(){var s,n=null,a=null,l=e(i.options.context).find("div[data-unique]");l.each(function(t){var s=Math.abs((e(this).next().length?e(this).next():e(this)).offset().top-h-i.options.highlightOffset);return null==n||n>s?(n=s,a=t,undefined):!1}),s=e(l[a]).attr("data-unique"),o=e('li[data-unique="'+s+'"]'),i.options.highlightOnScroll&&o.length&&(i.element.find("."+i.focusClass).removeClass(i.focusClass),o.addClass(i.focusClass)),i.options.scrollHistory&&t.location.hash!=="#"+s&&t.location.replace("#"+s),i.options.showAndHideOnScroll&&i.options.showAndHide&&i._triggerShow(o,!0)},0)})})},show:function(t){var s=this;if(!t.is(":visible"))switch(t.find(d).length||t.parent().is(h)||t.parent().is(":visible")?t.children(d).length||t.parent().is(h)||(t=t.closest(d)):t=t.parents(d).add(t),s.options.showEffect){case"none":t.show();break;case"show":t.show(s.options.showEffectSpeed);break;case"slideDown":t.slideDown(s.options.showEffectSpeed);break;case"fadeIn":t.fadeIn(s.options.showEffectSpeed);break;default:t.show()}return t.parent().is(h)?s.hide(e(d).not(t)):s.hide(e(d).not(t.closest(h).find(d).not(t.siblings()))),s},hide:function(e){var t=this;switch(t.options.hideEffect){case"none":e.hide();break;case"hide":e.hide(t.options.hideEffectSpeed);break;case"slideUp":e.slideUp(t.options.hideEffectSpeed);break;case"fadeOut":e.fadeOut(t.options.hideEffectSpeed);break;default:e.hide()}return t},_triggerShow:function(e,t){var s=this;return e.parent().is(h)||e.next().is(d)?s.show(e.next(d),t):e.parent().is(d)&&s.show(e.parent(),t),s},_addCSSClasses:function(){return"jqueryui"===this.options.theme?(this.focusClass="ui-state-default",this.hoverClass="ui-state-hover",this.element.addClass("ui-widget").find(".toc-title").addClass("ui-widget-header").end().find("li").addClass("ui-widget-content")):"bootstrap"===this.options.theme?(this.element.find(h+","+d).addClass("nav nav-list"),this.focusClass="active"):(this.focusClass=o,this.hoverClass=n),this},setOption:function(){e.Widget.prototype._setOption.apply(this,arguments)},setOptions:function(){e.Widget.prototype._setOptions.apply(this,arguments)},_scrollTo:function(t){var s=this,i=s.options.smoothScroll||0,o=s.options.scrollTo,n=e('div[data-unique="'+t.attr("data-unique")+'"]');return n.length?(e("html, body").promise().done(function(){e("html, body").animate({scrollTop:n.offset().top-(e.isFunction(o)?o.call():o)+"px"},{duration:i})}),s):s}})}); \ No newline at end of file diff --git a/node_modules/superagent/docs/style.css b/node_modules/superagent/docs/style.css new file mode 100644 index 0000000..9ca0e5c --- /dev/null +++ b/node_modules/superagent/docs/style.css @@ -0,0 +1,81 @@ +body { + padding: 40px 80px; + font: 14px/1.5 "Helvetica Neue", Helvetica, sans-serif; + background: #181818 url(images/bg.png); + text-align: center; +} + +#content { + margin: 0 auto; + padding: 10px 40px; + text-align: left; + background: white; + width: 50%; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: 0 2px 5px 0 black; +} + +#menu { + font-size: 13px; + margin: 0; + padding: 0; + text-align: left; + position: fixed; + top: 15px; + left: 15px; +} + +#menu ul { + margin: 0; + padding: 0; +} + +#menu li { + list-style: none; +} + +#menu a { + color: rgba(255,255,255,.5); + text-decoration: none; +} + +#menu a:hover { + color: white; +} + +#menu .active a { + color: white; +} + +pre { + padding: 10px; +} + +code { + font: 12px/1 monaco, monospace; +} + +p code { + border: 1px solid #ECEA75; + padding: 1px 3px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + background: #FDFCD1; +} + +pre { + padding: 20px 25px; + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 0 5px #eee; + -moz-box-shadow: inset 0 0 5px #eee; + box-shadow: inset 0 0 5px #eee; +} + +code .comment { color: #ddd } +code .init { color: #2F6FAD } +code .string { color: #5890AD } +code .keyword { color: #8A6343 } +code .number { color: #2F6FAD } \ No newline at end of file diff --git a/node_modules/superagent/docs/tail.html b/node_modules/superagent/docs/tail.html new file mode 100644 index 0000000..09994c9 --- /dev/null +++ b/node_modules/superagent/docs/tail.html @@ -0,0 +1,4 @@ +
      +
      Fork me on GitHub + + \ No newline at end of file diff --git a/node_modules/superagent/docs/test.html b/node_modules/superagent/docs/test.html new file mode 100644 index 0000000..3dff111 --- /dev/null +++ b/node_modules/superagent/docs/test.html @@ -0,0 +1,2082 @@ + + + + SuperAgent - Ajax with less suck + + + + + + + + + +
      +

      request

      +
      +
      +

      with a callback

      +
      +
      should invoke .end()
      +
      request
      +.get(uri + '/login', function(err, res){
      +  assert(res.status == 200);
      +  done();
      +})
      +
      +
      +
      +

      .end()

      +
      +
      should issue a request
      +
      request
      +.get(uri + '/login')
      +.end(function(err, res){
      +  assert(res.status == 200);
      +  done();
      +});
      +
      +
      +
      +

      res.error

      +
      +
      should should be an Error object
      +
      request
      +.get(uri + '/error')
      +.end(function(err, res){
      +  if (NODE) {
      +    res.error.message.should.equal('cannot GET /error (500)');
      +  }
      +  else {
      +    res.error.message.should.equal('cannot GET ' + uri + '/error (500)');
      +  }
      +  assert(res.error.status === 500);
      +  assert(err, 'should have an error for 500');
      +  assert.equal(err.message, 'Internal Server Error');
      +  done();
      +});
      +
      +
      +
      +

      res.header

      +
      +
      should be an object
      +
      request
      +.get(uri + '/login')
      +.end(function(err, res){
      +  assert('Express' == res.header['x-powered-by']);
      +  done();
      +});
      +
      +
      +
      +

      res.charset

      +
      +
      should be set when present
      +
      request
      +.get(uri + '/login')
      +.end(function(err, res){
      +  res.charset.should.equal('utf-8');
      +  done();
      +});
      +
      +
      +
      +

      res.statusType

      +
      +
      should provide the first digit
      +
      request
      +.get(uri + '/login')
      +.end(function(err, res){
      +  assert(!err, 'should not have an error for success responses');
      +  assert(200 == res.status);
      +  assert(2 == res.statusType);
      +  done();
      +});
      +
      +
      +
      +

      res.type

      +
      +
      should provide the mime-type void of params
      +
      request
      +.get(uri + '/login')
      +.end(function(err, res){
      +  res.type.should.equal('text/html');
      +  res.charset.should.equal('utf-8');
      +  done();
      +});
      +
      +
      +
      +

      req.set(field, val)

      +
      +
      should set the header field
      +
      request
      +.post(uri + '/echo')
      +.set('X-Foo', 'bar')
      +.set('X-Bar', 'baz')
      +.end(function(err, res){
      +  assert('bar' == res.header['x-foo']);
      +  assert('baz' == res.header['x-bar']);
      +  done();
      +})
      +
      +
      +
      +

      req.set(obj)

      +
      +
      should set the header fields
      +
      request
      +.post(uri + '/echo')
      +.set({ 'X-Foo': 'bar', 'X-Bar': 'baz' })
      +.end(function(err, res){
      +  assert('bar' == res.header['x-foo']);
      +  assert('baz' == res.header['x-bar']);
      +  done();
      +})
      +
      +
      +
      +

      req.type(str)

      +
      +
      should set the Content-Type
      +
      request
      +.post(uri + '/echo')
      +.type('text/x-foo')
      +.end(function(err, res){
      +  res.header['content-type'].should.equal('text/x-foo');
      +  done();
      +});
      +
      should map "json"
      +
      request
      +.post(uri + '/echo')
      +.type('json')
      +.send('{"a": 1}')
      +.end(function(err, res){
      +  res.should.be.json;
      +  done();
      +});
      +
      should map "html"
      +
      request
      +.post(uri + '/echo')
      +.type('html')
      +.end(function(err, res){
      +  res.header['content-type'].should.equal('text/html');
      +  done();
      +});
      +
      +
      +
      +

      req.accept(str)

      +
      +
      should set Accept
      +
      request
      +.get(uri + '/echo')
      +.accept('text/x-foo')
      +.end(function(err, res){
      +   res.header['accept'].should.equal('text/x-foo');
      +   done();
      +});
      +
      should map "json"
      +
      request
      +.get(uri + '/echo')
      +.accept('json')
      +.end(function(err, res){
      +  res.header['accept'].should.equal('application/json');
      +  done();
      +});
      +
      should map "xml"
      +
      request
      +.get(uri + '/echo')
      +.accept('xml')
      +.end(function(err, res){
      +  res.header['accept'].should.equal('application/xml');
      +  done();
      +});
      +
      should map "html"
      +
      request
      +.get(uri + '/echo')
      +.accept('html')
      +.end(function(err, res){
      +  res.header['accept'].should.equal('text/html');
      +  done();
      +});
      +
      +
      +
      +

      req.send(str)

      +
      +
      should write the string
      +
      request
      +.post(uri + '/echo')
      +.type('json')
      +.send('{"name":"tobi"}')
      +.end(function(err, res){
      +  res.text.should.equal('{"name":"tobi"}');
      +  done();
      +});
      +
      +
      +
      +

      req.send(Object)

      +
      +
      should default to json
      +
      request
      +.post(uri + '/echo')
      +.send({ name: 'tobi' })
      +.end(function(err, res){
      +  res.should.be.json
      +  res.text.should.equal('{"name":"tobi"}');
      +  done();
      +});
      +
      +

      when called several times

      +
      +
      should merge the objects
      +
      request
      +.post(uri + '/echo')
      +.send({ name: 'tobi' })
      +.send({ age: 1 })
      +.end(function(err, res){
      +  res.should.be.json
      +  if (NODE) {
      +    res.buffered.should.be.true;
      +  }
      +  res.text.should.equal('{"name":"tobi","age":1}');
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      .end(fn)

      +
      +
      should check arity
      +
      request
      +.post(uri + '/echo')
      +.send({ name: 'tobi' })
      +.end(function(err, res){
      +  assert(null == err);
      +  res.text.should.equal('{"name":"tobi"}');
      +  done();
      +});
      +
      should emit request
      +
      var req = request.post(uri + '/echo');
      +req.on('request', function(request){
      +  assert(req == request);
      +  done();
      +});
      +req.end();
      +
      should emit response
      +
      request
      +.post(uri + '/echo')
      +.send({ name: 'tobi' })
      +.on('response', function(res){
      +  res.text.should.equal('{"name":"tobi"}');
      +  done();
      +})
      +.end();
      +
      +
      +
      +

      .then(fulfill, reject)

      +
      +
      should support successful fulfills with .then(fulfill)
      +
      request
      +.post(uri + '/echo')
      +.send({ name: 'tobi' })
      +.then(function(res) {
      +  res.text.should.equal('{"name":"tobi"}');
      +  done();
      +})
      +
      should reject an error with .then(null, reject)
      +
      request
      +.get(uri + '/error')
      +.then(null, function(err) {
      +  assert(err.status == 500);
      +  assert(err.response.text == 'boom');
      +  done();
      +})
      +
      +
      +
      +

      .abort()

      +
      +
      should abort the request
      +
      var req = request
      +.get(uri + '/delay/3000')
      +.end(function(err, res){
      +  assert(false, 'should not complete the request');
      +});
      +req.on('abort', done);
      +setTimeout(function() {
      +  req.abort();
      +}, 1000);
      +
      +
      +
      +
      +
      +

      request

      +
      +
      +

      persistent agent

      +
      +
      should gain a session on POST
      +
      agent3
      +  .post('http://localhost:4000/signin')
      +  .end(function(err, res) {
      +    should.not.exist(err);
      +    res.should.have.status(200);
      +    should.not.exist(res.headers['set-cookie']);
      +    res.text.should.include('dashboard');
      +    done();
      +  });
      +
      should start with empty session (set cookies)
      +
      agent1
      +  .get('http://localhost:4000/dashboard')
      +  .end(function(err, res) {
      +    should.exist(err);
      +    res.should.have.status(401);
      +    should.exist(res.headers['set-cookie']);
      +    done();
      +  });
      +
      should gain a session (cookies already set)
      +
      agent1
      +  .post('http://localhost:4000/signin')
      +  .end(function(err, res) {
      +    should.not.exist(err);
      +    res.should.have.status(200);
      +    should.not.exist(res.headers['set-cookie']);
      +    res.text.should.include('dashboard');
      +    done();
      +  });
      +
      should persist cookies across requests
      +
      agent1
      +  .get('http://localhost:4000/dashboard')
      +  .end(function(err, res) {
      +    should.not.exist(err);
      +    res.should.have.status(200);
      +    done();
      +  });
      +
      should have the cookie set in the end callback
      +
      agent4
      +  .post('http://localhost:4000/setcookie')
      +  .end(function(err, res) {
      +    agent4
      +      .get('http://localhost:4000/getcookie')
      +      .end(function(err, res) {
      +        should.not.exist(err);
      +        res.should.have.status(200);
      +        assert(res.text === 'jar');
      +        done();
      +      });
      +  });
      +
      should not share cookies
      +
      agent2
      +  .get('http://localhost:4000/dashboard')
      +  .end(function(err, res) {
      +    should.exist(err);
      +    res.should.have.status(401);
      +    done();
      +  });
      +
      should not lose cookies between agents
      +
      agent1
      +  .get('http://localhost:4000/dashboard')
      +  .end(function(err, res) {
      +    should.not.exist(err);
      +    res.should.have.status(200);
      +    done();
      +  });
      +
      should be able to follow redirects
      +
      agent1
      +  .get('http://localhost:4000/')
      +  .end(function(err, res) {
      +    should.not.exist(err);
      +    res.should.have.status(200);
      +    res.text.should.include('dashboard');
      +    done();
      +  });
      +
      should be able to post redirects
      +
      agent1
      +  .post('http://localhost:4000/redirect')
      +  .send({ foo: 'bar', baz: 'blaaah' })
      +  .end(function(err, res) {
      +    should.not.exist(err);
      +    res.should.have.status(200);
      +    res.text.should.include('simple');
      +    res.redirects.should.eql(['http://localhost:4000/simple']);
      +    done();
      +  });
      +
      should be able to limit redirects
      +
      agent1
      +  .get('http://localhost:4000/')
      +  .redirects(0)
      +  .end(function(err, res) {
      +    should.exist(err);
      +    res.should.have.status(302);
      +    res.redirects.should.eql([]);
      +    res.header.location.should.equal('/dashboard');
      +    done();
      +  });
      +
      should be able to create a new session (clear cookie)
      +
      agent1
      +  .post('http://localhost:4000/signout')
      +  .end(function(err, res) {
      +    should.not.exist(err);
      +    res.should.have.status(200);
      +    should.exist(res.headers['set-cookie']);
      +    done();
      +  });
      +
      should regenerate with an empty session
      +
      agent1
      +  .get('http://localhost:4000/dashboard')
      +  .end(function(err, res) {
      +    should.exist(err);
      +    res.should.have.status(401);
      +    should.not.exist(res.headers['set-cookie']);
      +    done();
      +  });
      +
      +
      +
      +
      +
      +

      Basic auth

      +
      +
      +

      when credentials are present in url

      +
      +
      should set Authorization
      +
      request
      +.get('http://tobi:learnboost@localhost:3010')
      +.end(function(err, res){
      +  res.status.should.equal(200);
      +  done();
      +});
      +
      +
      +
      +

      req.auth(user, pass)

      +
      +
      should set Authorization
      +
      request
      +.get('http://localhost:3010')
      +.auth('tobi', 'learnboost')
      +.end(function(err, res){
      +  res.status.should.equal(200);
      +  done();
      +});
      +
      +
      +
      +

      req.auth(user + ":" + pass)

      +
      +
      should set authorization
      +
      request
      +.get('http://localhost:3010/again')
      +.auth('tobi')
      +.end(function(err, res){
      +  res.status.should.eql(200);
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      [node] request

      +
      +
      +

      res.statusCode

      +
      +
      should set statusCode
      +
      request
      +.get('http://localhost:5000/login', function(err, res){
      +  assert(res.statusCode === 200);
      +  done();
      +})
      +
      +
      +
      +

      with an object

      +
      +
      should format the url
      +
      request
      +.get(url.parse('http://localhost:5000/login'))
      +.end(function(err, res){
      +  assert(res.ok);
      +  done();
      +})
      +
      +
      +
      +

      without a schema

      +
      +
      should default to http
      +
      request
      +.get('localhost:5000/login')
      +.end(function(err, res){
      +  assert(res.status == 200);
      +  done();
      +})
      +
      +
      +
      +

      req.toJSON()

      +
      +
      should describe the request
      +
      request
      +.post(':5000/echo')
      +.send({ foo: 'baz' })
      +.end(function(err, res){
      +  var obj = res.request.toJSON();
      +  assert('POST' == obj.method);
      +  assert(':5000/echo' == obj.url);
      +  assert('baz' == obj.data.foo);
      +  done();
      +});
      +
      +
      +
      +

      should allow the send shorthand

      +
      +
      with callback in the method call
      +
      request
      +.get('http://localhost:5000/login', function(err, res) {
      +    assert(res.status == 200);
      +    done();
      +});
      +
      with data in the method call
      +
      request
      +.post('http://localhost:5000/echo', { foo: 'bar' })
      +.end(function(err, res) {
      +  assert('{"foo":"bar"}' == res.text);
      +  done();
      +});
      +
      with callback and data in the method call
      +
      request
      +.post('http://localhost:5000/echo', { foo: 'bar' }, function(err, res) {
      +  assert('{"foo":"bar"}' == res.text);
      +  done();
      +});
      +
      +
      +
      +

      res.toJSON()

      +
      +
      should describe the response
      +
      request
      +.post('http://localhost:5000/echo')
      +.send({ foo: 'baz' })
      +.end(function(err, res){
      +  var obj = res.toJSON();
      +  assert('object' == typeof obj.header);
      +  assert('object' == typeof obj.req);
      +  assert(200 == obj.status);
      +  assert('{"foo":"baz"}' == obj.text);
      +  done();
      +});
      +
      +
      +
      +

      res.links

      +
      +
      should default to an empty object
      +
      request
      +.get('http://localhost:5000/login')
      +.end(function(err, res){
      +  res.links.should.eql({});
      +  done();
      +})
      +
      should parse the Link header field
      +
      request
      +.get('http://localhost:5000/links')
      +.end(function(err, res){
      +  res.links.next.should.equal('https://api.github.com/repos/visionmedia/mocha/issues?page=2');
      +  done();
      +})
      +
      +
      +
      +

      req.unset(field)

      +
      +
      should remove the header field
      +
      request
      +.post('http://localhost:5000/echo')
      +.unset('User-Agent')
      +.end(function(err, res){
      +  assert(void 0 == res.header['user-agent']);
      +  done();
      +})
      +
      +
      +
      +

      req.write(str)

      +
      +
      should write the given data
      +
      var req = request.post('http://localhost:5000/echo');
      +req.set('Content-Type', 'application/json');
      +req.write('{"name"').should.be.a.boolean;
      +req.write(':"tobi"}').should.be.a.boolean;
      +req.end(function(err, res){
      +  res.text.should.equal('{"name":"tobi"}');
      +  done();
      +});
      +
      +
      +
      +

      req.pipe(stream)

      +
      +
      should pipe the response to the given stream
      +
      var stream = new EventEmitter;
      +stream.buf = '';
      +stream.writable = true;
      +stream.write = function(chunk){
      +  this.buf += chunk;
      +};
      +stream.end = function(){
      +  this.buf.should.equal('{"name":"tobi"}');
      +  done();
      +};
      +request
      +.post('http://localhost:5000/echo')
      +.send('{"name":"tobi"}')
      +.pipe(stream);
      +
      +
      +
      +

      .buffer()

      +
      +
      should enable buffering
      +
      request
      +.get('http://localhost:5000/custom')
      +.buffer()
      +.end(function(err, res){
      +  assert(null == err);
      +  assert('custom stuff' == res.text);
      +  assert(res.buffered);
      +  done();
      +});
      +
      +
      +
      +

      .buffer(false)

      +
      +
      should disable buffering
      +
      request
      +.post('http://localhost:5000/echo')
      +.type('application/x-dog')
      +.send('hello this is dog')
      +.buffer(false)
      +.end(function(err, res){
      +  assert(null == err);
      +  assert(null == res.text);
      +  res.body.should.eql({});
      +  var buf = '';
      +  res.setEncoding('utf8');
      +  res.on('data', function(chunk){ buf += chunk });
      +  res.on('end', function(){
      +    buf.should.equal('hello this is dog');
      +    done();
      +  });
      +});
      +
      +
      +
      +

      .agent()

      +
      +
      should return the defaut agent
      +
      var req = request.post('http://localhost:5000/echo');
      +req.agent().should.equal(false);
      +done();
      +
      +
      +
      +

      .agent(undefined)

      +
      +
      should set an agent to undefined and ensure it is chainable
      +
      var req = request.get('http://localhost:5000/echo');
      +var ret = req.agent(undefined);
      +ret.should.equal(req);
      +assert(req.agent() === undefined);
      +done();
      +
      +
      +
      +

      .agent(new http.Agent())

      +
      +
      should set passed agent
      +
      var http = require('http');
      +var req = request.get('http://localhost:5000/echo');
      +var agent = new http.Agent();
      +var ret = req.agent(agent);
      +ret.should.equal(req);
      +req.agent().should.equal(agent)
      +done();
      +
      +
      +
      +

      with a content type other than application/json or text/*

      +
      +
      should disable buffering
      +
      request
      +.post('http://localhost:5000/echo')
      +.type('application/x-dog')
      +.send('hello this is dog')
      +.end(function(err, res){
      +  assert(null == err);
      +  assert(null == res.text);
      +  res.body.should.eql({});
      +  var buf = '';
      +  res.setEncoding('utf8');
      +  res.buffered.should.be.false;
      +  res.on('data', function(chunk){ buf += chunk });
      +  res.on('end', function(){
      +    buf.should.equal('hello this is dog');
      +    done();
      +  });
      +});
      +
      +
      +
      +

      content-length

      +
      +
      should be set to the byte length of a non-buffer object
      +
      var decoder = new StringDecoder('utf8');
      +var img = fs.readFileSync(__dirname + '/fixtures/test.png');
      +img = decoder.write(img);
      +request
      +.post('http://localhost:5000/echo')
      +.type('application/x-image')
      +.send(img)
      +.buffer(false)
      +.end(function(err, res){
      +  assert(null == err);
      +  assert(!res.buffered);
      +  assert(res.header['content-length'] == Buffer.byteLength(img));
      +  done();
      +});
      +
      should be set to the length of a buffer object
      +
      var img = fs.readFileSync(__dirname + '/fixtures/test.png');
      +request
      +.post('http://localhost:5000/echo')
      +.type('application/x-image')
      +.send(img)
      +.buffer(true)
      +.end(function(err, res){
      +  assert(null == err);
      +  assert(res.buffered);
      +  assert(res.header['content-length'] == img.length);
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      req.set("Content-Type", contentType)

      +
      +
      should work with just the contentType component
      +
      request
      +.post('http://localhost:3005/echo')
      +.set('Content-Type', 'application/json')
      +.send({ name: 'tobi' })
      +.end(function(err, res){
      +  assert(!err);
      +  done();
      +});
      +
      should work with the charset component
      +
      request
      +.post('http://localhost:3005/echo')
      +.set('Content-Type', 'application/json; charset=utf-8')
      +.send({ name: 'tobi' })
      +.end(function(err, res){
      +  assert(!err);
      +  done();
      +});
      +
      +
      +
      +

      exports

      +
      +
      should expose Part
      +
      request.Part.should.be.a.function;
      +
      should expose .protocols
      +
      Object.keys(request.protocols)
      +  .should.eql(['http:', 'https:']);
      +
      should expose .serialize
      +
      Object.keys(request.serialize)
      +  .should.eql(['application/x-www-form-urlencoded', 'application/json']);
      +
      should expose .parse
      +
      Object.keys(request.parse)
      +  .should.eql(['application/x-www-form-urlencoded', 'application/json', 'text', 'image']);
      +
      +
      +
      +

      flags

      +
      +
      +

      with 4xx response

      +
      +
      should set res.error and res.clientError
      +
      request
      +.get('http://localhost:3004/notfound')
      +.end(function(err, res){
      +  assert(err);
      +  assert(!res.ok, 'response should not be ok');
      +  assert(res.error, 'response should be an error');
      +  assert(res.clientError, 'response should be a client error');
      +  assert(!res.serverError, 'response should not be a server error');
      +  done();
      +});
      +
      +
      +
      +

      with 5xx response

      +
      +
      should set res.error and res.serverError
      +
      request
      +.get('http://localhost:3004/error')
      +.end(function(err, res){
      +  assert(err);
      +  assert(!res.ok, 'response should not be ok');
      +  assert(!res.notFound, 'response should not be notFound');
      +  assert(res.error, 'response should be an error');
      +  assert(!res.clientError, 'response should not be a client error');
      +  assert(res.serverError, 'response should be a server error');
      +  done();
      +});
      +
      +
      +
      +

      with 404 Not Found

      +
      +
      should res.notFound
      +
      request
      +.get('http://localhost:3004/notfound')
      +.end(function(err, res){
      +  assert(err);
      +  assert(res.notFound, 'response should be .notFound');
      +  done();
      +});
      +
      +
      +
      +

      with 400 Bad Request

      +
      +
      should set req.badRequest
      +
      request
      +.get('http://localhost:3004/bad-request')
      +.end(function(err, res){
      +  assert(err);
      +  assert(res.badRequest, 'response should be .badRequest');
      +  done();
      +});
      +
      +
      +
      +

      with 401 Bad Request

      +
      +
      should set res.unauthorized
      +
      request
      +.get('http://localhost:3004/unauthorized')
      +.end(function(err, res){
      +  assert(err);
      +  assert(res.unauthorized, 'response should be .unauthorized');
      +  done();
      +});
      +
      +
      +
      +

      with 406 Not Acceptable

      +
      +
      should set res.notAcceptable
      +
      request
      +.get('http://localhost:3004/not-acceptable')
      +.end(function(err, res){
      +  assert(err);
      +  assert(res.notAcceptable, 'response should be .notAcceptable');
      +  done();
      +});
      +
      +
      +
      +

      with 204 No Content

      +
      +
      should set res.noContent
      +
      request
      +.get('http://localhost:3004/no-content')
      +.end(function(err, res){
      +  assert(!err);
      +  assert(res.noContent, 'response should be .noContent');
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      req.send(Object) as "form"

      +
      +
      +

      with req.type() set to form

      +
      +
      should send x-www-form-urlencoded data
      +
      request
      +.post('http://localhost:3002/echo')
      +.type('form')
      +.send({ name: 'tobi' })
      +.end(function(err, res){
      +  res.header['content-type'].should.equal('application/x-www-form-urlencoded');
      +  res.text.should.equal('name=tobi');
      +  done();
      +});
      +
      +
      +
      +

      when called several times

      +
      +
      should merge the objects
      +
      request
      +.post('http://localhost:3002/echo')
      +.type('form')
      +.send({ name: { first: 'tobi', last: 'holowaychuk' } })
      +.send({ age: '1' })
      +.end(function(err, res){
      +  res.header['content-type'].should.equal('application/x-www-form-urlencoded');
      +  res.text.should.equal('name%5Bfirst%5D=tobi&name%5Blast%5D=holowaychuk&age=1');
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      req.send(String)

      +
      +
      should default to "form"
      +
      request
      +.post('http://localhost:3002/echo')
      +.send('user[name]=tj')
      +.send('user[email]=tj@vision-media.ca')
      +.end(function(err, res){
      +  res.header['content-type'].should.equal('application/x-www-form-urlencoded');
      +  res.body.should.eql({ user: { name: 'tj', email: 'tj@vision-media.ca' } });
      +  done();
      +})
      +
      +
      +
      +

      res.body

      +
      +
      +

      application/x-www-form-urlencoded

      +
      +
      should parse the body
      +
      request
      +.get('http://localhost:3002/form-data')
      +.end(function(err, res){
      +  res.text.should.equal('pet[name]=manny');
      +  res.body.should.eql({ pet: { name: 'manny' }});
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      https

      +
      +
      +

      request

      +
      +
      should give a good response
      +
      request
      +.get('https://localhost:8443/')
      +.ca(cert)
      +.end(function(err, res){
      +  assert(res.ok);
      +  assert('Safe and secure!' === res.text);
      +  done();
      +});
      +
      +
      +
      +

      .agent

      +
      +
      should be able to make multiple requests without redefining the certificate
      +
      var agent = request.agent({ca: cert});
      +agent
      +.get('https://localhost:8443/')
      +.end(function(err, res){
      +  assert(res.ok);
      +  assert('Safe and secure!' === res.text);
      +  agent
      +  .get(url.parse('https://localhost:8443/'))
      +  .end(function(err, res){
      +    assert(res.ok);
      +    assert('Safe and secure!' === res.text);
      +    done();
      +  });
      +});
      +
      +
      +
      +
      +
      +

      res.body

      +
      +
      +

      image/png

      +
      +
      should parse the body
      +
      request
      +.get('http://localhost:3011/image')
      +.end(function(err, res){
      +  (res.body.length - img.length).should.equal(0);
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      zlib

      +
      +
      should deflate the content
      +
      request
      +  .get('http://localhost:3080')
      +  .end(function(err, res){
      +    res.should.have.status(200);
      +    res.text.should.equal(subject);
      +    res.headers['content-length'].should.be.below(subject.length);
      +    done();
      +  });
      +
      should handle corrupted responses
      +
      request
      +  .get('http://localhost:3080/corrupt')
      +  .end(function(err, res){
      +    assert(err, 'missing error');
      +    assert(!res, 'response should not be defined');
      +    done();
      +  });
      +
      +

      without encoding set

      +
      +
      should emit buffers
      +
      request
      +  .get('http://localhost:3080/binary')
      +  .end(function(err, res){
      +    res.should.have.status(200);
      +    res.headers['content-length'].should.be.below(subject.length);
      +    res.on('data', function(chunk){
      +      chunk.should.have.length(subject.length);
      +    });
      +    res.on('end', done);
      +  });
      +
      +
      +
      +
      +
      +

      req.send(Object) as "json"

      +
      +
      should default to json
      +
      request
      +.post('http://localhost:3005/echo')
      +.send({ name: 'tobi' })
      +.end(function(err, res){
      +  res.should.be.json
      +  res.text.should.equal('{"name":"tobi"}');
      +  done();
      +});
      +
      should work with arrays
      +
      request
      +.post('http://localhost:3005/echo')
      +.send([1,2,3])
      +.end(function(err, res){
      +  res.should.be.json
      +  res.text.should.equal('[1,2,3]');
      +  done();
      +});
      +
      should work with value null
      +
      request
      +.post('http://localhost:3005/echo')
      +.type('json')
      +.send('null')
      +.end(function(err, res){
      +  res.should.be.json
      +  assert(res.body === null);
      +  done();
      +});
      +
      should work with value false
      +
      request
      +.post('http://localhost:3005/echo')
      +.type('json')
      +.send('false')
      +.end(function(err, res){
      +  res.should.be.json
      +  res.body.should.equal(false);
      +  done();
      +});
      +
      should work with value 0
      +
      request
      +.post('http://localhost:3005/echo')
      +.type('json')
      +.send('0')
      +.end(function(err, res){
      +  res.should.be.json
      +  res.body.should.equal(0);
      +  done();
      +});
      +
      should work with empty string value
      +
      request
      +.post('http://localhost:3005/echo')
      +.type('json')
      +.send('""')
      +.end(function(err, res){
      +  res.should.be.json
      +  res.body.should.equal("");
      +  done();
      +});
      +
      should work with GET
      +
      request
      +.get('http://localhost:3005/echo')
      +.send({ tobi: 'ferret' })
      +.end(function(err, res){
      +  res.should.be.json
      +  res.text.should.equal('{"tobi":"ferret"}');
      +  done();
      +});
      +
      should work with vendor MIME type
      +
      request
      +.post('http://localhost:3005/echo')
      +.set('Content-Type', 'application/vnd.example+json')
      +.send({ name: 'vendor' })
      +.end(function(err, res){
      +  res.text.should.equal('{"name":"vendor"}');
      +  done();
      +});
      +
      +

      when called several times

      +
      +
      should merge the objects
      +
      request
      +.post('http://localhost:3005/echo')
      +.send({ name: 'tobi' })
      +.send({ age: 1 })
      +.end(function(err, res){
      +  res.should.be.json
      +  res.text.should.equal('{"name":"tobi","age":1}');
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      res.body

      +
      +
      +

      application/json

      +
      +
      should parse the body
      +
      request
      +.get('http://localhost:3005/json')
      +.end(function(err, res){
      +  res.text.should.equal('{"name":"manny"}');
      +  res.body.should.eql({ name: 'manny' });
      +  done();
      +});
      +
      +
      +
      +

      HEAD requests

      +
      +
      should not throw a parse error
      +
      request
      +.head('http://localhost:3005/json')
      +.end(function(err, res){
      +  assert(err === null);
      +  assert(res.text === undefined)
      +  assert(Object.keys(res.body).length === 0)
      +  done();
      +});
      +
      +
      +
      +

      Invalid JSON response

      +
      +
      should return the raw response
      +
      request
      +.get('http://localhost:3005/invalid-json')
      +.end(function(err, res){
      +  assert.deepEqual(err.rawResponse, ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}");
      +  done();
      +});
      +
      +
      +
      +

      No content

      +
      +
      should not throw a parse error
      +
      request
      +.get('http://localhost:3005/no-content')
      +.end(function(err, res){
      +  assert(err === null);
      +  assert(res.text === '');
      +  assert(Object.keys(res.body).length === 0);
      +  done();
      +});
      +
      +
      +
      +

      application/json+hal

      +
      +
      should parse the body
      +
      request
      +.get('http://localhost:3005/json-hal')
      +.end(function(err, res){
      +  if (err) return done(err);
      +  res.text.should.equal('{"name":"hal 5000"}');
      +  res.body.should.eql({ name: 'hal 5000' });
      +  done();
      +});
      +
      +
      +
      +

      vnd.collection+json

      +
      +
      should parse the body
      +
      request
      +.get('http://localhost:3005/collection-json')
      +.end(function(err, res){
      +  res.text.should.equal('{"name":"chewbacca"}');
      +  res.body.should.eql({ name: 'chewbacca' });
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      Request

      +
      +
      +

      #attach(name, path, filename)

      +
      +
      should use the custom filename
      +
      request
      +.post(':3005/echo')
      +.attach('document', 'test/node/fixtures/user.html', 'doc.html')
      +.end(function(err, res){
      +  if (err) return done(err);
      +  var html = res.files.document;
      +  html.name.should.equal('doc.html');
      +  html.type.should.equal('text/html');
      +  read(html.path).should.equal('<h1>name</h1>');
      +  done();
      +})
      +
      should fire progress event
      +
      var loaded = 0;
      +var total = 0;
      +request
      +.post(':3005/echo')
      +.attach('document', 'test/node/fixtures/user.html')
      +.on('progress', function (event) {
      +  total = event.total;
      +  loaded = event.loaded;
      +})
      +.end(function(err, res){
      +  if (err) return done(err);
      +  var html = res.files.document;
      +  html.name.should.equal('user.html');
      +  html.type.should.equal('text/html');
      +  read(html.path).should.equal('<h1>name</h1>');
      +  total.should.equal(221);
      +  loaded.should.equal(221);
      +  done();
      +})
      +
      +
      +
      +
      +
      +

      with network error

      +
      +
      should error
      +
      request
      +.get('http://localhost:' + this.port + '/')
      +.end(function(err, res){
      +  assert(err, 'expected an error');
      +  done();
      +});
      +
      +
      +
      +

      request

      +
      +
      +

      not modified

      +
      +
      should start with 200
      +
      request
      +.get('http://localhost:3008/')
      +.end(function(err, res){
      +  res.should.have.status(200)
      +  res.text.should.match(/^\d+$/);
      +  ts = +res.text;
      +  done();
      +});
      +
      should then be 304
      +
      request
      +.get('http://localhost:3008/')
      +.set('If-Modified-Since', new Date(ts).toUTCString())
      +.end(function(err, res){
      +  res.should.have.status(304)
      +  // res.text.should.be.empty
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      req.parse(fn)

      +
      +
      should take precedence over default parsers
      +
      request
      +.get('http://localhost:3033/manny')
      +.parse(request.parse['application/json'])
      +.end(function(err, res){
      +  assert(res.ok);
      +  assert('{"name":"manny"}' == res.text);
      +  assert('manny' == res.body.name);
      +  done();
      +});
      +
      should be the only parser
      +
      request
      +.get('http://localhost:3033/image')
      +.parse(function(res, fn) {
      +  res.on('data', function() {});
      +})
      +.end(function(err, res){
      +  assert(res.ok);
      +  assert(res.text === undefined);
      +  res.body.should.eql({});
      +  done();
      +});
      +
      should emit error if parser throws
      +
      request
      +.get('http://localhost:3033/manny')
      +.parse(function() {
      +  throw new Error('I am broken');
      +})
      +.on('error', function(err) {
      +  err.message.should.equal('I am broken');
      +  done();
      +})
      +.end();
      +
      should emit error if parser returns an error
      +
      request
      +.get('http://localhost:3033/manny')
      +.parse(function(res, fn) {
      +  fn(new Error('I am broken'));
      +})
      +.on('error', function(err) {
      +  err.message.should.equal('I am broken');
      +  done();
      +})
      +.end()
      +
      should not emit error on chunked json
      +
      request
      +.get('http://localhost:3033/chunked-json')
      +.end(function(err){
      +  assert(!err);
      +  done();
      +});
      +
      should not emit error on aborted chunked json
      +
      var req = request
      +.get('http://localhost:3033/chunked-json')
      +.end(function(err){
      +  assert(!err);
      +  done();
      +});
      +setTimeout(function(){req.abort()},50);
      +
      +
      +
      +

      pipe on redirect

      +
      +
      should follow Location
      +
      var stream = fs.createWriteStream('test/node/fixtures/pipe.txt');
      +var redirects = [];
      +var req = request
      +  .get('http://localhost:3012/')
      +  .on('redirect', function (res) {
      +    redirects.push(res.headers.location);
      +  })
      +  .on('end', function () {
      +    var arr = [];
      +    arr.push('/movies');
      +    arr.push('/movies/all');
      +    arr.push('/movies/all/0');
      +    redirects.should.eql(arr);
      +    fs.readFileSync('test/node/fixtures/pipe.txt', 'utf8').should.eql('first movie page');
      +    done();
      +  });
      +  req.pipe(stream);
      +
      +
      +
      +

      request pipe

      +
      +
      should act as a writable stream
      +
      var req = request.post('http://localhost:3020');
      +var stream = fs.createReadStream('test/node/fixtures/user.json');
      +req.type('json');
      +req.on('response', function(res){
      +  res.body.should.eql({ name: 'tobi' });
      +  done();
      +});
      +stream.pipe(req);
      +
      should act as a readable stream
      +
      var stream = fs.createWriteStream('test/node/fixtures/tmp.json');
      +var req = request.get('http://localhost:3025');
      +req.type('json');
      +req.on('end', function(){
      +  JSON.parse(fs.readFileSync('test/node/fixtures/tmp.json', 'utf8')).should.eql({ name: 'tobi' });
      +  done();
      +});
      +req.pipe(stream);
      +
      +
      +
      +

      req.query(String)

      +
      +
      should supply uri malformed error to the callback
      +
      request
      +.get('http://localhost:3006')
      +.query('name=toby')
      +.query('a=\uD800')
      +.query({ b: '\uD800' })
      +.end(function(err, res){
      +  assert(err instanceof Error);
      +  assert('URIError' == err.name);
      +  done();
      +});
      +
      should support passing in a string
      +
      request
      +.del('http://localhost:3006')
      +.query('name=t%F6bi')
      +.end(function(err, res){
      +  res.body.should.eql({ name: 't%F6bi' });
      +  done();
      +});
      +
      should work with url query-string and string for query
      +
      request
      +.del('http://localhost:3006/?name=tobi')
      +.query('age=2%20')
      +.end(function(err, res){
      +  res.body.should.eql({ name: 'tobi', age: '2 ' });
      +  done();
      +});
      +
      should support compound elements in a string
      +
      request
      +  .del('http://localhost:3006/')
      +  .query('name=t%F6bi&age=2')
      +  .end(function(err, res){
      +    res.body.should.eql({ name: 't%F6bi', age: '2' });
      +    done();
      +  });
      +
      should work when called multiple times with a string
      +
      request
      +.del('http://localhost:3006/')
      +.query('name=t%F6bi')
      +.query('age=2%F6')
      +.end(function(err, res){
      +  res.body.should.eql({ name: 't%F6bi', age: '2%F6' });
      +  done();
      +});
      +
      should work with normal `query` object and query string
      +
      request
      +.del('http://localhost:3006/')
      +.query('name=t%F6bi')
      +.query({ age: '2' })
      +.end(function(err, res){
      +  res.body.should.eql({ name: 't%F6bi', age: '2' });
      +  done();
      +});
      +
      +
      +
      +

      req.query(Object)

      +
      +
      should construct the query-string
      +
      request
      +.del('http://localhost:3006/')
      +.query({ name: 'tobi' })
      +.query({ order: 'asc' })
      +.query({ limit: ['1', '2'] })
      +.end(function(err, res){
      +  res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
      +  done();
      +});
      +
      should not error on dates
      +
      var date = new Date(0);
      +request
      +.del('http://localhost:3006/')
      +.query({ at: date })
      +.end(function(err, res){
      +  assert(date.toISOString() == res.body.at);
      +  done();
      +});
      +
      should work after setting header fields
      +
      request
      +.del('http://localhost:3006/')
      +.set('Foo', 'bar')
      +.set('Bar', 'baz')
      +.query({ name: 'tobi' })
      +.query({ order: 'asc' })
      +.query({ limit: ['1', '2'] })
      +.end(function(err, res){
      +  res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
      +  done();
      +});
      +
      should append to the original query-string
      +
      request
      +.del('http://localhost:3006/?name=tobi')
      +.query({ order: 'asc' })
      +.end(function(err, res) {
      +  res.body.should.eql({ name: 'tobi', order: 'asc' });
      +  done();
      +});
      +
      should retain the original query-string
      +
      request
      +.del('http://localhost:3006/?name=tobi')
      +.end(function(err, res) {
      +  res.body.should.eql({ name: 'tobi' });
      +  done();
      +});
      +
      +
      +
      +

      request.get

      +
      +
      +

      on 301 redirect

      +
      +
      should follow Location with a GET request
      +
      var req = request
      +  .get('http://localhost:3210/test-301')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('GET');
      +    done();
      +  });
      +
      +
      +
      +

      on 302 redirect

      +
      +
      should follow Location with a GET request
      +
      var req = request
      +  .get('http://localhost:3210/test-302')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('GET');
      +    done();
      +  });
      +
      +
      +
      +

      on 303 redirect

      +
      +
      should follow Location with a GET request
      +
      var req = request
      +  .get('http://localhost:3210/test-303')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('GET');
      +    done();
      +  });
      +
      +
      +
      +

      on 307 redirect

      +
      +
      should follow Location with a GET request
      +
      var req = request
      +  .get('http://localhost:3210/test-307')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('GET');
      +    done();
      +  });
      +
      +
      +
      +

      on 308 redirect

      +
      +
      should follow Location with a GET request
      +
      var req = request
      +  .get('http://localhost:3210/test-308')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('GET');
      +    done();
      +  });
      +
      +
      +
      +
      +
      +

      request.post

      +
      +
      +

      on 301 redirect

      +
      +
      should follow Location with a GET request
      +
      var req = request
      +  .post('http://localhost:3210/test-301')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('GET');
      +    done();
      +  });
      +
      +
      +
      +

      on 302 redirect

      +
      +
      should follow Location with a GET request
      +
      var req = request
      +  .post('http://localhost:3210/test-302')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('GET');
      +    done();
      +  });
      +
      +
      +
      +

      on 303 redirect

      +
      +
      should follow Location with a GET request
      +
      var req = request
      +  .post('http://localhost:3210/test-303')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('GET');
      +    done();
      +  });
      +
      +
      +
      +

      on 307 redirect

      +
      +
      should follow Location with a POST request
      +
      var req = request
      +  .post('http://localhost:3210/test-307')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('POST');
      +    done();
      +  });
      +
      +
      +
      +

      on 308 redirect

      +
      +
      should follow Location with a POST request
      +
      var req = request
      +  .post('http://localhost:3210/test-308')
      +  .redirects(1)
      +  .end(function(err, res){
      +    req.req._headers.host.should.eql('localhost:3211');
      +    res.status.should.eql(200);
      +    res.text.should.eql('POST');
      +    done();
      +  });
      +
      +
      +
      +
      +
      +

      request

      +
      +
      +

      on redirect

      +
      +
      should follow Location
      +
      var redirects = [];
      +request
      +.get('http://localhost:3003/')
      +.on('redirect', function(res){
      +  redirects.push(res.headers.location);
      +})
      +.end(function(err, res){
      +  var arr = [];
      +  arr.push('/movies');
      +  arr.push('/movies/all');
      +  arr.push('/movies/all/0');
      +  redirects.should.eql(arr);
      +  res.text.should.equal('first movie page');
      +  done();
      +});
      +
      should retain header fields
      +
      request
      +.get('http://localhost:3003/header')
      +.set('X-Foo', 'bar')
      +.end(function(err, res){
      +  res.body.should.have.property('x-foo', 'bar');
      +  done();
      +});
      +
      should remove Content-* fields
      +
      request
      +.post('http://localhost:3003/header')
      +.type('txt')
      +.set('X-Foo', 'bar')
      +.set('X-Bar', 'baz')
      +.send('hey')
      +.end(function(err, res){
      +  res.body.should.have.property('x-foo', 'bar');
      +  res.body.should.have.property('x-bar', 'baz');
      +  res.body.should.not.have.property('content-type');
      +  res.body.should.not.have.property('content-length');
      +  res.body.should.not.have.property('transfer-encoding');
      +  done();
      +});
      +
      should retain cookies
      +
      request
      +.get('http://localhost:3003/header')
      +.set('Cookie', 'foo=bar;')
      +.end(function(err, res){
      +  res.body.should.have.property('cookie', 'foo=bar;');
      +  done();
      +});
      +
      should preserve timeout across redirects
      +
      request
      +.get('http://localhost:3003/movies/random')
      +.timeout(250)
      +.end(function(err, res){
      +  assert(err instanceof Error, 'expected an error');
      +  err.should.have.property('timeout', 250);
      +  done();
      +});
      +
      should not resend query parameters
      +
      var redirects = [];
      +var query = [];
      +request
      +.get('http://localhost:3003/?foo=bar')
      +.on('redirect', function(res){
      +  query.push(res.headers.query);
      +  redirects.push(res.headers.location);
      +})
      +.end(function(err, res){
      +  var arr = [];
      +  arr.push('/movies');
      +  arr.push('/movies/all');
      +  arr.push('/movies/all/0');
      +  redirects.should.eql(arr);
      +  res.text.should.equal('first movie page');
      +  query.should.eql(['{"foo":"bar"}', '{}', '{}']);
      +  res.headers.query.should.eql('{}');
      +  done();
      +});
      +
      should handle no location header
      +
      request
      +.get('http://localhost:3003/bad-redirect')
      +.end(function(err, res){
      +  err.message.should.equal('No location header for redirect');
      +  done();
      +});
      +
      +

      when relative

      +
      +
      should redirect to a sibling path
      +
      var redirects = [];
      +request
      +.get('http://localhost:3003/relative')
      +.on('redirect', function(res){
      +  redirects.push(res.headers.location);
      +})
      +.end(function(err, res){
      +  var arr = [];
      +  redirects.should.eql(['tobi']);
      +  res.text.should.equal('tobi');
      +  done();
      +});
      +
      should redirect to a parent path
      +
      var redirects = [];
      +request
      +.get('http://localhost:3003/relative/sub')
      +.on('redirect', function(res){
      +  redirects.push(res.headers.location);
      +})
      +.end(function(err, res){
      +  var arr = [];
      +  redirects.should.eql(['../tobi']);
      +  res.text.should.equal('tobi');
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      req.redirects(n)

      +
      +
      should alter the default number of redirects to follow
      +
      var redirects = [];
      +request
      +.get('http://localhost:3003/')
      +.redirects(2)
      +.on('redirect', function(res){
      +  redirects.push(res.headers.location);
      +})
      +.end(function(err, res){
      +  var arr = [];
      +  assert(res.redirect, 'res.redirect');
      +  arr.push('/movies');
      +  arr.push('/movies/all');
      +  redirects.should.eql(arr);
      +  res.text.should.match(/Moved Temporarily|Found/);
      +  done();
      +});
      +
      +
      +
      +

      on POST

      +
      +
      should redirect as GET
      +
      var redirects = [];
      +request
      +.post('http://localhost:3003/movie')
      +.send({ name: 'Tobi' })
      +.redirects(2)
      +.on('redirect', function(res){
      +  redirects.push(res.headers.location);
      +})
      +.end(function(err, res){
      +  var arr = [];
      +  arr.push('/movies/all/0');
      +  redirects.should.eql(arr);
      +  res.text.should.equal('first movie page');
      +  done();
      +});
      +
      +
      +
      +

      on 303

      +
      +
      should redirect with same method
      +
      request
      +.put('http://localhost:3003/redirect-303')
      +.send({msg: "hello"})
      +.redirects(1)
      +.on('redirect', function(res) {
      +  res.headers.location.should.equal('/reply-method')
      +})
      +.end(function(err, res){
      +  res.text.should.equal('method=get');
      +  done();
      +})
      +
      +
      +
      +

      on 307

      +
      +
      should redirect with same method
      +
      request
      +.put('http://localhost:3003/redirect-307')
      +.send({msg: "hello"})
      +.redirects(1)
      +.on('redirect', function(res) {
      +  res.headers.location.should.equal('/reply-method')
      +})
      +.end(function(err, res){
      +  res.text.should.equal('method=put');
      +  done();
      +})
      +
      +
      +
      +

      on 308

      +
      +
      should redirect with same method
      +
      request
      +.put('http://localhost:3003/redirect-308')
      +.send({msg: "hello"})
      +.redirects(1)
      +.on('redirect', function(res) {
      +  res.headers.location.should.equal('/reply-method')
      +})
      +.end(function(err, res){
      +  res.text.should.equal('method=put');
      +  done();
      +})
      +
      +
      +
      +
      +
      +

      response

      +
      +
      should act as a readable stream
      +
      var req = request
      +  .get('http://localhost:3025')
      +  .buffer(false);
      +req.end(function(err,res){
      +  if (err) return done(err);
      +  var trackEndEvent = 0;
      +  var trackCloseEvent = 0;
      +  res.on('end',function(){
      +    trackEndEvent++;
      +    trackEndEvent.should.equal(1);
      +    trackCloseEvent.should.equal(0);  // close should not have been called
      +    done();
      +  });
      +  res.on('close',function(){
      +    trackCloseEvent++;
      +  });
      +
      +  (function(){ res.pause() }).should.not.throw();
      +  (function(){ res.resume() }).should.not.throw();
      +  (function(){ res.destroy() }).should.not.throw();
      +});
      +
      +
      +
      +

      .timeout(ms)

      +
      +
      +

      when timeout is exceeded

      +
      +
      should error
      +
      request
      +.get('http://localhost:3009/500')
      +.timeout(150)
      +.end(function(err, res){
      +  assert(err, 'expected an error');
      +  assert('number' == typeof err.timeout, 'expected an error with .timeout');
      +  assert('ECONNABORTED' == err.code, 'expected abort error code')
      +  done();
      +});
      +
      +
      +
      +
      +
      +

      res.toError()

      +
      +
      should return an Error
      +
      request
      +.get('http://localhost:' + server.address().port)
      +.end(function(err, res){
      +  var err = res.toError();
      +  assert(err.status == 400);
      +  assert(err.method == 'GET');
      +  assert(err.path == '/');
      +  assert(err.message == 'cannot GET / (400)');
      +  assert(err.text == 'invalid json');
      +  done();
      +});
      +
      +
      +
      +

      req.get()

      +
      +
      should set a default user-agent
      +
      request
      +.get('http://localhost:3345/ua')
      +.end(function(err, res){
      +  assert(res.headers);
      +  assert(res.headers['user-agent']);
      +  assert(/^node-superagent\/\d+\.\d+\.\d+$/.test(res.headers['user-agent']));
      +  done();
      +});
      +
      should be able to override user-agent
      +
      request
      +.get('http://localhost:3345/ua')
      +.set('User-Agent', 'foo/bar')
      +.end(function(err, res){
      +  assert(res.headers);
      +  assert(res.headers['user-agent'] == 'foo/bar');
      +  done();
      +});
      +
      should be able to wipe user-agent
      +
      request
      +.get('http://localhost:3345/ua')
      +.unset('User-Agent')
      +.end(function(err, res){
      +  assert(res.headers);
      +  assert(res.headers['user-agent'] == void 0);
      +  done();
      +});
      +
      +
      +
      +

      utils.type(str)

      +
      +
      should return the mime type
      +
      utils.type('application/json; charset=utf-8')
      +  .should.equal('application/json');
      +utils.type('application/json')
      +  .should.equal('application/json');
      +
      +
      +
      +

      utils.params(str)

      +
      +
      should return the field parameters
      +
      var str = 'application/json; charset=utf-8; foo  = bar';
      +var obj = utils.params(str);
      +obj.charset.should.equal('utf-8');
      +obj.foo.should.equal('bar');
      +var str = 'application/json';
      +utils.params(str).should.eql({});
      +
      +
      +
      +

      utils.parseLinks(str)

      +
      +
      should parse links
      +
      var str = '<https://api.github.com/repos/visionmedia/mocha/issues?page=2>; rel="next", <https://api.github.com/repos/visionmedia/mocha/issues?page=5>; rel="last"';
      +var ret = utils.parseLinks(str);
      +ret.next.should.equal('https://api.github.com/repos/visionmedia/mocha/issues?page=2');
      +ret.last.should.equal('https://api.github.com/repos/visionmedia/mocha/issues?page=5');
      +
      +
      +
      + Fork me on GitHub + + \ No newline at end of file diff --git a/node_modules/superagent/lib/client.js b/node_modules/superagent/lib/client.js new file mode 100644 index 0000000..0cc1579 --- /dev/null +++ b/node_modules/superagent/lib/client.js @@ -0,0 +1,1077 @@ +/** + * Module dependencies. + */ + +var Emitter = require('emitter'); +var reduce = require('reduce'); +var requestBase = require('./request-base'); +var isObject = require('./is-object'); + +/** + * Root reference for iframes. + */ + +var root; +if (typeof window !== 'undefined') { // Browser window + root = window; +} else if (typeof self !== 'undefined') { // Web Worker + root = self; +} else { // Other environments + root = this; +} + +/** + * Noop. + */ + +function noop(){}; + +/** + * Check if `obj` is a host object, + * we don't want to serialize these :) + * + * TODO: future proof, move to compoent land + * + * @param {Object} obj + * @return {Boolean} + * @api private + */ + +function isHost(obj) { + var str = {}.toString.call(obj); + + switch (str) { + case '[object File]': + case '[object Blob]': + case '[object FormData]': + return true; + default: + return false; + } +} + +/** + * Expose `request`. + */ + +var request = module.exports = require('./request').bind(null, Request); + +/** + * Determine XHR. + */ + +request.getXHR = function () { + if (root.XMLHttpRequest + && (!root.location || 'file:' != root.location.protocol + || !root.ActiveXObject)) { + return new XMLHttpRequest; + } else { + try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) {} + try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {} + try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {} + try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) {} + } + return false; +}; + +/** + * Removes leading and trailing whitespace, added to support IE. + * + * @param {String} s + * @return {String} + * @api private + */ + +var trim = ''.trim + ? function(s) { return s.trim(); } + : function(s) { return s.replace(/(^\s*|\s*$)/g, ''); }; + +/** + * Serialize the given `obj`. + * + * @param {Object} obj + * @return {String} + * @api private + */ + +function serialize(obj) { + if (!isObject(obj)) return obj; + var pairs = []; + for (var key in obj) { + if (null != obj[key]) { + pushEncodedKeyValuePair(pairs, key, obj[key]); + } + } + return pairs.join('&'); +} + +/** + * Helps 'serialize' with serializing arrays. + * Mutates the pairs array. + * + * @param {Array} pairs + * @param {String} key + * @param {Mixed} val + */ + +function pushEncodedKeyValuePair(pairs, key, val) { + if (Array.isArray(val)) { + return val.forEach(function(v) { + pushEncodedKeyValuePair(pairs, key, v); + }); + } + pairs.push(encodeURIComponent(key) + + '=' + encodeURIComponent(val)); +} + +/** + * Expose serialization method. + */ + + request.serializeObject = serialize; + + /** + * Parse the given x-www-form-urlencoded `str`. + * + * @param {String} str + * @return {Object} + * @api private + */ + +function parseString(str) { + var obj = {}; + var pairs = str.split('&'); + var parts; + var pair; + + for (var i = 0, len = pairs.length; i < len; ++i) { + pair = pairs[i]; + parts = pair.split('='); + obj[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]); + } + + return obj; +} + +/** + * Expose parser. + */ + +request.parseString = parseString; + +/** + * Default MIME type map. + * + * superagent.types.xml = 'application/xml'; + * + */ + +request.types = { + html: 'text/html', + json: 'application/json', + xml: 'application/xml', + urlencoded: 'application/x-www-form-urlencoded', + 'form': 'application/x-www-form-urlencoded', + 'form-data': 'application/x-www-form-urlencoded' +}; + +/** + * Default serialization map. + * + * superagent.serialize['application/xml'] = function(obj){ + * return 'generated xml here'; + * }; + * + */ + + request.serialize = { + 'application/x-www-form-urlencoded': serialize, + 'application/json': JSON.stringify + }; + + /** + * Default parsers. + * + * superagent.parse['application/xml'] = function(str){ + * return { object parsed from str }; + * }; + * + */ + +request.parse = { + 'application/x-www-form-urlencoded': parseString, + 'application/json': JSON.parse +}; + +/** + * Parse the given header `str` into + * an object containing the mapped fields. + * + * @param {String} str + * @return {Object} + * @api private + */ + +function parseHeader(str) { + var lines = str.split(/\r?\n/); + var fields = {}; + var index; + var line; + var field; + var val; + + lines.pop(); // trailing CRLF + + for (var i = 0, len = lines.length; i < len; ++i) { + line = lines[i]; + index = line.indexOf(':'); + field = line.slice(0, index).toLowerCase(); + val = trim(line.slice(index + 1)); + fields[field] = val; + } + + return fields; +} + +/** + * Check if `mime` is json or has +json structured syntax suffix. + * + * @param {String} mime + * @return {Boolean} + * @api private + */ + +function isJSON(mime) { + return /[\/+]json\b/.test(mime); +} + +/** + * Return the mime type for the given `str`. + * + * @param {String} str + * @return {String} + * @api private + */ + +function type(str){ + return str.split(/ *; */).shift(); +}; + +/** + * Return header field parameters. + * + * @param {String} str + * @return {Object} + * @api private + */ + +function params(str){ + return reduce(str.split(/ *; */), function(obj, str){ + var parts = str.split(/ *= */) + , key = parts.shift() + , val = parts.shift(); + + if (key && val) obj[key] = val; + return obj; + }, {}); +}; + +/** + * Initialize a new `Response` with the given `xhr`. + * + * - set flags (.ok, .error, etc) + * - parse header + * + * Examples: + * + * Aliasing `superagent` as `request` is nice: + * + * request = superagent; + * + * We can use the promise-like API, or pass callbacks: + * + * request.get('/').end(function(res){}); + * request.get('/', function(res){}); + * + * Sending data can be chained: + * + * request + * .post('/user') + * .send({ name: 'tj' }) + * .end(function(res){}); + * + * Or passed to `.send()`: + * + * request + * .post('/user') + * .send({ name: 'tj' }, function(res){}); + * + * Or passed to `.post()`: + * + * request + * .post('/user', { name: 'tj' }) + * .end(function(res){}); + * + * Or further reduced to a single call for simple cases: + * + * request + * .post('/user', { name: 'tj' }, function(res){}); + * + * @param {XMLHTTPRequest} xhr + * @param {Object} options + * @api private + */ + +function Response(req, options) { + options = options || {}; + this.req = req; + this.xhr = this.req.xhr; + // responseText is accessible only if responseType is '' or 'text' and on older browsers + this.text = ((this.req.method !='HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || typeof this.xhr.responseType === 'undefined') + ? this.xhr.responseText + : null; + this.statusText = this.req.xhr.statusText; + this.setStatusProperties(this.xhr.status); + this.header = this.headers = parseHeader(this.xhr.getAllResponseHeaders()); + // getAllResponseHeaders sometimes falsely returns "" for CORS requests, but + // getResponseHeader still works. so we get content-type even if getting + // other headers fails. + this.header['content-type'] = this.xhr.getResponseHeader('content-type'); + this.setHeaderProperties(this.header); + this.body = this.req.method != 'HEAD' + ? this.parseBody(this.text ? this.text : this.xhr.response) + : null; +} + +/** + * Get case-insensitive `field` value. + * + * @param {String} field + * @return {String} + * @api public + */ + +Response.prototype.get = function(field){ + return this.header[field.toLowerCase()]; +}; + +/** + * Set header related properties: + * + * - `.type` the content type without params + * + * A response of "Content-Type: text/plain; charset=utf-8" + * will provide you with a `.type` of "text/plain". + * + * @param {Object} header + * @api private + */ + +Response.prototype.setHeaderProperties = function(header){ + // content-type + var ct = this.header['content-type'] || ''; + this.type = type(ct); + + // params + var obj = params(ct); + for (var key in obj) this[key] = obj[key]; +}; + +/** + * Parse the given body `str`. + * + * Used for auto-parsing of bodies. Parsers + * are defined on the `superagent.parse` object. + * + * @param {String} str + * @return {Mixed} + * @api private + */ + +Response.prototype.parseBody = function(str){ + var parse = request.parse[this.type]; + if (!parse && isJSON(this.type)) { + parse = request.parse['application/json']; + } + return parse && str && (str.length || str instanceof Object) + ? parse(str) + : null; +}; + +/** + * Set flags such as `.ok` based on `status`. + * + * For example a 2xx response will give you a `.ok` of __true__ + * whereas 5xx will be __false__ and `.error` will be __true__. The + * `.clientError` and `.serverError` are also available to be more + * specific, and `.statusType` is the class of error ranging from 1..5 + * sometimes useful for mapping respond colors etc. + * + * "sugar" properties are also defined for common cases. Currently providing: + * + * - .noContent + * - .badRequest + * - .unauthorized + * - .notAcceptable + * - .notFound + * + * @param {Number} status + * @api private + */ + +Response.prototype.setStatusProperties = function(status){ + // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request + if (status === 1223) { + status = 204; + } + + var type = status / 100 | 0; + + // status / class + this.status = this.statusCode = status; + this.statusType = type; + + // basics + this.info = 1 == type; + this.ok = 2 == type; + this.clientError = 4 == type; + this.serverError = 5 == type; + this.error = (4 == type || 5 == type) + ? this.toError() + : false; + + // sugar + this.accepted = 202 == status; + this.noContent = 204 == status; + this.badRequest = 400 == status; + this.unauthorized = 401 == status; + this.notAcceptable = 406 == status; + this.notFound = 404 == status; + this.forbidden = 403 == status; +}; + +/** + * Return an `Error` representative of this response. + * + * @return {Error} + * @api public + */ + +Response.prototype.toError = function(){ + var req = this.req; + var method = req.method; + var url = req.url; + + var msg = 'cannot ' + method + ' ' + url + ' (' + this.status + ')'; + var err = new Error(msg); + err.status = this.status; + err.method = method; + err.url = url; + + return err; +}; + +/** + * Expose `Response`. + */ + +request.Response = Response; + +/** + * Initialize a new `Request` with the given `method` and `url`. + * + * @param {String} method + * @param {String} url + * @api public + */ + +function Request(method, url) { + var self = this; + this._query = this._query || []; + this.method = method; + this.url = url; + this.header = {}; // preserves header name case + this._header = {}; // coerces header names to lowercase + this.on('end', function(){ + var err = null; + var res = null; + + try { + res = new Response(self); + } catch(e) { + err = new Error('Parser is unable to parse the response'); + err.parse = true; + err.original = e; + // issue #675: return the raw response if the response parsing fails + err.rawResponse = self.xhr && self.xhr.responseText ? self.xhr.responseText : null; + // issue #876: return the http status code if the response parsing fails + err.statusCode = self.xhr && self.xhr.status ? self.xhr.status : null; + return self.callback(err); + } + + self.emit('response', res); + + if (err) { + return self.callback(err, res); + } + + if (res.status >= 200 && res.status < 300) { + return self.callback(err, res); + } + + var new_err = new Error(res.statusText || 'Unsuccessful HTTP response'); + new_err.original = err; + new_err.response = res; + new_err.status = res.status; + + self.callback(new_err, res); + }); +} + +/** + * Mixin `Emitter` and `requestBase`. + */ + +Emitter(Request.prototype); +for (var key in requestBase) { + Request.prototype[key] = requestBase[key]; +} + +/** + * Abort the request, and clear potential timeout. + * + * @return {Request} + * @api public + */ + +Request.prototype.abort = function(){ + if (this.aborted) return; + this.aborted = true; + this.xhr && this.xhr.abort(); + this.clearTimeout(); + this.emit('abort'); + return this; +}; + +/** + * Set Content-Type to `type`, mapping values from `request.types`. + * + * Examples: + * + * superagent.types.xml = 'application/xml'; + * + * request.post('/') + * .type('xml') + * .send(xmlstring) + * .end(callback); + * + * request.post('/') + * .type('application/xml') + * .send(xmlstring) + * .end(callback); + * + * @param {String} type + * @return {Request} for chaining + * @api public + */ + +Request.prototype.type = function(type){ + this.set('Content-Type', request.types[type] || type); + return this; +}; + +/** + * Set responseType to `val`. Presently valid responseTypes are 'blob' and + * 'arraybuffer'. + * + * Examples: + * + * req.get('/') + * .responseType('blob') + * .end(callback); + * + * @param {String} val + * @return {Request} for chaining + * @api public + */ + +Request.prototype.responseType = function(val){ + this._responseType = val; + return this; +}; + +/** + * Set Accept to `type`, mapping values from `request.types`. + * + * Examples: + * + * superagent.types.json = 'application/json'; + * + * request.get('/agent') + * .accept('json') + * .end(callback); + * + * request.get('/agent') + * .accept('application/json') + * .end(callback); + * + * @param {String} accept + * @return {Request} for chaining + * @api public + */ + +Request.prototype.accept = function(type){ + this.set('Accept', request.types[type] || type); + return this; +}; + +/** + * Set Authorization field value with `user` and `pass`. + * + * @param {String} user + * @param {String} pass + * @param {Object} options with 'type' property 'auto' or 'basic' (default 'basic') + * @return {Request} for chaining + * @api public + */ + +Request.prototype.auth = function(user, pass, options){ + if (!options) { + options = { + type: 'basic' + } + } + + switch (options.type) { + case 'basic': + var str = btoa(user + ':' + pass); + this.set('Authorization', 'Basic ' + str); + break; + + case 'auto': + this.username = user; + this.password = pass; + break; + } + return this; +}; + +/** +* Add query-string `val`. +* +* Examples: +* +* request.get('/shoes') +* .query('size=10') +* .query({ color: 'blue' }) +* +* @param {Object|String} val +* @return {Request} for chaining +* @api public +*/ + +Request.prototype.query = function(val){ + if ('string' != typeof val) val = serialize(val); + if (val) this._query.push(val); + return this; +}; + +/** + * Queue the given `file` as an attachment to the specified `field`, + * with optional `filename`. + * + * ``` js + * request.post('/upload') + * .attach(new Blob(['hey!'], { type: "text/html"})) + * .end(callback); + * ``` + * + * @param {String} field + * @param {Blob|File} file + * @param {String} filename + * @return {Request} for chaining + * @api public + */ + +Request.prototype.attach = function(field, file, filename){ + this._getFormData().append(field, file, filename || file.name); + return this; +}; + +Request.prototype._getFormData = function(){ + if (!this._formData) { + this._formData = new root.FormData(); + } + return this._formData; +}; + +/** + * Send `data` as the request body, defaulting the `.type()` to "json" when + * an object is given. + * + * Examples: + * + * // manual json + * request.post('/user') + * .type('json') + * .send('{"name":"tj"}') + * .end(callback) + * + * // auto json + * request.post('/user') + * .send({ name: 'tj' }) + * .end(callback) + * + * // manual x-www-form-urlencoded + * request.post('/user') + * .type('form') + * .send('name=tj') + * .end(callback) + * + * // auto x-www-form-urlencoded + * request.post('/user') + * .type('form') + * .send({ name: 'tj' }) + * .end(callback) + * + * // defaults to x-www-form-urlencoded + * request.post('/user') + * .send('name=tobi') + * .send('species=ferret') + * .end(callback) + * + * @param {String|Object} data + * @return {Request} for chaining + * @api public + */ + +Request.prototype.send = function(data){ + var obj = isObject(data); + var type = this._header['content-type']; + + // merge + if (obj && isObject(this._data)) { + for (var key in data) { + this._data[key] = data[key]; + } + } else if ('string' == typeof data) { + if (!type) this.type('form'); + type = this._header['content-type']; + if ('application/x-www-form-urlencoded' == type) { + this._data = this._data + ? this._data + '&' + data + : data; + } else { + this._data = (this._data || '') + data; + } + } else { + this._data = data; + } + + if (!obj || isHost(data)) return this; + if (!type) this.type('json'); + return this; +}; + +/** + * @deprecated + */ +Response.prototype.parse = function serialize(fn){ + if (root.console) { + console.warn("Client-side parse() method has been renamed to serialize(). This method is not compatible with superagent v2.0"); + } + this.serialize(fn); + return this; +}; + +Response.prototype.serialize = function serialize(fn){ + this._parser = fn; + return this; +}; + +/** + * Invoke the callback with `err` and `res` + * and handle arity check. + * + * @param {Error} err + * @param {Response} res + * @api private + */ + +Request.prototype.callback = function(err, res){ + var fn = this._callback; + this.clearTimeout(); + fn(err, res); +}; + +/** + * Invoke callback with x-domain error. + * + * @api private + */ + +Request.prototype.crossDomainError = function(){ + var err = new Error('Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'); + err.crossDomain = true; + + err.status = this.status; + err.method = this.method; + err.url = this.url; + + this.callback(err); +}; + +/** + * Invoke callback with timeout error. + * + * @api private + */ + +Request.prototype.timeoutError = function(){ + var timeout = this._timeout; + var err = new Error('timeout of ' + timeout + 'ms exceeded'); + err.timeout = timeout; + this.callback(err); +}; + +/** + * Enable transmission of cookies with x-domain requests. + * + * Note that for this to work the origin must not be + * using "Access-Control-Allow-Origin" with a wildcard, + * and also must set "Access-Control-Allow-Credentials" + * to "true". + * + * @api public + */ + +Request.prototype.withCredentials = function(){ + this._withCredentials = true; + return this; +}; + +/** + * Initiate request, invoking callback `fn(res)` + * with an instanceof `Response`. + * + * @param {Function} fn + * @return {Request} for chaining + * @api public + */ + +Request.prototype.end = function(fn){ + var self = this; + var xhr = this.xhr = request.getXHR(); + var query = this._query.join('&'); + var timeout = this._timeout; + var data = this._formData || this._data; + + // store callback + this._callback = fn || noop; + + // state change + xhr.onreadystatechange = function(){ + if (4 != xhr.readyState) return; + + // In IE9, reads to any property (e.g. status) off of an aborted XHR will + // result in the error "Could not complete the operation due to error c00c023f" + var status; + try { status = xhr.status } catch(e) { status = 0; } + + if (0 == status) { + if (self.timedout) return self.timeoutError(); + if (self.aborted) return; + return self.crossDomainError(); + } + self.emit('end'); + }; + + // progress + var handleProgress = function(e){ + if (e.total > 0) { + e.percent = e.loaded / e.total * 100; + } + e.direction = 'download'; + self.emit('progress', e); + }; + if (this.hasListeners('progress')) { + xhr.onprogress = handleProgress; + } + try { + if (xhr.upload && this.hasListeners('progress')) { + xhr.upload.onprogress = handleProgress; + } + } catch(e) { + // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. + // Reported here: + // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context + } + + // timeout + if (timeout && !this._timer) { + this._timer = setTimeout(function(){ + self.timedout = true; + self.abort(); + }, timeout); + } + + // querystring + if (query) { + query = request.serializeObject(query); + this.url += ~this.url.indexOf('?') + ? '&' + query + : '?' + query; + } + + // initiate request + if (this.username && this.password) { + xhr.open(this.method, this.url, true, this.username, this.password); + } else { + xhr.open(this.method, this.url, true); + } + + // CORS + if (this._withCredentials) xhr.withCredentials = true; + + // body + if ('GET' != this.method && 'HEAD' != this.method && 'string' != typeof data && !isHost(data)) { + // serialize stuff + var contentType = this._header['content-type']; + var serialize = this._parser || request.serialize[contentType ? contentType.split(';')[0] : '']; + if (!serialize && isJSON(contentType)) serialize = request.serialize['application/json']; + if (serialize) data = serialize(data); + } + + // set header fields + for (var field in this.header) { + if (null == this.header[field]) continue; + xhr.setRequestHeader(field, this.header[field]); + } + + if (this._responseType) { + xhr.responseType = this._responseType; + } + + // send stuff + this.emit('request', this); + + // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) + // We need null here if data is undefined + xhr.send(typeof data !== 'undefined' ? data : null); + return this; +}; + + +/** + * Expose `Request`. + */ + +request.Request = Request; + +/** + * GET `url` with optional callback `fn(res)`. + * + * @param {String} url + * @param {Mixed|Function} data or fn + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.get = function(url, data, fn){ + var req = request('GET', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.query(data); + if (fn) req.end(fn); + return req; +}; + +/** + * HEAD `url` with optional callback `fn(res)`. + * + * @param {String} url + * @param {Mixed|Function} data or fn + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.head = function(url, data, fn){ + var req = request('HEAD', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + if (fn) req.end(fn); + return req; +}; + +/** + * DELETE `url` with optional callback `fn(res)`. + * + * @param {String} url + * @param {Function} fn + * @return {Request} + * @api public + */ + +function del(url, fn){ + var req = request('DELETE', url); + if (fn) req.end(fn); + return req; +}; + +request['del'] = del; +request['delete'] = del; + +/** + * PATCH `url` with optional `data` and callback `fn(res)`. + * + * @param {String} url + * @param {Mixed} data + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.patch = function(url, data, fn){ + var req = request('PATCH', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + if (fn) req.end(fn); + return req; +}; + +/** + * POST `url` with optional `data` and callback `fn(res)`. + * + * @param {String} url + * @param {Mixed} data + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.post = function(url, data, fn){ + var req = request('POST', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + if (fn) req.end(fn); + return req; +}; + +/** + * PUT `url` with optional `data` and callback `fn(res)`. + * + * @param {String} url + * @param {Mixed|Function} data or fn + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.put = function(url, data, fn){ + var req = request('PUT', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + if (fn) req.end(fn); + return req; +}; diff --git a/node_modules/superagent/lib/is-object.js b/node_modules/superagent/lib/is-object.js new file mode 100644 index 0000000..37499a3 --- /dev/null +++ b/node_modules/superagent/lib/is-object.js @@ -0,0 +1,13 @@ +/** + * Check if `obj` is an object. + * + * @param {Object} obj + * @return {Boolean} + * @api private + */ + +function isObject(obj) { + return null != obj && 'object' == typeof obj; +} + +module.exports = isObject; diff --git a/node_modules/superagent/lib/node/agent.js b/node_modules/superagent/lib/node/agent.js new file mode 100644 index 0000000..a88dfa3 --- /dev/null +++ b/node_modules/superagent/lib/node/agent.js @@ -0,0 +1,82 @@ + +/** + * Module dependencies. + */ + +var CookieJar = require('cookiejar').CookieJar; +var CookieAccess = require('cookiejar').CookieAccessInfo; +var parse = require('url').parse; +var request = require('./index'); +var methods = require('methods'); + +/** + * Expose `Agent`. + */ + +module.exports = Agent; + +/** + * Initialize a new `Agent`. + * + * @api public + */ + +function Agent(options) { + if (!(this instanceof Agent)) return new Agent(options); + if (options) this._ca = options.ca; + this.jar = new CookieJar; +} + +/** + * Save the cookies in the given `res` to + * the agent's cookie jar for persistence. + * + * @param {Response} res + * @api private + */ + +Agent.prototype.saveCookies = function(res){ + var cookies = res.headers['set-cookie']; + if (cookies) this.jar.setCookies(cookies); +}; + +/** + * Attach cookies when available to the given `req`. + * + * @param {Request} req + * @api private + */ + +Agent.prototype.attachCookies = function(req){ + var url = parse(req.url); + var access = CookieAccess(url.hostname, url.pathname, 'https:' == url.protocol); + var cookies = this.jar.getCookies(access).toValueString(); + req.cookies = cookies; +}; + +// generate HTTP verb methods +if (methods.indexOf('del') == -1) { + // create a copy so we don't cause conflicts with + // other packages using the methods package and + // npm 3.x + methods = methods.slice(0); + methods.push('del'); +} +methods.forEach(function(method){ + var name = method; + method = 'del' == method ? 'delete' : method; + + method = method.toUpperCase(); + Agent.prototype[name] = function(url, fn){ + var req = request(method, url); + req.ca(this._ca); + + req.on('response', this.saveCookies.bind(this)); + req.on('redirect', this.saveCookies.bind(this)); + req.on('redirect', this.attachCookies.bind(this, req)); + this.attachCookies(req); + + fn && req.end(fn); + return req; + }; +}); diff --git a/node_modules/superagent/lib/node/index.js b/node_modules/superagent/lib/node/index.js new file mode 100644 index 0000000..c9c8c95 --- /dev/null +++ b/node_modules/superagent/lib/node/index.js @@ -0,0 +1,1093 @@ + +/** + * Module dependencies. + */ + +var debug = require('debug')('superagent'); +var formidable = require('formidable'); +var FormData = require('form-data'); +var Response = require('./response'); +var parse = require('url').parse; +var format = require('url').format; +var resolve = require('url').resolve; +var methods = require('methods'); +var Stream = require('stream'); +var utils = require('./utils'); +var extend = require('extend'); +var Part = require('./part'); +var mime = require('mime'); +var https = require('https'); +var http = require('http'); +var fs = require('fs'); +var qs = require('qs'); +var zlib = require('zlib'); +var util = require('util'); +var pkg = require('../../package.json'); +var requestBase = require('../request-base'); +var isObject = require('../is-object'); + +/** + * Expose the request function. + */ + +var request = exports = module.exports = require('../request').bind(null, Request); + +/** + * Expose the agent function + */ + +exports.agent = require('./agent'); + +/** + * Expose `Part`. + */ + +exports.Part = Part; + +/** + * Noop. + */ + +function noop(){}; + +/** + * Expose `Response`. + */ + +exports.Response = Response; + +/** + * Define "form" mime type. + */ + +mime.define({ + 'application/x-www-form-urlencoded': ['form', 'urlencoded', 'form-data'] +}); + +/** + * Protocol map. + */ + +exports.protocols = { + 'http:': http, + 'https:': https +}; + +/** + * Default serialization map. + * + * superagent.serialize['application/xml'] = function(obj){ + * return 'generated xml here'; + * }; + * + */ + +exports.serialize = { + 'application/x-www-form-urlencoded': qs.stringify, + 'application/json': JSON.stringify +}; + +/** + * Default parsers. + * + * superagent.parse['application/xml'] = function(res, fn){ + * fn(null, res); + * }; + * + */ + +exports.parse = require('./parsers'); + +/** + * Initialize internal header tracking properties on a request instance. + * + * @param {Object} req the instance + * @api private + */ +function _initHeaders(req) { + var ua = 'node-superagent/' + pkg.version; + req._header = { // coerces header names to lowercase + 'user-agent': ua + }; + req.header = { // preserves header name case + 'User-Agent': ua + }; +} + +/** + * Initialize a new `Request` with the given `method` and `url`. + * + * @param {String} method + * @param {String|Object} url + * @api public + */ + +function Request(method, url) { + Stream.call(this); + var self = this; + if ('string' != typeof url) url = format(url); + this._agent = false; + this._formData = null; + this.method = method; + this.url = url; + _initHeaders(this); + this.writable = true; + this._redirects = 0; + this.redirects(5); + this.cookies = ''; + this.qs = {}; + this.qsRaw = []; + this._redirectList = []; + this._streamRequest = false; + this.on('end', this.clearTimeout.bind(this)); +} + +/** + * Inherit from `Stream` (which inherits from `EventEmitter`). + * Mixin `requestBase`. + */ +util.inherits(Request, Stream); +for (var key in requestBase) { + Request.prototype[key] = requestBase[key]; +} + +/** + * Queue the given `file` as an attachment to the specified `field`, + * with optional `filename`. + * + * ``` js + * request.post('http://localhost/upload') + * .attach(new Buffer('Hello world'), 'hello.html') + * .end(callback); + * ``` + * + * A filename may also be used: + * + * ``` js + * request.post('http://localhost/upload') + * .attach('files', 'image.jpg') + * .end(callback); + * ``` + * + * @param {String} field + * @param {String|fs.ReadStream|Buffer} file + * @param {String} filename + * @return {Request} for chaining + * @api public + */ + +Request.prototype.attach = function(field, file, filename){ + if ('string' == typeof file) { + if (!filename) filename = file; + debug('creating `fs.ReadStream` instance for file: %s', file); + file = fs.createReadStream(file); + } else if (!filename && file.path) { + filename = file.path; + } + this._getFormData().append(field, file, { filename: filename }); + return this; +}; + +Request.prototype._getFormData = function() { + if (!this._formData) { + this._formData = new FormData(); + this._formData.on('error', function(err) { + this.emit('error', err); + this.abort(); + }.bind(this)); + } + return this._formData; +}; + +/** + * Set the max redirects to `n`. + * + * @param {Number} n + * @return {Request} for chaining + * @api public + */ + +Request.prototype.redirects = function(n){ + debug('max redirects %s', n); + this._maxRedirects = n; + return this; +}; + +/** + * Return a new `Part` for this request. + * + * @return {Part} + * @api public + * @deprecated pass a readable stream in to `Request#attach()` instead + */ + +Request.prototype.part = util.deprecate(function(){ + return new Part(this); +}, '`Request#part()` is deprecated. ' + + 'Pass a readable stream in to `Request#attach()` instead.'); + +/** + * Gets/sets the `Agent` to use for this HTTP request. The default (if this + * function is not called) is to opt out of connection pooling (`agent: false`). + * + * @param {http.Agent} agent + * @return {http.Agent} + * @api public + */ + +Request.prototype.agent = function(agent){ + if (!arguments.length) return this._agent; + this._agent = agent; + return this; +}; + +/** + * Set _Content-Type_ response header passed through `mime.lookup()`. + * + * Examples: + * + * request.post('/') + * .type('xml') + * .send(xmlstring) + * .end(callback); + * + * request.post('/') + * .type('json') + * .send(jsonstring) + * .end(callback); + * + * request.post('/') + * .type('application/json') + * .send(jsonstring) + * .end(callback); + * + * @param {String} type + * @return {Request} for chaining + * @api public + */ + +Request.prototype.type = function(type){ + return this.set('Content-Type', ~type.indexOf('/') + ? type + : mime.lookup(type)); +}; + +/** + * Set _Accept_ response header passed through `mime.lookup()`. + * + * Examples: + * + * superagent.types.json = 'application/json'; + * + * request.get('/agent') + * .accept('json') + * .end(callback); + * + * request.get('/agent') + * .accept('application/json') + * .end(callback); + * + * @param {String} accept + * @return {Request} for chaining + * @api public + */ + +Request.prototype.accept = function(type){ + return this.set('Accept', ~type.indexOf('/') + ? type + : mime.lookup(type)); +}; + +/** + * Add query-string `val`. + * + * Examples: + * + * request.get('/shoes') + * .query('size=10') + * .query({ color: 'blue' }) + * + * @param {Object|String} val + * @return {Request} for chaining + * @api public + */ + +Request.prototype.query = function(val){ + if ('string' == typeof val) { + this.qsRaw.push(val); + return this; + } + + extend(this.qs, val); + return this; +}; + +/** + * Send `data` as the request body, defaulting the `.type()` to "json" when + * an object is given. + * + * Examples: + * + * // manual json + * request.post('/user') + * .type('json') + * .send('{"name":"tj"}') + * .end(callback) + * + * // auto json + * request.post('/user') + * .send({ name: 'tj' }) + * .end(callback) + * + * // manual x-www-form-urlencoded + * request.post('/user') + * .type('form') + * .send('name=tj') + * .end(callback) + * + * // auto x-www-form-urlencoded + * request.post('/user') + * .type('form') + * .send({ name: 'tj' }) + * .end(callback) + * + * // string defaults to x-www-form-urlencoded + * request.post('/user') + * .send('name=tj') + * .send('foo=bar') + * .send('bar=baz') + * .end(callback) + * + * @param {String|Object} data + * @return {Request} for chaining + * @api public + */ + +Request.prototype.send = function(data){ + var obj = isObject(data); + var type = this._header['content-type']; + // merge + if (obj && isObject(this._data)) { + for (var key in data) { + this._data[key] = data[key]; + } + // string + } else if ('string' == typeof data) { + // default to x-www-form-urlencoded + if (!type) this.type('form'); + type = this._header['content-type']; + + // concat & + if ('application/x-www-form-urlencoded' == type) { + this._data = this._data + ? this._data + '&' + data + : data; + } else { + this._data = (this._data || '') + data; + } + } else { + this._data = data; + } + + if (!obj) return this; + + // default to json + if (!type) this.type('json'); + return this; +}; + +/** + * Write raw `data` / `encoding` to the socket. + * + * @param {Buffer|String} data + * @param {String} encoding + * @return {Boolean} + * @api public + */ + +Request.prototype.write = function(data, encoding){ + var req = this.request(); + if (!this._streamRequest) { + this._streamRequest = true; + try { + // ensure querystring is appended before headers are sent + this.appendQueryString(req); + } catch (e) { + return this.emit('error', e); + } + } + return req.write(data, encoding); +}; + +/** + * Pipe the request body to `stream`. + * + * @param {Stream} stream + * @param {Object} options + * @return {Stream} + * @api public + */ + +Request.prototype.pipe = function(stream, options){ + this.piped = true; // HACK... + this.buffer(false); + var self = this; + this.end().req.on('response', function(res){ + // redirect + var redirect = isRedirect(res.statusCode); + if (redirect && self._redirects++ != self._maxRedirects) { + return self.redirect(res).pipe(stream, options); + } + + if (self._shouldUnzip(res)) { + res.pipe(zlib.createUnzip()).pipe(stream, options); + } else { + res.pipe(stream, options); + } + res.on('end', function(){ + self.emit('end'); + }); + }); + return stream; +}; + +/** + * Enable / disable buffering. + * + * @return {Boolean} [val] + * @return {Request} for chaining + * @api public + */ + +Request.prototype.buffer = function(val){ + this._buffer = false === val + ? false + : true; + return this; +}; + +/** + * Abort and clear timeout. + * + * @api public + */ + +Request.prototype.abort = function(){ + debug('abort %s %s', this.method, this.url); + this._aborted = true; + this.clearTimeout(); + this.req.abort(); + this.emit('abort'); +}; + +/** + * Redirect to `url + * + * @param {IncomingMessage} res + * @return {Request} for chaining + * @api private + */ + +Request.prototype.redirect = function(res){ + var url = res.headers.location; + if (!url) { + return this.callback(new Error('No location header for redirect'), res); + } + + debug('redirect %s -> %s', this.url, url); + + // location + url = resolve(this.url, url); + + // ensure the response is being consumed + // this is required for Node v0.10+ + res.resume(); + + var headers = this.req._headers; + + var shouldStripCookie = parse(url).host !== parse(this.url).host; + + // implementation of 302 following defacto standard + if (res.statusCode == 301 || res.statusCode == 302){ + // strip Content-* related fields + // in case of POST etc + headers = utils.cleanHeader(this.req._headers, shouldStripCookie); + + // force GET + this.method = 'HEAD' == this.method + ? 'HEAD' + : 'GET'; + + // clear data + this._data = null; + } + // 303 is always GET + if (res.statusCode == 303) { + // strip Content-* related fields + // in case of POST etc + headers = utils.cleanHeader(this.req._headers, shouldStripCookie); + + // force method + this.method = 'GET'; + + // clear data + this._data = null; + } + // 307 preserves method + // 308 preserves method + delete headers.host; + + delete this.req; + delete this._formData; + + // remove all add header except User-Agent + _initHeaders(this) + + // redirect + this.url = url; + this._redirectList.push(url); + this.emit('redirect', res); + this.qs = {}; + this.qsRaw = []; + this.set(headers); + this.end(this._callback); + return this; +}; + +/** + * Set Authorization field value with `user` and `pass`. + * + * Examples: + * + * .auth('tobi', 'learnboost') + * .auth('tobi:learnboost') + * .auth('tobi') + * + * @param {String} user + * @param {String} pass + * @return {Request} for chaining + * @api public + */ + +Request.prototype.auth = function(user, pass){ + if (1 === arguments.length) pass = ''; + if (!~user.indexOf(':')) user = user + ':'; + var str = new Buffer(user + pass).toString('base64'); + return this.set('Authorization', 'Basic ' + str); +}; + +/** + * Set the certificate authority option for https request. + * + * @param {Buffer | Array} cert + * @return {Request} for chaining + * @api public + */ + +Request.prototype.ca = function(cert){ + this._ca = cert; + return this; +}; + +/** + * Return an http[s] request. + * + * @return {OutgoingMessage} + * @api private + */ + +Request.prototype.request = function(){ + if (this.req) return this.req; + + var self = this; + var options = {}; + var data = this._data; + var url = this.url; + + // default to http:// + if (0 != url.indexOf('http')) url = 'http://' + url; + url = parse(url); + + // options + options.method = this.method; + options.port = url.port; + options.path = url.pathname; + options.host = url.hostname; + options.ca = this._ca; + options.agent = this._agent; + + // initiate request + var mod = exports.protocols[url.protocol]; + + // request + var req = this.req = mod.request(options); + if ('HEAD' != options.method) req.setHeader('Accept-Encoding', 'gzip, deflate'); + this.protocol = url.protocol; + this.host = url.host; + + // expose events + req.on('drain', function(){ self.emit('drain'); }); + + req.on('error', function(err){ + // flag abortion here for out timeouts + // because node will emit a faux-error "socket hang up" + // when request is aborted before a connection is made + if (self._aborted) return; + // if we've recieved a response then we don't want to let + // an error in the request blow up the response + if (self.response) return; + self.callback(err); + }); + + // auth + if (url.auth) { + var auth = url.auth.split(':'); + this.auth(auth[0], auth[1]); + } + + // query + if (url.search) + this.query(url.search.substr(1)); + + // add cookies + if (this.cookies) req.setHeader('Cookie', this.cookies); + + for (var key in this.header) { + req.setHeader(key, this.header[key]); + } + + return req; +}; + +/** + * Invoke the callback with `err` and `res` + * and handle arity check. + * + * @param {Error} err + * @param {Response} res + * @api private + */ + +Request.prototype.callback = function(err, res){ + // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime. + var fn = this._callback || noop; + this.clearTimeout(); + if (this.called) return console.warn('superagent: double callback bug. Upgrade to v3.2+ to fix this'); + this.called = true; + + if (err) { + err.response = res; + } + + // only emit error event if there is a listener + // otherwise we assume the callback to `.end()` will get the error + if (err && this.listeners('error').length > 0) this.emit('error', err); + + if (err) { + return fn(err, res); + } + + if (res && res.status >= 200 && res.status < 300) { + return fn(err, res); + } + + var msg = 'Unsuccessful HTTP response'; + if (res) { + msg = http.STATUS_CODES[res.status] || msg; + } + var new_err = new Error(msg); + new_err.original = err; + new_err.response = res; + new_err.status = (res) ? res.status : undefined; + + fn(err || new_err, res); +}; + +/** + * Compose querystring to append to req.path + * + * @return {String} querystring + * @api private + */ + +Request.prototype.appendQueryString = function(req){ + var querystring = qs.stringify(this.qs, { indices: false }); + querystring += ((querystring.length && this.qsRaw.length) ? '&' : '') + this.qsRaw.join('&'); + req.path += querystring.length + ? (~req.path.indexOf('?') ? '&' : '?') + querystring + : ''; +}; + +/** + * Initiate request, invoking callback `fn(err, res)` + * with an instanceof `Response`. + * + * @param {Function} fn + * @return {Request} for chaining + * @api public + */ + +/** +* Client API parity, irrelevant in a Node context. +* +* @api public +*/ + +Request.prototype.withCredentials = function(){ + return this; +}; + +Request.prototype.end = function(fn){ + var self = this; + var data = this._data; + var req = this.request(); + var buffer = this._buffer; + var method = this.method; + var timeout = this._timeout; + debug('%s %s', this.method, this.url); + + // store callback + this._callback = fn || noop; + + // querystring + try { + this.appendQueryString(req); + } catch (e) { + return this.callback(e); + } + + // timeout + if (timeout && !this._timer) { + debug('timeout %sms %s %s', timeout, this.method, this.url); + this._timer = setTimeout(function(){ + var err = new Error('timeout of ' + timeout + 'ms exceeded'); + err.timeout = timeout; + err.code = 'ECONNABORTED'; + self.abort(); + self.callback(err); + }, timeout); + } + + // body + if ('HEAD' != method && !req._headerSent) { + // serialize stuff + if ('string' != typeof data) { + var contentType = req.getHeader('Content-Type') + // Parse out just the content type from the header (ignore the charset) + if (contentType) contentType = contentType.split(';')[0] + var serialize = exports.serialize[contentType]; + if (!serialize && isJSON(contentType)) serialize = exports.serialize['application/json']; + if (serialize) data = serialize(data); + } + + // content-length + if (data && !req.getHeader('Content-Length')) { + req.setHeader('Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data)); + } + } + + // response + req.on('response', function(res){ + debug('%s %s -> %s', self.method, self.url, res.statusCode); + var max = self._maxRedirects; + var mime = utils.type(res.headers['content-type'] || '') || 'text/plain'; + var len = res.headers['content-length']; + var type = mime.split('/'); + var subtype = type[1]; + var type = type[0]; + var multipart = 'multipart' == type; + var redirect = isRedirect(res.statusCode); + var parser = self._parser; + + self.res = res; + + if ('HEAD' == self.method) { + var response = new Response(self); + self.response = response; + response.redirects = self._redirectList; + self.emit('response', response); + self.callback(null, response); + self.emit('end'); + return; + } + + if (self.piped) { + return; + } + + // redirect + if (redirect && self._redirects++ != max) { + return self.redirect(res); + } + + // zlib support + if (self._shouldUnzip(res)) { + utils.unzip(req, res); + } + + + // don't buffer multipart + if (multipart) buffer = false; + + // TODO: make all parsers take callbacks + if (!parser && multipart) { + var form = new formidable.IncomingForm; + + form.parse(res, function(err, fields, files){ + if (err) return self.callback(err); + var response = new Response(self); + self.response = response; + response.body = fields; + response.files = files; + response.redirects = self._redirectList; + self.emit('end'); + self.callback(null, response); + }); + return; + } + + // check for images, one more special treatment + if (!parser && isImage(mime)) { + exports.parse.image(res, function(err, obj){ + if (err) return self.callback(err); + var response = new Response(self); + self.response = response; + response.body = obj; + response.redirects = self._redirectList; + self.emit('end'); + self.callback(null, response); + }); + return; + } + + // by default only buffer text/*, json and messed up thing from hell + if (null == buffer && isText(mime) || isJSON(mime)) buffer = true; + + // parser + var parse = 'text' == type + ? exports.parse.text + : exports.parse[mime]; + + // everyone wants their own white-labeled json + if (!parse && isJSON(mime)) parse = exports.parse['application/json']; + + // buffered response + if (buffer) parse = parse || exports.parse.text; + + // explicit parser + if (parser) parse = parser; + + // parse + if (parse) { + try { + parse(res, function(err, obj){ + if (err && !self._aborted) self.callback(err); + res.body = obj; + }); + } catch (err) { + self.callback(err); + return; + } + } + + // unbuffered + if (!buffer) { + debug('unbuffered %s %s', self.method, self.url); + self.res = res; + var response = new Response(self); + self.response = response; + response.redirects = self._redirectList; + self.emit('response', response); + self.callback(null, response); + if (multipart) return // allow multipart to handle end event + res.on('end', function(){ + debug('end %s %s', self.method, self.url); + self.emit('end'); + }) + return; + } + + // terminating events + self.res = res; + res.on('error', function(err){ + self.callback(err, null); + }); + res.on('end', function(){ + debug('end %s %s', self.method, self.url); + // TODO: unless buffering emit earlier to stream + var response = new Response(self); + self.response = response; + response.redirects = self._redirectList; + self.emit('response', response); + self.callback(null, response); + self.emit('end'); + }); + }); + + this.emit('request', this); + + // if a FormData instance got created, then we send that as the request body + var formData = this._formData; + if (formData) { + + // set headers + var headers = formData.getHeaders(); + for (var i in headers) { + debug('setting FormData header: "%s: %s"', i, headers[i]); + req.setHeader(i, headers[i]); + } + + // attempt to get "Content-Length" header + formData.getLength(function(err, length) { + // TODO: Add chunked encoding when no length (if err) + + debug('got FormData Content-Length: %s', length); + if ('number' == typeof length) { + req.setHeader('Content-Length', length); + } + + var getProgressMonitor = function () { + var lengthComputable = true; + var total = req.getHeader('Content-Length'); + var loaded = 0; + + var progress = new Stream.Transform(); + progress._transform = function (chunk, encoding, cb) { + loaded += chunk.length; + self.emit('progress', { + direction: 'upload', + lengthComputable: lengthComputable, + loaded: loaded, + total: total + }); + cb(null, chunk); + }; + return progress; + }; + formData.pipe(getProgressMonitor()).pipe(req); + }); + } else { + req.end(data); + } + + return this; +}; + +/** + * Check whether response has a non-0-sized gzip-encoded body + */ +Request.prototype._shouldUnzip = function(res){ + if (res.statusCode === 204 || res.statusCode === 304) { + // These aren't supposed to have any body + return false; + } + + // header content is a string, and distinction between 0 and no information is crucial + if ('0' === res.headers['content-length']) { + // We know that the body is empty (unfortunately, this check does not cover chunked encoding) + return false; + } + + // console.log(res); + return /^\s*(?:deflate|gzip)\s*$/.test(res.headers['content-encoding']); +}; + +/** + * To json. + * + * @return {Object} + * @api public + */ + +Request.prototype.toJSON = function(){ + return { + method: this.method, + url: this.url, + data: this._data + }; +}; + +/** + * Expose `Request`. + */ + +exports.Request = Request; + +// generate HTTP verb methods +if (methods.indexOf('del') == -1) { + // create a copy so we don't cause conflicts with + // other packages using the methods package and + // npm 3.x + methods = methods.slice(0); + methods.push('del'); +} +methods.forEach(function(method){ + var name = method; + method = 'del' == method ? 'delete' : method; + + method = method.toUpperCase(); + request[name] = function(url, data, fn){ + var req = request(method, url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + fn && req.end(fn); + return req; + }; +}); + +/** + * Check if `mime` is text and should be buffered. + * + * @param {String} mime + * @return {Boolean} + * @api public + */ + +function isText(mime) { + var parts = mime.split('/'); + var type = parts[0]; + var subtype = parts[1]; + + return 'text' == type + || 'x-www-form-urlencoded' == subtype; +} + +/** + * Check if `mime` is image + * + * @param {String} mime + * @return {Boolean} + * @api public + */ + +function isImage(mime) { + var parts = mime.split('/'); + var type = parts[0]; + var subtype = parts[1]; + + return 'image' == type; +} + +/** + * Check if `mime` is json or has +json structured syntax suffix. + * + * @param {String} mime + * @return {Boolean} + * @api private + */ + +function isJSON(mime) { + return /[\/+]json\b/.test(mime); +} + +/** + * Check if we should follow the redirect `code`. + * + * @param {Number} code + * @return {Boolean} + * @api private + */ + +function isRedirect(code) { + return ~[301, 302, 303, 305, 307, 308].indexOf(code); +} diff --git a/node_modules/superagent/lib/node/parsers/image.js b/node_modules/superagent/lib/node/parsers/image.js new file mode 100644 index 0000000..b3e0ebc --- /dev/null +++ b/node_modules/superagent/lib/node/parsers/image.js @@ -0,0 +1,10 @@ +module.exports = function(res, fn){ + var data = []; // Binary data needs binary storage + + res.on('data', function(chunk){ + data.push(chunk); + }); + res.on('end', function () { + fn(null, Buffer.concat(data)); + }); +}; \ No newline at end of file diff --git a/node_modules/superagent/lib/node/parsers/index.js b/node_modules/superagent/lib/node/parsers/index.js new file mode 100644 index 0000000..61a98cd --- /dev/null +++ b/node_modules/superagent/lib/node/parsers/index.js @@ -0,0 +1,5 @@ + +exports['application/x-www-form-urlencoded'] = require('./urlencoded'); +exports['application/json'] = require('./json'); +exports.text = require('./text'); +exports.image = require('./image'); diff --git a/node_modules/superagent/lib/node/parsers/json.js b/node_modules/superagent/lib/node/parsers/json.js new file mode 100644 index 0000000..b71662d --- /dev/null +++ b/node_modules/superagent/lib/node/parsers/json.js @@ -0,0 +1,19 @@ + +module.exports = function parseJSON(res, fn){ + res.text = ''; + res.setEncoding('utf8'); + res.on('data', function(chunk){ res.text += chunk;}); + res.on('end', function(){ + try { + var body = res.text && JSON.parse(res.text); + } catch (e) { + var err = e; + // issue #675: return the raw response if the response parsing fails + err.rawResponse = res.text || null; + // issue #876: return the http status code if the response parsing fails + err.statusCode = res.statusCode; + } finally { + fn(err, body); + } + }); +}; diff --git a/node_modules/superagent/lib/node/parsers/text.js b/node_modules/superagent/lib/node/parsers/text.js new file mode 100644 index 0000000..03575c6 --- /dev/null +++ b/node_modules/superagent/lib/node/parsers/text.js @@ -0,0 +1,7 @@ + +module.exports = function(res, fn){ + res.text = ''; + res.setEncoding('utf8'); + res.on('data', function(chunk){ res.text += chunk; }); + res.on('end', fn); +}; \ No newline at end of file diff --git a/node_modules/superagent/lib/node/parsers/urlencoded.js b/node_modules/superagent/lib/node/parsers/urlencoded.js new file mode 100644 index 0000000..245c665 --- /dev/null +++ b/node_modules/superagent/lib/node/parsers/urlencoded.js @@ -0,0 +1,19 @@ + +/** + * Module dependencies. + */ + +var qs = require('qs'); + +module.exports = function(res, fn){ + res.text = ''; + res.setEncoding('ascii'); + res.on('data', function(chunk){ res.text += chunk; }); + res.on('end', function(){ + try { + fn(null, qs.parse(res.text)); + } catch (err) { + fn(err); + } + }); +}; \ No newline at end of file diff --git a/node_modules/superagent/lib/node/part.js b/node_modules/superagent/lib/node/part.js new file mode 100644 index 0000000..d7123bb --- /dev/null +++ b/node_modules/superagent/lib/node/part.js @@ -0,0 +1,149 @@ + +/** + * Module dependencies. + */ + +var util = require('util'); +var mime = require('mime'); +var FormData = require('form-data'); +var PassThrough = require('readable-stream/passthrough'); + +/** + * Initialize a new `Part` for the given `req`. + * + * @param {Request} req + * @api public + * @deprecated pass a readable stream in to `Request#attach()` instead + */ + +var Part = function (req) { + PassThrough.call(this); + this._req = req; + this._attached = false; + this._name = null; + this._type = null; + this._header = null; + this._filename = null; + + this.once('pipe', this._attach.bind(this)); +}; +Part = util.deprecate(Part, 'The `Part()` constructor is deprecated. ' + + 'Pass a readable stream in to `Request#attach()` instead.'); + +/** + * Inherit from `PassThrough`. + */ + +util.inherits(Part, PassThrough); + +/** + * Expose `Part`. + */ + +module.exports = Part; + +/** + * Set header `field` to `val`. + * + * @param {String} field + * @param {String} val + * @return {Part} for chaining + * @api public + */ + +Part.prototype.set = function(field, val){ + //if (!this._header) this._header = {}; + //this._header[field] = val; + //return this; + throw new TypeError('setting custom form-data part headers is unsupported'); +}; + +/** + * Set _Content-Type_ response header passed through `mime.lookup()`. + * + * Examples: + * + * res.type('html'); + * res.type('.html'); + * + * @param {String} type + * @return {Part} for chaining + * @api public + */ + +Part.prototype.type = function(type){ + var lookup = mime.lookup(type); + this._type = lookup; + //this.set('Content-Type', lookup); + return this; +}; + +/** + * Set the "name" portion for the _Content-Disposition_ header field. + * + * @param {String} name + * @return {Part} for chaining + * @api public + */ + +Part.prototype.name = function(name){ + this._name = name; + return this; +}; + +/** + * Set _Content-Disposition_ header field to _attachment_ with `filename` + * and field `name`. + * + * @param {String} name + * @param {String} filename + * @return {Part} for chaining + * @api public + */ + +Part.prototype.attachment = function(name, filename){ + this.name(name); + if (filename) { + this.type(filename); + this._filename = filename; + } + return this; +}; + +/** + * Calls `FormData#append()` on the Request instance's FormData object. + * + * Gets called implicitly upon the first `write()` call, or the "pipe" event. + * + * @api private + */ + +Part.prototype._attach = function(){ + if (this._attached) return; + this._attached = true; + + if (!this._name) throw new Error('must call `Part#name()` first!'); + + // add `this` Stream's readable side as a stream for this Part + this._req._getFormData().append(this._name, this, { + contentType: this._type, + filename: this._filename + }); + + // restore PassThrough's default `write()` function now that we're setup + this.write = PassThrough.prototype.write; +}; + +/** + * Write `data` with `encoding`. + * + * @param {Buffer|String} data + * @param {String} encoding + * @return {Boolean} + * @api public + */ + +Part.prototype.write = function(){ + this._attach(); + return this.write.apply(this, arguments); +}; diff --git a/node_modules/superagent/lib/node/response.js b/node_modules/superagent/lib/node/response.js new file mode 100644 index 0000000..b30c28b --- /dev/null +++ b/node_modules/superagent/lib/node/response.js @@ -0,0 +1,210 @@ + +/** + * Module dependencies. + */ + +var util = require('util'); +var utils = require('./utils'); +var Stream = require('stream'); + +/** + * Expose `Response`. + */ + +module.exports = Response; + +/** + * Initialize a new `Response` with the given `xhr`. + * + * - set flags (.ok, .error, etc) + * - parse header + * + * @param {Request} req + * @param {Object} options + * @constructor + * @extends {Stream} + * @implements {ReadableStream} + * @api private + */ + +function Response(req, options) { + Stream.call(this); + options = options || {}; + var res = this.res = req.res; + this.request = req; + this.req = req.req; + this.links = {}; + this.text = res.text; + this.body = res.body !== undefined ? res.body : {}; + this.files = res.files || {}; + this.buffered = 'string' == typeof this.text; + this.header = this.headers = res.headers; + this.setStatusProperties(res.statusCode); + this.setHeaderProperties(this.header); + this.setEncoding = res.setEncoding.bind(res); + res.on('data', this.emit.bind(this, 'data')); + res.on('end', this.emit.bind(this, 'end')); + res.on('close', this.emit.bind(this, 'close')); + res.on('error', this.emit.bind(this, 'error')); +} + +/** + * Inherit from `Stream`. + */ + +util.inherits(Response, Stream); + +/** + * Get case-insensitive `field` value. + * + * @param {String} field + * @return {String} + * @api public + */ + +Response.prototype.get = function(field){ + return this.header[field.toLowerCase()]; +}; + +/** + * Implements methods of a `ReadableStream` + */ + +Response.prototype.destroy = function(err){ + this.res.destroy(err); +}; + +/** + * Pause. + */ + +Response.prototype.pause = function(){ + this.res.pause(); +}; + +/** + * Resume. + */ + +Response.prototype.resume = function(){ + this.res.resume(); +}; + +/** + * Return an `Error` representative of this response. + * + * @return {Error} + * @api public + */ + +Response.prototype.toError = function(){ + var req = this.req; + var method = req.method; + var path = req.path; + + var msg = 'cannot ' + method + ' ' + path + ' (' + this.status + ')'; + var err = new Error(msg); + err.status = this.status; + err.text = this.text; + err.method = method; + err.path = path; + + return err; +}; + +/** + * Set header related properties: + * + * - `.type` the content type without params + * + * A response of "Content-Type: text/plain; charset=utf-8" + * will provide you with a `.type` of "text/plain". + * + * @param {Object} header + * @api private + */ + +Response.prototype.setHeaderProperties = function(header){ + // TODO: moar! + // TODO: make this a util + + // content-type + var ct = this.header['content-type'] || ''; + + // params + var params = utils.params(ct); + for (var key in params) this[key] = params[key]; + + this.type = utils.type(ct); + + // links + try { + if (header.link) this.links = utils.parseLinks(header.link); + } catch (err) { + // ignore + } +}; + +/** + * Set flags such as `.ok` based on `status`. + * + * For example a 2xx response will give you a `.ok` of __true__ + * whereas 5xx will be __false__ and `.error` will be __true__. The + * `.clientError` and `.serverError` are also available to be more + * specific, and `.statusType` is the class of error ranging from 1..5 + * sometimes useful for mapping respond colors etc. + * + * "sugar" properties are also defined for common cases. Currently providing: + * + * - .noContent + * - .badRequest + * - .unauthorized + * - .notAcceptable + * - .notFound + * + * @param {Number} status + * @api private + */ + +Response.prototype.setStatusProperties = function(status){ + var type = status / 100 | 0; + + // status / class + this.status = this.statusCode = status; + this.statusType = type; + + // basics + this.info = 1 == type; + this.ok = 2 == type; + this.redirect = 3 == type; + this.clientError = 4 == type; + this.serverError = 5 == type; + this.error = (4 == type || 5 == type) + ? this.toError() + : false; + + // sugar + this.accepted = 202 == status; + this.noContent = 204 == status; + this.badRequest = 400 == status; + this.unauthorized = 401 == status; + this.notAcceptable = 406 == status; + this.forbidden = 403 == status; + this.notFound = 404 == status; +}; + +/** + * To json. + * + * @return {Object} + * @api public + */ + +Response.prototype.toJSON = function(){ + return { + req: this.request.toJSON(), + header: this.header, + status: this.status, + text: this.text + }; +}; diff --git a/node_modules/superagent/lib/node/utils.js b/node_modules/superagent/lib/node/utils.js new file mode 100644 index 0000000..822929e --- /dev/null +++ b/node_modules/superagent/lib/node/utils.js @@ -0,0 +1,142 @@ + +/** + * Module dependencies. + */ + +var StringDecoder = require('string_decoder').StringDecoder; +var Stream = require('stream'); +var zlib; + +/** + * Require zlib module for Node 0.6+ + */ + +try { + zlib = require('zlib'); +} catch (e) { } + +/** + * Return the mime type for the given `str`. + * + * @param {String} str + * @return {String} + * @api private + */ + +exports.type = function(str){ + return str.split(/ *; */).shift(); +}; + +/** + * Return header field parameters. + * + * @param {String} str + * @return {Object} + * @api private + */ + +exports.params = function(str){ + return str.split(/ *; */).reduce(function(obj, str){ + var parts = str.split(/ *= */); + var key = parts.shift(); + var val = parts.shift(); + + if (key && val) obj[key] = val; + return obj; + }, {}); +}; + +/** + * Parse Link header fields. + * + * @param {String} str + * @return {Object} + * @api private + */ + +exports.parseLinks = function(str){ + return str.split(/ *, */).reduce(function(obj, str){ + var parts = str.split(/ *; */); + var url = parts[0].slice(1, -1); + var rel = parts[1].split(/ *= */)[1].slice(1, -1); + obj[rel] = url; + return obj; + }, {}); +}; + +/** + * Buffers response data events and re-emits when they're unzipped. + * + * @param {Request} req + * @param {Response} res + * @api private + */ + +exports.unzip = function(req, res){ + if (!zlib) return; + + var unzip = zlib.createUnzip(); + var stream = new Stream; + var decoder; + + // make node responseOnEnd() happy + stream.req = req; + + unzip.on('error', function(err){ + stream.emit('error', err); + }); + + // pipe to unzip + res.pipe(unzip); + + // override `setEncoding` to capture encoding + res.setEncoding = function(type){ + decoder = new StringDecoder(type); + }; + + // decode upon decompressing with captured encoding + unzip.on('data', function(buf){ + if (decoder) { + var str = decoder.write(buf); + if (str.length) stream.emit('data', str); + } else { + stream.emit('data', buf); + } + }); + + unzip.on('end', function(){ + stream.emit('end'); + }); + + // override `on` to capture data listeners + var _on = res.on; + res.on = function(type, fn){ + if ('data' == type || 'end' == type) { + stream.on(type, fn); + } else if ('error' == type) { + stream.on(type, fn); + _on.call(res, type, fn); + } else { + _on.call(res, type, fn); + } + }; +}; + +/** + * Strip content related fields from `header`. + * + * @param {Object} header + * @return {Object} header + * @api private + */ + +exports.cleanHeader = function(header, shouldStripCookie){ + delete header['content-type']; + delete header['content-length']; + delete header['transfer-encoding']; + delete header['host']; + if (shouldStripCookie) { + delete header['cookie']; + } + return header; +}; diff --git a/node_modules/superagent/lib/request-base.js b/node_modules/superagent/lib/request-base.js new file mode 100644 index 0000000..e923cef --- /dev/null +++ b/node_modules/superagent/lib/request-base.js @@ -0,0 +1,166 @@ +/** + * Module of mixed-in functions shared between node and client code + */ +var isObject = require('./is-object'); + +/** + * Clear previous timeout. + * + * @return {Request} for chaining + * @api public + */ + +exports.clearTimeout = function _clearTimeout(){ + this._timeout = 0; + clearTimeout(this._timer); + return this; +}; + +/** + * Force given parser + * + * Sets the body parser no matter type. + * + * @param {Function} + * @api public + */ + +exports.parse = function parse(fn){ + this._parser = fn; + return this; +}; + +/** + * Set timeout to `ms`. + * + * @param {Number} ms + * @return {Request} for chaining + * @api public + */ + +exports.timeout = function timeout(ms){ + this._timeout = ms; + return this; +}; + +/** + * Faux promise support + * + * @param {Function} fulfill + * @param {Function} reject + * @return {Request} + */ + +exports.then = function then(fulfill, reject) { + return this.end(function(err, res) { + err ? reject(err) : fulfill(res); + }); +} + +/** + * Allow for extension + */ + +exports.use = function use(fn) { + fn(this); + return this; +} + + +/** + * Get request header `field`. + * Case-insensitive. + * + * @param {String} field + * @return {String} + * @api public + */ + +exports.get = function(field){ + return this._header[field.toLowerCase()]; +}; + +/** + * Get case-insensitive header `field` value. + * This is a deprecated internal API. Use `.get(field)` instead. + * + * (getHeader is no longer used internally by the superagent code base) + * + * @param {String} field + * @return {String} + * @api private + * @deprecated + */ + +exports.getHeader = exports.get; + +/** + * Set header `field` to `val`, or multiple fields with one object. + * Case-insensitive. + * + * Examples: + * + * req.get('/') + * .set('Accept', 'application/json') + * .set('X-API-Key', 'foobar') + * .end(callback); + * + * req.get('/') + * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' }) + * .end(callback); + * + * @param {String|Object} field + * @param {String} val + * @return {Request} for chaining + * @api public + */ + +exports.set = function(field, val){ + if (isObject(field)) { + for (var key in field) { + this.set(key, field[key]); + } + return this; + } + this._header[field.toLowerCase()] = val; + this.header[field] = val; + return this; +}; + +/** + * Remove header `field`. + * Case-insensitive. + * + * Example: + * + * req.get('/') + * .unset('User-Agent') + * .end(callback); + * + * @param {String} field + */ +exports.unset = function(field){ + delete this._header[field.toLowerCase()]; + delete this.header[field]; + return this; +}; + +/** + * Write the field `name` and `val` for "multipart/form-data" + * request bodies. + * + * ``` js + * request.post('/upload') + * .field('foo', 'bar') + * .end(callback); + * ``` + * + * @param {String} name + * @param {String|Blob|File|Buffer|fs.ReadStream} val + * @return {Request} for chaining + * @api public + */ +exports.field = function(name, val) { + this._getFormData().append(name, val); + return this; +}; diff --git a/node_modules/superagent/lib/request.js b/node_modules/superagent/lib/request.js new file mode 100644 index 0000000..53a3e6a --- /dev/null +++ b/node_modules/superagent/lib/request.js @@ -0,0 +1,32 @@ +// The node and browser modules expose versions of this with the +// appropriate constructor function bound as first argument +/** + * Issue a request: + * + * Examples: + * + * request('GET', '/users').end(callback) + * request('/users').end(callback) + * request('/users', callback) + * + * @param {String} method + * @param {String|Function} url or callback + * @return {Request} + * @api public + */ + +function request(RequestConstructor, method, url) { + // callback + if ('function' == typeof url) { + return new RequestConstructor('GET', method).end(url); + } + + // url first + if (2 == arguments.length) { + return new RequestConstructor('GET', method); + } + + return new RequestConstructor(method, url); +} + +module.exports = request; diff --git a/node_modules/superagent/node_modules/debug/.coveralls.yml b/node_modules/superagent/node_modules/debug/.coveralls.yml new file mode 100644 index 0000000..20a7068 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/.coveralls.yml @@ -0,0 +1 @@ +repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve diff --git a/node_modules/superagent/node_modules/debug/.eslintrc b/node_modules/superagent/node_modules/debug/.eslintrc new file mode 100644 index 0000000..8a37ae2 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/.eslintrc @@ -0,0 +1,11 @@ +{ + "env": { + "browser": true, + "node": true + }, + "rules": { + "no-console": 0, + "no-empty": [1, { "allowEmptyCatch": true }] + }, + "extends": "eslint:recommended" +} diff --git a/node_modules/superagent/node_modules/debug/.npmignore b/node_modules/superagent/node_modules/debug/.npmignore new file mode 100644 index 0000000..db2fbb9 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/.npmignore @@ -0,0 +1,8 @@ +support +test +examples +example +*.sock +dist +yarn.lock +coverage diff --git a/node_modules/superagent/node_modules/debug/.travis.yml b/node_modules/superagent/node_modules/debug/.travis.yml new file mode 100644 index 0000000..6c6090c --- /dev/null +++ b/node_modules/superagent/node_modules/debug/.travis.yml @@ -0,0 +1,14 @@ + +language: node_js +node_js: + - "6" + - "5" + - "4" + +install: + - make node_modules + +script: + - make lint + - make test + - make coveralls diff --git a/node_modules/superagent/node_modules/debug/CHANGELOG.md b/node_modules/superagent/node_modules/debug/CHANGELOG.md new file mode 100644 index 0000000..07ba539 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/CHANGELOG.md @@ -0,0 +1,330 @@ + +2.6.3 / 2017-03-13 +================== + + * Fix: Fix for electron reference to `process.env.DEBUG` (#431, @paulcbetts) + * Docs: Changelog fix (@thebigredgeeK) + +2.6.2 / 2017-03-10 +================== + + * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) + * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) + * Docs: Add Slackin invite badge (@tootallnate) + +2.6.1 / 2017-02-10 +================== + + * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error + * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) + * Fix: IE8 "Expected identifier" error (#414, @vgoma) + * Fix: Namespaces would not disable once enabled (#409, @musikov) + +2.6.0 / 2016-12-28 +================== + + * Fix: added better null pointer checks for browser useColors (@thebigredgeek) + * Improvement: removed explicit `window.debug` export (#404, @tootallnate) + * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) + +2.5.2 / 2016-12-25 +================== + + * Fix: reference error on window within webworkers (#393, @KlausTrainer) + * Docs: fixed README typo (#391, @lurch) + * Docs: added notice about v3 api discussion (@thebigredgeek) + +2.5.1 / 2016-12-20 +================== + + * Fix: babel-core compatibility + +2.5.0 / 2016-12-20 +================== + + * Fix: wrong reference in bower file (@thebigredgeek) + * Fix: webworker compatibility (@thebigredgeek) + * Fix: output formatting issue (#388, @kribblo) + * Fix: babel-loader compatibility (#383, @escwald) + * Misc: removed built asset from repo and publications (@thebigredgeek) + * Misc: moved source files to /src (#378, @yamikuronue) + * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) + * Test: coveralls integration (#378, @yamikuronue) + * Docs: simplified language in the opening paragraph (#373, @yamikuronue) + +2.4.5 / 2016-12-17 +================== + + * Fix: `navigator` undefined in Rhino (#376, @jochenberger) + * Fix: custom log function (#379, @hsiliev) + * Improvement: bit of cleanup + linting fixes (@thebigredgeek) + * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) + * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) + +2.4.4 / 2016-12-14 +================== + + * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) + +2.4.3 / 2016-12-14 +================== + + * Fix: navigation.userAgent error for react native (#364, @escwald) + +2.4.2 / 2016-12-14 +================== + + * Fix: browser colors (#367, @tootallnate) + * Misc: travis ci integration (@thebigredgeek) + * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) + +2.4.1 / 2016-12-13 +================== + + * Fix: typo that broke the package (#356) + +2.4.0 / 2016-12-13 +================== + + * Fix: bower.json references unbuilt src entry point (#342, @justmatt) + * Fix: revert "handle regex special characters" (@tootallnate) + * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) + * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) + * Improvement: allow colors in workers (#335, @botverse) + * Improvement: use same color for same namespace. (#338, @lchenay) + +2.3.3 / 2016-11-09 +================== + + * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) + * Fix: Returning `localStorage` saved values (#331, Levi Thomason) + * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) + +2.3.2 / 2016-11-09 +================== + + * Fix: be super-safe in index.js as well (@TooTallNate) + * Fix: should check whether process exists (Tom Newby) + +2.3.1 / 2016-11-09 +================== + + * Fix: Added electron compatibility (#324, @paulcbetts) + * Improvement: Added performance optimizations (@tootallnate) + * Readme: Corrected PowerShell environment variable example (#252, @gimre) + * Misc: Removed yarn lock file from source control (#321, @fengmk2) + +2.3.0 / 2016-11-07 +================== + + * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) + * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) + * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) + * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) + * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) + * Package: Update "ms" to 0.7.2 (#315, @DevSide) + * Package: removed superfluous version property from bower.json (#207 @kkirsche) + * Readme: fix USE_COLORS to DEBUG_COLORS + * Readme: Doc fixes for format string sugar (#269, @mlucool) + * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) + * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) + * Readme: better docs for browser support (#224, @matthewmueller) + * Tooling: Added yarn integration for development (#317, @thebigredgeek) + * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) + * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) + * Misc: Updated contributors (@thebigredgeek) + +2.2.0 / 2015-05-09 +================== + + * package: update "ms" to v0.7.1 (#202, @dougwilson) + * README: add logging to file example (#193, @DanielOchoa) + * README: fixed a typo (#191, @amir-s) + * browser: expose `storage` (#190, @stephenmathieson) + * Makefile: add a `distclean` target (#189, @stephenmathieson) + +2.1.3 / 2015-03-13 +================== + + * Updated stdout/stderr example (#186) + * Updated example/stdout.js to match debug current behaviour + * Renamed example/stderr.js to stdout.js + * Update Readme.md (#184) + * replace high intensity foreground color for bold (#182, #183) + +2.1.2 / 2015-03-01 +================== + + * dist: recompile + * update "ms" to v0.7.0 + * package: update "browserify" to v9.0.3 + * component: fix "ms.js" repo location + * changed bower package name + * updated documentation about using debug in a browser + * fix: security error on safari (#167, #168, @yields) + +2.1.1 / 2014-12-29 +================== + + * browser: use `typeof` to check for `console` existence + * browser: check for `console.log` truthiness (fix IE 8/9) + * browser: add support for Chrome apps + * Readme: added Windows usage remarks + * Add `bower.json` to properly support bower install + +2.1.0 / 2014-10-15 +================== + + * node: implement `DEBUG_FD` env variable support + * package: update "browserify" to v6.1.0 + * package: add "license" field to package.json (#135, @panuhorsmalahti) + +2.0.0 / 2014-09-01 +================== + + * package: update "browserify" to v5.11.0 + * node: use stderr rather than stdout for logging (#29, @stephenmathieson) + +1.0.4 / 2014-07-15 +================== + + * dist: recompile + * example: remove `console.info()` log usage + * example: add "Content-Type" UTF-8 header to browser example + * browser: place %c marker after the space character + * browser: reset the "content" color via `color: inherit` + * browser: add colors support for Firefox >= v31 + * debug: prefer an instance `log()` function over the global one (#119) + * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) + +1.0.3 / 2014-07-09 +================== + + * Add support for multiple wildcards in namespaces (#122, @seegno) + * browser: fix lint + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/superagent/node_modules/debug/LICENSE b/node_modules/superagent/node_modules/debug/LICENSE new file mode 100644 index 0000000..658c933 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/LICENSE @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/superagent/node_modules/debug/Makefile b/node_modules/superagent/node_modules/debug/Makefile new file mode 100644 index 0000000..584da8b --- /dev/null +++ b/node_modules/superagent/node_modules/debug/Makefile @@ -0,0 +1,50 @@ +# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 +THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) + +# BIN directory +BIN := $(THIS_DIR)/node_modules/.bin + +# Path +PATH := node_modules/.bin:$(PATH) +SHELL := /bin/bash + +# applications +NODE ?= $(shell which node) +YARN ?= $(shell which yarn) +PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) +BROWSERIFY ?= $(NODE) $(BIN)/browserify + +.FORCE: + +install: node_modules + +node_modules: package.json + @NODE_ENV= $(PKG) install + @touch node_modules + +lint: .FORCE + eslint browser.js debug.js index.js node.js + +test-node: .FORCE + istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + +test-browser: .FORCE + mkdir -p dist + + @$(BROWSERIFY) \ + --standalone debug \ + . > dist/debug.js + + karma start --single-run + rimraf dist + +test: .FORCE + concurrently \ + "make test-node" \ + "make test-browser" + +coveralls: + cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js + +.PHONY: all install clean distclean diff --git a/node_modules/superagent/node_modules/debug/README.md b/node_modules/superagent/node_modules/debug/README.md new file mode 100644 index 0000000..4aeab13 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/README.md @@ -0,0 +1,312 @@ +# debug +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny node.js debugging utility modelled after node core's debugging technique. + +**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)** + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example _app.js_: + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %s', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example _worker.js_: + +```js +var debug = require('debug')('worker'); + +setInterval(function(){ + debug('doing some work'); +}, 1000); +``` + + The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: + + ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) + + ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) + +#### Windows note + + On Windows the environment variable is set using the `set` command. + + ```cmd + set DEBUG=*,-not_this + ``` + + Note that PowerShell uses different syntax to set environment variables. + + ```cmd + $env:DEBUG = "*,-not_this" + ``` + +Then, run the program to be debugged as usual. + +## Millisecond diff + + When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) + + When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: + + ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) + +## Conventions + + If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". + +## Wildcards + + The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + + You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:". + +## Environment Variables + + When running through Node.js, you can set a few environment variables that will + change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disabled specific debugging namespaces. | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + + __Note:__ The environment variables beginning with `DEBUG_` end up being + converted into an Options object that gets used with `%o`/`%O` formatters. + See the Node.js documentation for + [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) + for the complete list. + +## Formatters + + + Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + +### Custom formatters + + You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + +## Browser support + You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), + or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), + if you don't want to build it yourself. + + Debug's enable state is currently persisted by `localStorage`. + Consider the situation shown below where you have `worker:a` and `worker:b`, + and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + +#### Web Inspector Colors + + Colors are also enabled on "Web Inspectors" that understand the `%c` formatting + option. These are WebKit web inspectors, Firefox ([since version + 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) + and the Firebug plugin for Firefox (any version). + + Colored output looks something like: + + ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example _stdout.js_: + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/superagent/node_modules/debug/bower.json b/node_modules/superagent/node_modules/debug/bower.json new file mode 100644 index 0000000..027804c --- /dev/null +++ b/node_modules/superagent/node_modules/debug/bower.json @@ -0,0 +1,29 @@ +{ + "name": "visionmedia-debug", + "main": "./src/browser.js", + "homepage": "https://github.com/visionmedia/debug", + "authors": [ + "TJ Holowaychuk ", + "Nathan Rajlich (http://n8.io)", + "Andrew Rhyne " + ], + "description": "visionmedia-debug", + "moduleType": [ + "amd", + "es6", + "globals", + "node" + ], + "keywords": [ + "visionmedia", + "debug" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} diff --git a/node_modules/superagent/node_modules/debug/component.json b/node_modules/superagent/node_modules/debug/component.json new file mode 100644 index 0000000..e150dc4 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/component.json @@ -0,0 +1,19 @@ +{ + "name": "debug", + "repo": "visionmedia/debug", + "description": "small debugging utility", + "version": "2.6.3", + "keywords": [ + "debug", + "log", + "debugger" + ], + "main": "src/browser.js", + "scripts": [ + "src/browser.js", + "src/debug.js" + ], + "dependencies": { + "rauchg/ms.js": "0.7.1" + } +} diff --git a/node_modules/superagent/node_modules/debug/karma.conf.js b/node_modules/superagent/node_modules/debug/karma.conf.js new file mode 100644 index 0000000..103a82d --- /dev/null +++ b/node_modules/superagent/node_modules/debug/karma.conf.js @@ -0,0 +1,70 @@ +// Karma configuration +// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC) + +module.exports = function(config) { + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['mocha', 'chai', 'sinon'], + + + // list of files / patterns to load in the browser + files: [ + 'dist/debug.js', + 'test/*spec.js' + ], + + + // list of files to exclude + exclude: [ + 'src/node.js' + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['PhantomJS'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }) +} diff --git a/node_modules/superagent/node_modules/debug/node.js b/node_modules/superagent/node_modules/debug/node.js new file mode 100644 index 0000000..7fc36fe --- /dev/null +++ b/node_modules/superagent/node_modules/debug/node.js @@ -0,0 +1 @@ +module.exports = require('./src/node'); diff --git a/node_modules/superagent/node_modules/debug/package.json b/node_modules/superagent/node_modules/debug/package.json new file mode 100644 index 0000000..3230aa7 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/package.json @@ -0,0 +1,124 @@ +{ + "_args": [ + [ + { + "raw": "debug@2", + "scope": null, + "escapedName": "debug", + "name": "debug", + "rawSpec": "2", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/superagent" + ] + ], + "_from": "debug@>=2.0.0 <3.0.0", + "_id": "debug@2.6.3", + "_inCache": true, + "_location": "/superagent/debug", + "_nodeVersion": "6.9.2", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/debug-2.6.3.tgz_1489463433800_0.9440390267409384" + }, + "_npmUser": { + "name": "thebigredgeek", + "email": "rhyneandrew@gmail.com" + }, + "_npmVersion": "3.10.9", + "_phantomChildren": {}, + "_requested": { + "raw": "debug@2", + "scope": null, + "escapedName": "debug", + "name": "debug", + "rawSpec": "2", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/superagent" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", + "_shasum": "0f7eb8c30965ec08c72accfa0130c8b79984141d", + "_shrinkwrap": null, + "_spec": "debug@2", + "_where": "/home/burchettm/statsbot/node_modules/superagent", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "component": { + "scripts": { + "debug/index.js": "browser.js", + "debug/debug.js": "debug.js" + } + }, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "0.7.2" + }, + "description": "small debugging utility", + "devDependencies": { + "browserify": "9.0.3", + "chai": "^3.5.0", + "concurrently": "^3.1.0", + "coveralls": "^2.11.15", + "eslint": "^3.12.1", + "istanbul": "^0.4.5", + "karma": "^1.3.0", + "karma-chai": "^0.1.0", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "karma-sinon": "^1.0.5", + "mocha": "^3.2.0", + "mocha-lcov-reporter": "^1.2.0", + "rimraf": "^2.5.4", + "sinon": "^1.17.6", + "sinon-chai": "^2.8.0" + }, + "directories": {}, + "dist": { + "shasum": "0f7eb8c30965ec08c72accfa0130c8b79984141d", + "tarball": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz" + }, + "gitHead": "9dc30f8378cc12192635cc6a31f0d96bb39be8bb", + "homepage": "https://github.com/visionmedia/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "maintainers": [ + { + "name": "thebigredgeek", + "email": "rhyneandrew@gmail.com" + } + ], + "name": "debug", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "scripts": {}, + "version": "2.6.3" +} diff --git a/node_modules/superagent/node_modules/debug/src/browser.js b/node_modules/superagent/node_modules/debug/src/browser.js new file mode 100644 index 0000000..e21c1e0 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/src/browser.js @@ -0,0 +1,185 @@ +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window && typeof window.process !== 'undefined' && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document && 'WebkitAppearance' in document.documentElement.style) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window && window.console && (console.firebug || (console.exception && console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} diff --git a/node_modules/superagent/node_modules/debug/src/debug.js b/node_modules/superagent/node_modules/debug/src/debug.js new file mode 100644 index 0000000..d5d6d16 --- /dev/null +++ b/node_modules/superagent/node_modules/debug/src/debug.js @@ -0,0 +1,202 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require('ms'); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (namespaces || '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} diff --git a/node_modules/superagent/node_modules/debug/src/index.js b/node_modules/superagent/node_modules/debug/src/index.js new file mode 100644 index 0000000..e12cf4d --- /dev/null +++ b/node_modules/superagent/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process !== 'undefined' && process.type === 'renderer') { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/node_modules/superagent/node_modules/debug/src/node.js b/node_modules/superagent/node_modules/debug/src/node.js new file mode 100644 index 0000000..3c7407b --- /dev/null +++ b/node_modules/superagent/node_modules/debug/src/node.js @@ -0,0 +1,241 @@ +/** + * Module dependencies. + */ + +var tty = require('tty'); +var util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * The file descriptor to write the `debug()` calls to. + * Set the `DEBUG_FD` env variable to override with another value. i.e.: + * + * $ DEBUG_FD=3 node script.js 3>debug.log + */ + +var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + +if (1 !== fd && 2 !== fd) { + util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() +} + +var stream = 1 === fd ? process.stdout : + 2 === fd ? process.stderr : + createWritableStdioStream(fd); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .replace(/\s*\n\s*/g, ' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = new Date().toUTCString() + + ' ' + name + ' ' + args[0]; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to `stream`. + */ + +function log() { + return stream.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Copied from `node/src/node.js`. + * + * XXX: It's lame that node doesn't expose this API out-of-the-box. It also + * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. + */ + +function createWritableStdioStream (fd) { + var stream; + var tty_wrap = process.binding('tty_wrap'); + + // Note stream._type is used for test-module-load-list.js + + switch (tty_wrap.guessHandleType(fd)) { + case 'TTY': + stream = new tty.WriteStream(fd); + stream._type = 'tty'; + + // Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + case 'FILE': + var fs = require('fs'); + stream = new fs.SyncWriteStream(fd, { autoClose: false }); + stream._type = 'fs'; + break; + + case 'PIPE': + case 'TCP': + var net = require('net'); + stream = new net.Socket({ + fd: fd, + readable: false, + writable: true + }); + + // FIXME Should probably have an option in net.Socket to create a + // stream from an existing fd which is writable only. But for now + // we'll just add this hack and set the `readable` member to false. + // Test: ./node test/fixtures/echo.js < /etc/passwd + stream.readable = false; + stream.read = null; + stream._type = 'pipe'; + + // FIXME Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + default: + // Probably an error on in uv_guess_handle() + throw new Error('Implement me. Unknown stream file type!'); + } + + // For supporting legacy API we put the FD here. + stream.fd = fd; + + stream._isStdio = true; + + return stream; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = util._extend({}, exports.inspectOpts); +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); diff --git a/node_modules/superagent/package.json b/node_modules/superagent/package.json new file mode 100644 index 0000000..5b64cc9 --- /dev/null +++ b/node_modules/superagent/package.json @@ -0,0 +1,182 @@ +{ + "_args": [ + [ + { + "raw": "superagent@^1.4.0", + "scope": null, + "escapedName": "superagent", + "name": "superagent", + "rawSpec": "^1.4.0", + "spec": ">=1.4.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/discordie" + ] + ], + "_from": "superagent@>=1.4.0 <2.0.0", + "_id": "superagent@1.8.5", + "_inCache": true, + "_location": "/superagent", + "_nodeVersion": "7.2.1", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/superagent-1.8.5.tgz_1481494456683_0.23376551712863147" + }, + "_npmUser": { + "name": "kornel", + "email": "pornel@pornel.net" + }, + "_npmVersion": "4.0.5", + "_phantomChildren": { + "ms": "0.7.2" + }, + "_requested": { + "raw": "superagent@^1.4.0", + "scope": null, + "escapedName": "superagent", + "name": "superagent", + "rawSpec": "^1.4.0", + "spec": ">=1.4.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/discordie" + ], + "_resolved": "https://registry.npmjs.org/superagent/-/superagent-1.8.5.tgz", + "_shasum": "1c0ddc3af30e80eb84ebc05cb2122da8fe940b55", + "_shrinkwrap": null, + "_spec": "superagent@^1.4.0", + "_where": "/home/burchettm/statsbot/node_modules/discordie", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": { + "./lib/node/index.js": "./lib/client.js", + "emitter": "component-emitter", + "reduce": "reduce-component", + "./test/support/server.js": "./test/support/blank.js" + }, + "bugs": { + "url": "https://github.com/visionmedia/superagent/issues" + }, + "component": { + "scripts": { + "superagent": "lib/client.js" + } + }, + "contributors": [ + { + "name": "Kornel Lesiński", + "email": "kornel@geekhood.net" + }, + { + "name": "Peter Lyons", + "email": "pete@peterlyons.com" + }, + { + "name": "Hunter Loftis", + "email": "hunter@hunterloftis.com" + } + ], + "dependencies": { + "component-emitter": "~1.2.0", + "cookiejar": "2.0.6", + "debug": "2", + "extend": "3.0.0", + "form-data": "1.0.0-rc3", + "formidable": "~1.0.14", + "methods": "~1.1.1", + "mime": "1.3.4", + "qs": "2.3.3", + "readable-stream": "1.0.27-1", + "reduce-component": "1.0.1" + }, + "description": "elegant & feature rich browser / node HTTP with a fluent API", + "devDependencies": { + "Base64": "~0.3.0", + "basic-auth-connect": "~1.0.0", + "better-assert": "~1.0.1", + "body-parser": "~1.9.2", + "browserify": "~6.3.2", + "cookie-parser": "~1.3.3", + "express": "~4.9.8", + "express-session": "~1.9.1", + "marked": "0.3.5", + "mocha": "~2.0.1", + "should": "~3.1.3", + "zuul": "~1.19.0" + }, + "directories": {}, + "dist": { + "shasum": "1c0ddc3af30e80eb84ebc05cb2122da8fe940b55", + "tarball": "https://registry.npmjs.org/superagent/-/superagent-1.8.5.tgz" + }, + "engines": { + "node": ">= 0.8" + }, + "gitHead": "21ce90ec63f33827e7208131dd36a9ac8c6c7d00", + "homepage": "https://github.com/visionmedia/superagent#readme", + "keywords": [ + "http", + "ajax", + "request", + "agent" + ], + "license": "MIT", + "main": "./lib/node/index.js", + "maintainers": [ + { + "name": "defunctzombie", + "email": "shtylman@gmail.com" + }, + { + "name": "kof", + "email": "oleg008@gmail.com" + }, + { + "name": "kornel", + "email": "pornel@pornel.net" + }, + { + "name": "naman34", + "email": "naman34@gmail.com" + }, + { + "name": "nw", + "email": "nw@nwhite.net" + }, + { + "name": "rauchg", + "email": "rauchg@gmail.com" + }, + { + "name": "superjoe", + "email": "superjoe30@gmail.com" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "travisjeffery", + "email": "tj@travisjeffery.com" + }, + { + "name": "yields", + "email": "yields@icloud.com" + } + ], + "name": "superagent", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/superagent.git" + }, + "scripts": { + "prepublish": "make all", + "test": "make test" + }, + "version": "1.8.5" +} diff --git a/node_modules/superagent/superagent.js b/node_modules/superagent/superagent.js new file mode 100644 index 0000000..e21c113 --- /dev/null +++ b/node_modules/superagent/superagent.js @@ -0,0 +1,1488 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.superagent=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 200 && res.status < 300) { + return self.callback(err, res); + } + + var new_err = new Error(res.statusText || 'Unsuccessful HTTP response'); + new_err.original = err; + new_err.response = res; + new_err.status = res.status; + + self.callback(new_err, res); + }); +} + +/** + * Mixin `Emitter` and `requestBase`. + */ + +Emitter(Request.prototype); +for (var key in requestBase) { + Request.prototype[key] = requestBase[key]; +} + +/** + * Abort the request, and clear potential timeout. + * + * @return {Request} + * @api public + */ + +Request.prototype.abort = function(){ + if (this.aborted) return; + this.aborted = true; + this.xhr && this.xhr.abort(); + this.clearTimeout(); + this.emit('abort'); + return this; +}; + +/** + * Set Content-Type to `type`, mapping values from `request.types`. + * + * Examples: + * + * superagent.types.xml = 'application/xml'; + * + * request.post('/') + * .type('xml') + * .send(xmlstring) + * .end(callback); + * + * request.post('/') + * .type('application/xml') + * .send(xmlstring) + * .end(callback); + * + * @param {String} type + * @return {Request} for chaining + * @api public + */ + +Request.prototype.type = function(type){ + this.set('Content-Type', request.types[type] || type); + return this; +}; + +/** + * Set responseType to `val`. Presently valid responseTypes are 'blob' and + * 'arraybuffer'. + * + * Examples: + * + * req.get('/') + * .responseType('blob') + * .end(callback); + * + * @param {String} val + * @return {Request} for chaining + * @api public + */ + +Request.prototype.responseType = function(val){ + this._responseType = val; + return this; +}; + +/** + * Set Accept to `type`, mapping values from `request.types`. + * + * Examples: + * + * superagent.types.json = 'application/json'; + * + * request.get('/agent') + * .accept('json') + * .end(callback); + * + * request.get('/agent') + * .accept('application/json') + * .end(callback); + * + * @param {String} accept + * @return {Request} for chaining + * @api public + */ + +Request.prototype.accept = function(type){ + this.set('Accept', request.types[type] || type); + return this; +}; + +/** + * Set Authorization field value with `user` and `pass`. + * + * @param {String} user + * @param {String} pass + * @param {Object} options with 'type' property 'auto' or 'basic' (default 'basic') + * @return {Request} for chaining + * @api public + */ + +Request.prototype.auth = function(user, pass, options){ + if (!options) { + options = { + type: 'basic' + } + } + + switch (options.type) { + case 'basic': + var str = btoa(user + ':' + pass); + this.set('Authorization', 'Basic ' + str); + break; + + case 'auto': + this.username = user; + this.password = pass; + break; + } + return this; +}; + +/** +* Add query-string `val`. +* +* Examples: +* +* request.get('/shoes') +* .query('size=10') +* .query({ color: 'blue' }) +* +* @param {Object|String} val +* @return {Request} for chaining +* @api public +*/ + +Request.prototype.query = function(val){ + if ('string' != typeof val) val = serialize(val); + if (val) this._query.push(val); + return this; +}; + +/** + * Queue the given `file` as an attachment to the specified `field`, + * with optional `filename`. + * + * ``` js + * request.post('/upload') + * .attach(new Blob(['hey!'], { type: "text/html"})) + * .end(callback); + * ``` + * + * @param {String} field + * @param {Blob|File} file + * @param {String} filename + * @return {Request} for chaining + * @api public + */ + +Request.prototype.attach = function(field, file, filename){ + this._getFormData().append(field, file, filename || file.name); + return this; +}; + +Request.prototype._getFormData = function(){ + if (!this._formData) { + this._formData = new root.FormData(); + } + return this._formData; +}; + +/** + * Send `data` as the request body, defaulting the `.type()` to "json" when + * an object is given. + * + * Examples: + * + * // manual json + * request.post('/user') + * .type('json') + * .send('{"name":"tj"}') + * .end(callback) + * + * // auto json + * request.post('/user') + * .send({ name: 'tj' }) + * .end(callback) + * + * // manual x-www-form-urlencoded + * request.post('/user') + * .type('form') + * .send('name=tj') + * .end(callback) + * + * // auto x-www-form-urlencoded + * request.post('/user') + * .type('form') + * .send({ name: 'tj' }) + * .end(callback) + * + * // defaults to x-www-form-urlencoded + * request.post('/user') + * .send('name=tobi') + * .send('species=ferret') + * .end(callback) + * + * @param {String|Object} data + * @return {Request} for chaining + * @api public + */ + +Request.prototype.send = function(data){ + var obj = isObject(data); + var type = this._header['content-type']; + + // merge + if (obj && isObject(this._data)) { + for (var key in data) { + this._data[key] = data[key]; + } + } else if ('string' == typeof data) { + if (!type) this.type('form'); + type = this._header['content-type']; + if ('application/x-www-form-urlencoded' == type) { + this._data = this._data + ? this._data + '&' + data + : data; + } else { + this._data = (this._data || '') + data; + } + } else { + this._data = data; + } + + if (!obj || isHost(data)) return this; + if (!type) this.type('json'); + return this; +}; + +/** + * @deprecated + */ +Response.prototype.parse = function serialize(fn){ + if (root.console) { + console.warn("Client-side parse() method has been renamed to serialize(). This method is not compatible with superagent v2.0"); + } + this.serialize(fn); + return this; +}; + +Response.prototype.serialize = function serialize(fn){ + this._parser = fn; + return this; +}; + +/** + * Invoke the callback with `err` and `res` + * and handle arity check. + * + * @param {Error} err + * @param {Response} res + * @api private + */ + +Request.prototype.callback = function(err, res){ + var fn = this._callback; + this.clearTimeout(); + fn(err, res); +}; + +/** + * Invoke callback with x-domain error. + * + * @api private + */ + +Request.prototype.crossDomainError = function(){ + var err = new Error('Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'); + err.crossDomain = true; + + err.status = this.status; + err.method = this.method; + err.url = this.url; + + this.callback(err); +}; + +/** + * Invoke callback with timeout error. + * + * @api private + */ + +Request.prototype.timeoutError = function(){ + var timeout = this._timeout; + var err = new Error('timeout of ' + timeout + 'ms exceeded'); + err.timeout = timeout; + this.callback(err); +}; + +/** + * Enable transmission of cookies with x-domain requests. + * + * Note that for this to work the origin must not be + * using "Access-Control-Allow-Origin" with a wildcard, + * and also must set "Access-Control-Allow-Credentials" + * to "true". + * + * @api public + */ + +Request.prototype.withCredentials = function(){ + this._withCredentials = true; + return this; +}; + +/** + * Initiate request, invoking callback `fn(res)` + * with an instanceof `Response`. + * + * @param {Function} fn + * @return {Request} for chaining + * @api public + */ + +Request.prototype.end = function(fn){ + var self = this; + var xhr = this.xhr = request.getXHR(); + var query = this._query.join('&'); + var timeout = this._timeout; + var data = this._formData || this._data; + + // store callback + this._callback = fn || noop; + + // state change + xhr.onreadystatechange = function(){ + if (4 != xhr.readyState) return; + + // In IE9, reads to any property (e.g. status) off of an aborted XHR will + // result in the error "Could not complete the operation due to error c00c023f" + var status; + try { status = xhr.status } catch(e) { status = 0; } + + if (0 == status) { + if (self.timedout) return self.timeoutError(); + if (self.aborted) return; + return self.crossDomainError(); + } + self.emit('end'); + }; + + // progress + var handleProgress = function(e){ + if (e.total > 0) { + e.percent = e.loaded / e.total * 100; + } + e.direction = 'download'; + self.emit('progress', e); + }; + if (this.hasListeners('progress')) { + xhr.onprogress = handleProgress; + } + try { + if (xhr.upload && this.hasListeners('progress')) { + xhr.upload.onprogress = handleProgress; + } + } catch(e) { + // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. + // Reported here: + // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context + } + + // timeout + if (timeout && !this._timer) { + this._timer = setTimeout(function(){ + self.timedout = true; + self.abort(); + }, timeout); + } + + // querystring + if (query) { + query = request.serializeObject(query); + this.url += ~this.url.indexOf('?') + ? '&' + query + : '?' + query; + } + + // initiate request + if (this.username && this.password) { + xhr.open(this.method, this.url, true, this.username, this.password); + } else { + xhr.open(this.method, this.url, true); + } + + // CORS + if (this._withCredentials) xhr.withCredentials = true; + + // body + if ('GET' != this.method && 'HEAD' != this.method && 'string' != typeof data && !isHost(data)) { + // serialize stuff + var contentType = this._header['content-type']; + var serialize = this._parser || request.serialize[contentType ? contentType.split(';')[0] : '']; + if (!serialize && isJSON(contentType)) serialize = request.serialize['application/json']; + if (serialize) data = serialize(data); + } + + // set header fields + for (var field in this.header) { + if (null == this.header[field]) continue; + xhr.setRequestHeader(field, this.header[field]); + } + + if (this._responseType) { + xhr.responseType = this._responseType; + } + + // send stuff + this.emit('request', this); + + // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) + // We need null here if data is undefined + xhr.send(typeof data !== 'undefined' ? data : null); + return this; +}; + + +/** + * Expose `Request`. + */ + +request.Request = Request; + +/** + * GET `url` with optional callback `fn(res)`. + * + * @param {String} url + * @param {Mixed|Function} data or fn + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.get = function(url, data, fn){ + var req = request('GET', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.query(data); + if (fn) req.end(fn); + return req; +}; + +/** + * HEAD `url` with optional callback `fn(res)`. + * + * @param {String} url + * @param {Mixed|Function} data or fn + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.head = function(url, data, fn){ + var req = request('HEAD', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + if (fn) req.end(fn); + return req; +}; + +/** + * DELETE `url` with optional callback `fn(res)`. + * + * @param {String} url + * @param {Function} fn + * @return {Request} + * @api public + */ + +function del(url, fn){ + var req = request('DELETE', url); + if (fn) req.end(fn); + return req; +}; + +request['del'] = del; +request['delete'] = del; + +/** + * PATCH `url` with optional `data` and callback `fn(res)`. + * + * @param {String} url + * @param {Mixed} data + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.patch = function(url, data, fn){ + var req = request('PATCH', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + if (fn) req.end(fn); + return req; +}; + +/** + * POST `url` with optional `data` and callback `fn(res)`. + * + * @param {String} url + * @param {Mixed} data + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.post = function(url, data, fn){ + var req = request('POST', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + if (fn) req.end(fn); + return req; +}; + +/** + * PUT `url` with optional `data` and callback `fn(res)`. + * + * @param {String} url + * @param {Mixed|Function} data or fn + * @param {Function} fn + * @return {Request} + * @api public + */ + +request.put = function(url, data, fn){ + var req = request('PUT', url); + if ('function' == typeof data) fn = data, data = null; + if (data) req.send(data); + if (fn) req.end(fn); + return req; +}; + +},{"./is-object":1,"./request":3,"./request-base":2,"emitter":4,"reduce":5}]},{},[6])(6) +}); \ No newline at end of file diff --git a/node_modules/superagent/yarn-error.log b/node_modules/superagent/yarn-error.log new file mode 100644 index 0000000..be9bc65 --- /dev/null +++ b/node_modules/superagent/yarn-error.log @@ -0,0 +1,3713 @@ +Arguments: + /usr/local/bin/node /usr/local/bin/yarn install + +PATH: + /Users/porneL/.yarn/bin:/opt/local/bin:/opt/local/sbin:/usr/local/git/bin:/Users/porneL/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/share/npm/bin:/usr/local/Cellar/php55/5.5.1/bin:/usr/local/go/bin:./node_modules/.bin:/Users/porneL/.cargo/bin:/Users/porneL/.composer/vendor/bin + +Yarn version: + 0.17.9 + +Node version: + 7.2.1 + +Platform: + darwin x64 + +npm manifest: + { + "name": "superagent", + "version": "1.8.5", + "description": "elegant & feature rich browser / node HTTP with a fluent API", + "scripts": { + "prepublish": "make all", + "test": "make test" + }, + "keywords": [ + "http", + "ajax", + "request", + "agent" + ], + "license": "MIT", + "author": "TJ Holowaychuk ", + "contributors": [ + "Kornel Lesiński ", + "Peter Lyons ", + "Hunter Loftis " + ], + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/superagent.git" + }, + "dependencies": { + "qs": "2.3.3", + "formidable": "~1.0.14", + "mime": "1.3.4", + "component-emitter": "~1.2.0", + "methods": "~1.1.1", + "cookiejar": "2.0.6", + "debug": "2", + "reduce-component": "1.0.1", + "extend": "3.0.0", + "form-data": "1.0.0-rc3", + "readable-stream": "1.0.27-1" + }, + "devDependencies": { + "Base64": "~0.3.0", + "basic-auth-connect": "~1.0.0", + "better-assert": "~1.0.1", + "body-parser": "~1.9.2", + "browserify": "~6.3.2", + "cookie-parser": "~1.3.3", + "express": "~4.9.8", + "express-session": "~1.9.1", + "marked": "0.3.5", + "mocha": "~2.0.1", + "should": "~3.1.3", + "zuul": "~1.19.0" + }, + "browser": { + "./lib/node/index.js": "./lib/client.js", + "emitter": "component-emitter", + "reduce": "reduce-component", + "./test/support/server.js": "./test/support/blank.js" + }, + "component": { + "scripts": { + "superagent": "lib/client.js" + } + }, + "main": "./lib/node/index.js", + "engines": { + "node": ">= 0.8" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + Base64@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-1.0.0.tgz#b6b73ee342ce64bf66d6003a4536683bf8a349b5" + + JSON2@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/JSON2/-/JSON2-0.1.0.tgz#8d7493040a63d5835af75f47decb83ab6c8c0790" + + JSONStream@^1.0.3: + version "1.2.1" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.2.1.tgz#32aa5790e799481083b49b4b7fa94e23bae69bf9" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + + abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + + accepts@~1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" + dependencies: + mime-types "~2.1.6" + negotiator "0.5.3" + + accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + + acorn@^1.0.3: + version "1.2.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" + + acorn@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" + + acorn@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + + adm-zip@~0.4.3: + version "0.4.7" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" + + align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + + amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + + ansi-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" + + ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + + anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + + append-field@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-0.1.0.tgz#6ddc58fa083c7bc545d3c5995b2830cc2366d44a" + + aproba@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + + archiver@0.14.x: + version "0.14.4" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.14.4.tgz#5b9ddb9f5ee1ceef21cb8f3b020e6240ecb4315c" + dependencies: + async "~0.9.0" + buffer-crc32 "~0.2.1" + glob "~4.3.0" + lazystream "~0.1.0" + lodash "~3.2.0" + readable-stream "~1.0.26" + tar-stream "~1.1.0" + zip-stream "~0.5.0" + + archiver@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.12.0.tgz#b8ccde2508cab9092bb7106630139c0f39a280cc" + dependencies: + async "~0.9.0" + buffer-crc32 "~0.2.1" + glob "~4.0.6" + lazystream "~0.1.0" + lodash "~2.4.1" + readable-stream "~1.0.26" + tar-stream "~1.0.0" + zip-stream "~0.4.0" + + archiver@~0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.7.1.tgz#cf152d794f86bbd93f9858da60d36aaeabad9bbf" + dependencies: + file-utils "~0.1.5" + lazystream "~0.1.0" + lodash "~2.4.1" + readable-stream "~1.0.24" + zip-stream "~0.2.0" + + are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + + argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + + argparse@~0.1.4: + version "0.1.16" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" + dependencies: + underscore "~1.7.0" + underscore.string "~2.4.0" + + arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + + arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + + array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + + array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + + array-map@0.0.0, array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + + array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + + array-uniq@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + + array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + + arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + + asn1.js@^4.0.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.0.tgz#f71a1243f3e79d46d7b07d7fbf4824ee73af054a" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + + asn1@0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + + asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + + assert-plus@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + + assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + + assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + + assert@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.3.0.tgz#03939a622582a812cc202320a0b9a56c9b815849" + dependencies: + util "0.10.3" + + astw@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astw/-/astw-2.0.0.tgz#08121ac8288d35611c0ceec663f6cd545604897d" + dependencies: + acorn "^1.0.3" + + async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + + async@0.9.x, async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + + async@1.x, async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + + async@~0.2.6, async@~0.2.7, async@~0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + + asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + + asyncreduce@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/asyncreduce/-/asyncreduce-0.1.4.tgz#18210e01978bfdcba043955497a5cd315c0a6a41" + dependencies: + runnel "~0.5.0" + + aws-sign2@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + + aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + + aws4@^1.2.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + + balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + + base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + + base64-url@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.3.3.tgz#f8b6c537f09a4fc58c99cb86e0b0e9c61461a20f" + + basic-auth-connect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" + + batch@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.0.tgz#fd2e05a7a5d696b4db9314013e285d8ff3557ec3" + + bcrypt-pbkdf@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + dependencies: + tweetnacl "^0.14.3" + + binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + + bl@^0.9.0, bl@~0.9.0: + version "0.9.5" + resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" + dependencies: + readable-stream "~1.0.26" + + block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + + body-parser@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.15.2.tgz#d7578cf4f1d11d5f6ea804cef35dc7a7ff6dae67" + dependencies: + bytes "2.4.0" + content-type "~1.0.2" + debug "~2.2.0" + depd "~1.1.0" + http-errors "~1.5.0" + iconv-lite "0.4.13" + on-finished "~2.3.0" + qs "6.2.0" + raw-body "~2.1.7" + type-is "~1.6.13" + + body-parser@~1.12.3: + version "1.12.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.12.4.tgz#090700c4ba28862a8520ef378395fdee5f61c229" + dependencies: + bytes "1.0.0" + content-type "~1.0.1" + debug "~2.2.0" + depd "~1.0.1" + iconv-lite "0.4.8" + on-finished "~2.2.1" + qs "2.4.2" + raw-body "~2.0.1" + type-is "~1.6.2" + + boom@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" + dependencies: + hoek "0.9.x" + + boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + + brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + + braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + + brorand@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.0.6.tgz#4028706b915f91f7b349a2e0bf3c376039d216e5" + + browser-pack@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.2.tgz#f86cd6cef4f5300c8e63e07a4d512f65fbff4531" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.7.1" + defined "^1.0.0" + through2 "^2.0.0" + umd "^3.0.0" + + browser-resolve@^1.11.0, browser-resolve@^1.7.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + + browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + + browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + + browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + + browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + + browserify-istanbul@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/browserify-istanbul/-/browserify-istanbul-0.1.5.tgz#01c8e31d6a358ee5150f4321c3f28995a964c39f" + dependencies: + istanbul "^0.2.8" + minimatch "^0.2.14" + through "^2.3.4" + + browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + + browserify-sign@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + + browserify-zlib@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + + browserify@13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.0.0.tgz#8f223bb24ff4ee4335e6bea9671de294e43ba6a3" + dependencies: + JSONStream "^1.0.3" + assert "~1.3.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.1.2" + buffer "^4.1.0" + concat-stream "~1.5.1" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "~1.1.0" + duplexer2 "~0.1.2" + events "~1.1.0" + glob "^5.0.15" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "~0.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + isarray "0.0.1" + labeled-stream-splicer "^2.0.0" + module-deps "^4.0.2" + os-browserify "~0.1.1" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.4.3" + stream-browserify "^2.0.0" + stream-http "^2.0.0" + string_decoder "~0.10.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + url "~0.11.0" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^4.0.0" + + browserify@^13.0.0: + version "13.1.1" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.1.1.tgz#72a2310e2f706ed87db929cf0ee73a5e195d9bb0" + dependencies: + JSONStream "^1.0.3" + assert "~1.3.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.1.2" + buffer "^4.1.0" + cached-path-relative "^1.0.0" + concat-stream "~1.5.1" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "~1.1.0" + duplexer2 "~0.1.2" + events "~1.1.0" + glob "^5.0.15" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "~0.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + module-deps "^4.0.8" + os-browserify "~0.1.1" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.4.3" + stream-browserify "^2.0.0" + stream-http "^2.0.0" + string_decoder "~0.10.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + url "~0.11.0" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^4.0.0" + + buffer-crc32@0.2.1, buffer-crc32@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.1.tgz#be3e5382fc02b6d6324956ac1af98aa98b08534c" + + buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + + buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + + buffer@^4.1.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + + builtin-status-codes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-2.0.0.tgz#6f22003baacf003ccd287afe6872151fddc58579" + + busboy@^0.2.11: + version "0.2.13" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.13.tgz#90fc4f6a3967d815616fc976bfa8e56aed0c58b6" + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + + bytes@0.2.1, bytes@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-0.2.1.tgz#555b08abcb063f8975905302523e4cd4ffdfdf31" + + bytes@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + + bytes@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" + + bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + + cached-path-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.0.tgz#d1094c577fbd9a8b8bd43c96af6188aa205d05f4" + + camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + + caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + + caseless@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.6.0.tgz#8167c1ab8397fb5bb95f96d28e5a81c50f247ac4" + + center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + + chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + + char-split@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/char-split/-/char-split-0.2.0.tgz#8755eda641e5db277dd0f509b517c827e50a8edf" + dependencies: + through "2.3.4" + + chokidar@^1.0.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + + cipher-base@^1.0.0, cipher-base@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + + cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + + code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + + colors@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + + combine-source-map@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e" + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + + combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + + combined-stream@~0.0.4: + version "0.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" + dependencies: + delayed-stream "0.0.5" + + commander@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-1.3.2.tgz#8a8f30ec670a6fdd64af52f1914b907d79ead5b5" + dependencies: + keypress "0.1.x" + + commander@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" + + commander@2.9.0, commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + + component-emitter@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + + compress-commons@~0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-0.1.6.tgz#0c740870fde58cba516f0ac0c822e33a0b85dfa3" + dependencies: + buffer-crc32 "~0.2.1" + crc32-stream "~0.3.1" + readable-stream "~1.0.26" + + compress-commons@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-0.2.9.tgz#422d927430c01abd06cd455b6dfc04cb4cf8003c" + dependencies: + buffer-crc32 "~0.2.1" + crc32-stream "~0.3.1" + node-int64 "~0.3.0" + readable-stream "~1.0.26" + + compressible@~2.0.3: + version "2.0.9" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" + dependencies: + mime-db ">= 1.24.0 < 2" + + compression@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.0.tgz#ccc1a54788da1b3ad7729c49f6a00b3ac9adf47f" + dependencies: + accepts "~1.2.9" + bytes "2.1.0" + compressible "~2.0.3" + debug "~2.2.0" + on-headers "~1.0.0" + vary "~1.0.0" + + concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + + concat-stream@^1.5.0, concat-stream@~1.5.0, concat-stream@~1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + + connect@2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-2.12.0.tgz#31d8fa0dcacdf1908d822bd2923be8a2d2a7ed9a" + dependencies: + batch "0.5.0" + buffer-crc32 "0.2.1" + bytes "0.2.1" + cookie "0.1.0" + cookie-signature "1.0.1" + debug ">= 0.7.3 < 1" + fresh "0.2.0" + methods "0.1.0" + multiparty "2.2.0" + negotiator "0.3.0" + pause "0.0.1" + qs "0.6.6" + raw-body "1.1.2" + send "0.1.4" + uid2 "0.0.3" + + console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + + console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + + constants-browserify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + + content-disposition@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" + + content-type@~1.0.1, content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + + convert-source-map@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.0.0.tgz#dbdcb69523d3af582f7b5c94b3c25ecf2f3b7355" + + convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + + cookie-parser@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.3.tgz#0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5" + dependencies: + cookie "0.3.1" + cookie-signature "1.0.6" + + cookie-signature@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.1.tgz#44e072148af01e6e8e24afbf12690d68ae698ecb" + + cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + + cookie@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.0.tgz#90eb469ddce905c866de687efc43131d8801f9d0" + + cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + + cookiejar@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-1.3.0.tgz#dd00b35679021e99cbd4e855b9ad041913474765" + + cookiejar@^2.0.6: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898" + + core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + + crc32-stream@~0.3.1: + version "0.3.4" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-0.3.4.tgz#73bc25b45fac1db6632231a7bfce8927e9f06552" + dependencies: + buffer-crc32 "~0.2.1" + readable-stream "~1.0.24" + + crc@3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.4.1.tgz#65d5830b1a2569557cfb324c0e679998521473ee" + + create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + + create-hash@^1.1.0, create-hash@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^1.0.0" + sha.js "^2.3.6" + + create-hmac@^1.1.0, create-hmac@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" + dependencies: + create-hash "^1.1.0" + inherits "^2.0.1" + + cryptiles@0.2.x: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" + dependencies: + boom "0.4.x" + + cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + + crypto-browserify@^3.0.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + + ctype@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + + dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + + date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + + debug@*, debug@^2.2.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" + dependencies: + ms "0.7.2" + + debug@0.7.4, debug@~0.7.2, debug@~0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + + debug@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.1.0.tgz#33ab915659d8c2cc8a41443d94d6ebd37697ed21" + dependencies: + ms "0.6.2" + + debug@2.2.0, debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + + "debug@>= 0.7.3 < 1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130" + + decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + + deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + + deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + + defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + + delayed-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" + + delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + + delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + + depd@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" + + depd@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + + deps-sort@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" + dependencies: + JSONStream "^1.0.3" + shasum "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + + des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + + destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + + detective@^4.0.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.3.2.tgz#77697e2e7947ac3fe7c8e26a6d6f115235afa91c" + dependencies: + acorn "^3.1.0" + defined "^1.0.0" + + dicer@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + + diff@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + + diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + + domain-browser@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + + duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + + ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + + ee-first@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.0.tgz#6a0d7c6221e490feefd92ec3f441c9ce8cd097f4" + + ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + + elliptic@^6.0.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.2.tgz#e4c81e0829cf0a65ab70e998b8232723b5c1bc48" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + inherits "^2.0.1" + + emitter-component@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.0.0.tgz#f04dd18fc3dc3e9a74cbc0f310b088666e4c016f" + + encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + + end-of-stream@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" + dependencies: + once "~1.3.0" + + escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + + escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + + escodegen@1.3.x: + version "1.3.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.3.3.tgz#f024016f5a88e046fd12005055e939802e6c5f23" + dependencies: + esprima "~1.1.1" + estraverse "~1.5.0" + esutils "~1.0.0" + optionalDependencies: + source-map "~0.1.33" + + escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + + esprima@1.2.x: + version "1.2.5" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" + + esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + + esprima@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549" + + estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + + estraverse@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" + + esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + + esutils@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" + + etag@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" + + eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + + events@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + + evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + + expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + + expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + + express-session@^1.13.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.14.2.tgz#6bcf586ed6d1dc37b02570087756c9de7b80b275" + dependencies: + cookie "0.3.1" + cookie-signature "1.0.6" + crc "3.4.1" + debug "~2.2.0" + depd "~1.1.0" + on-headers "~1.0.1" + parseurl "~1.3.1" + uid-safe "~2.1.3" + utils-merge "1.0.0" + + express-state@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/express-state/-/express-state-1.0.3.tgz#b6f368743a95d8a91b7683adf593d02b1577ec02" + + express@3.4.8: + version "3.4.8" + resolved "https://registry.yarnpkg.com/express/-/express-3.4.8.tgz#aa7a8986de07053337f4bc5ed9a6453d9cc8e2e1" + dependencies: + buffer-crc32 "0.2.1" + commander "1.3.2" + connect "2.12.0" + cookie "0.1.0" + cookie-signature "1.0.1" + debug ">= 0.7.3 < 1" + fresh "0.2.0" + merge-descriptors "0.0.1" + methods "0.1.0" + mkdirp "0.3.5" + range-parser "0.0.4" + send "0.1.4" + + express@4.x, express@^4.13.4: + version "4.14.0" + resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.1" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "~2.2.0" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.7.0" + finalhandler "0.5.0" + fresh "0.3.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.2" + qs "6.2.0" + range-parser "~1.2.0" + send "0.14.1" + serve-static "~1.11.1" + type-is "~1.6.13" + utils-merge "1.0.0" + vary "~1.1.0" + + extend@^3.0.0, extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + + extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + + extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + + fast-levenshtein@~2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" + + file-utils@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/file-utils/-/file-utils-0.1.5.tgz#dc8153c855387cb4dacb0a1725531fa444a6b48c" + dependencies: + findup-sync "~0.1.2" + glob "~3.2.6" + iconv-lite "~0.2.11" + isbinaryfile "~0.1.9" + lodash "~2.1.0" + minimatch "~0.2.12" + rimraf "~2.2.2" + + filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + + fileset@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.1.8.tgz#506b91a9396eaa7e32fb42a84077c7a0c736b741" + dependencies: + glob "3.x" + minimatch "0.x" + + fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + + finalhandler@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" + dependencies: + debug "~2.2.0" + escape-html "~1.0.3" + on-finished "~2.3.0" + statuses "~1.3.0" + unpipe "~1.0.0" + + find-nearest-file@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-nearest-file/-/find-nearest-file-1.0.0.tgz#bf539d7d0f02996631fa2196680f6776762b9f70" + + findup-sync@~0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683" + dependencies: + glob "~3.2.9" + lodash "~2.4.1" + + firefox-profile@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/firefox-profile/-/firefox-profile-0.2.7.tgz#fe46afc2ed6a96f62c5c3bd446fa259f6014a909" + dependencies: + adm-zip "~0.4.3" + archiver "~0.7.1" + async "~0.2.9" + fs-extra "~0.8.1" + lazystream "~0.1.0" + node-uuid "~1.4.1" + wrench "~1.5.1" + xml2js "~0.4.0" + + for-in@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" + + for-own@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + dependencies: + for-in "^0.1.5" + + forEachAsync@~2.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/forEachAsync/-/forEachAsync-2.2.1.tgz#e3723f00903910e1eb4b1db3ad51b5c64a319fec" + dependencies: + sequence "2.x" + + foreach-shim@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/foreach-shim/-/foreach-shim-0.1.1.tgz#be61d75f46abb7176f5abd295e35885751b71d94" + + forever-agent@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + + forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + + form-data@^2.1.1, form-data@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + + form-data@~0.0.3: + version "0.0.10" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.0.10.tgz#db345a5378d86aeeb1ed5d553b869ac192d2f5ed" + dependencies: + async "~0.2.7" + combined-stream "~0.0.4" + mime "~1.2.2" + + form-data@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" + dependencies: + async "~0.9.0" + combined-stream "~0.0.4" + mime "~1.2.11" + + formidable@1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.14.tgz#2b3f4c411cbb5fdd695c44843e2a23514a43231a" + + formidable@^1.0.17: + version "1.0.17" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" + + forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + + fresh@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.0.tgz#bfd9402cf3df12c4a4c310c79f99a3dde13d34a7" + + fresh@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" + + fs-extra@~0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.8.1.tgz#0e5779ffbfedf511bc755595c7f03c06d4b43e8d" + dependencies: + jsonfile "~1.1.0" + mkdirp "0.3.x" + ncp "~0.4.2" + rimraf "~2.2.0" + + fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + + fsevents@^1.0.0: + version "1.0.15" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + + fstream-ignore@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + + fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + + function-bind@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + + gauge@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + supports-color "^0.2.0" + wide-align "^1.1.0" + + generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + + generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + + getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + + glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + + glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + + glob@3.x, glob@~3.1.11: + version "3.1.21" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" + dependencies: + graceful-fs "~1.2.0" + inherits "1" + minimatch "~0.2.11" + + glob@7.0.5, glob@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + + glob@^5.0.10, glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + + glob@~3.2.6, glob@~3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + + glob@~4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.0.6.tgz#695c50bdd4e2fb5c5d370b091f388d3707e291a7" + dependencies: + graceful-fs "^3.0.2" + inherits "2" + minimatch "^1.0.0" + once "^1.3.0" + + glob@~4.3.0: + version "4.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.3.5.tgz#80fbb08ca540f238acce5d11d1e9bc41e75173d3" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.0" + + globs-to-files@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/globs-to-files/-/globs-to-files-1.0.0.tgz#54490f6d1f4b9fd2de9d99445146ffb37550380d" + dependencies: + array-uniq "~1.0.2" + asyncreduce "~0.1.4" + glob "^5.0.10" + xtend "^4.0.0" + + graceful-fs@^3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + + graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + + graceful-fs@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" + + "graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + + growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + + handlebars@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.0.12.tgz#18c6d3440c35e91b19b3ff582b9151ab4985d4fc" + dependencies: + optimist "~0.3" + uglify-js "~2.3" + + handlebars@1.3.x: + version "1.3.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.3.0.tgz#9e9b130a93e389491322d975cf3ec1818c37ce34" + dependencies: + optimist "~0.3" + optionalDependencies: + uglify-js "~2.3" + + handlebars@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + + har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + + has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + + has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + + has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + + has@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + + hash.js@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + dependencies: + inherits "^2.0.1" + + hawk@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" + dependencies: + boom "0.4.x" + cryptiles "0.2.x" + hoek "0.9.x" + sntp "0.2.x" + + hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + + hbs@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/hbs/-/hbs-2.4.0.tgz#f4c956cb660d6974dc61214b7c49a21f6aaa3f51" + dependencies: + handlebars "1.0.12" + walk "2.2.1" + + highlight.js@7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-7.5.0.tgz#0052595eef15845d842e02a03313afadc3ebd6cc" + + hoek@0.9.x: + version "0.9.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" + + hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + + htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + + http-errors@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" + dependencies: + inherits "2.0.3" + setprototypeof "1.0.2" + statuses ">= 1.3.1 < 2" + + http-proxy@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.11.2.tgz#c50d2fb06eca79d4238e66fd94393d2e41e63740" + dependencies: + eventemitter3 "1.x.x" + requires-port "0.x.x" + + http-signature@~0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" + dependencies: + asn1 "0.1.11" + assert-plus "^0.1.5" + ctype "0.5.3" + + http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + + https-browserify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + + humanize-duration@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-2.4.0.tgz#04da89e6784af1c881b06ebc9f494dda07b08a17" + + iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + + iconv-lite@0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.8.tgz#c6019a7595f2cefca702eab694a010bcd9298d20" + + iconv-lite@~0.2.11: + version "0.2.11" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" + + ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + + indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + + inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + + inherits@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" + + inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + + inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + + ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + + inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + dependencies: + source-map "~0.5.3" + + insert-module-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.7.1" + concat-stream "~1.5.1" + is-buffer "^1.1.0" + lexical-scope "^1.2.0" + process "~0.11.0" + through2 "^2.0.0" + xtend "^4.0.0" + + ipaddr.js@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" + + is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + + is-buffer@^1.0.2, is-buffer@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + + is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + + is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + + is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + + is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + + is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + + is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + + is-my-json-valid@^2.12.4: + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + + is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + + is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + + is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + + is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + + is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + + isarray@0.0.1, isarray@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + + isbinaryfile@~0.1.9: + version "0.1.9" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-0.1.9.tgz#15eece35c4ab708d8924da99fb874f2b5cc0b6c4" + + isexe@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" + + isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + + isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + + istanbul-middleware@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/istanbul-middleware/-/istanbul-middleware-0.2.2.tgz#83c4c13c128e1a0d6a147792391af3c15a8ab8e0" + dependencies: + archiver "0.14.x" + body-parser "~1.12.3" + express "4.x" + istanbul "0.4.x" + + istanbul@0.4.x: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + + istanbul@^0.2.8: + version "0.2.16" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.2.16.tgz#870545a0d4f4b4ce161039e9e805a98c2c700bd9" + dependencies: + abbrev "1.0.x" + async "0.9.x" + escodegen "1.3.x" + esprima "1.2.x" + fileset "0.1.x" + handlebars "1.3.x" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + resolve "0.7.x" + which "1.0.x" + wordwrap "0.0.x" + + jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + + js-yaml@3.x: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + + jsbn@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + + json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + + json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + dependencies: + jsonify "~0.0.0" + + json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + + json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + + jsonfile@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-1.1.1.tgz#da4fd6ad77f1a255203ea63c7bc32dc31ef64433" + + jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + + jsonparse@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.2.0.tgz#5c0c5685107160e72fe7489bddea0b44c2bc67bd" + + jsonpointer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" + + jsprim@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + dependencies: + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + + keypress@0.1.x: + version "0.1.0" + resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" + + kind-of@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + dependencies: + is-buffer "^1.0.2" + + labeled-stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59" + dependencies: + inherits "^2.0.1" + isarray "~0.0.1" + stream-splicer "^2.0.0" + + lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + + lazystream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-0.1.0.tgz#1b25d63c772a4c20f0a5ed0a9d77f484b6e16920" + dependencies: + readable-stream "~1.0.2" + + levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + + lexical-scope@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" + dependencies: + astw "^2.0.0" + + load-script@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-0.0.5.tgz#cbd54b27cd7309902b749640c70e996f4c643b63" + + localtunnel@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.5.0.tgz#5be949779325e9f3273021a3f38d2e7a8dcd7c4f" + dependencies: + debug "0.7.4" + optimist "0.3.4" + request "2.11.4" + + lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + + lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + + lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + + lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + + lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + + lodash._isnative@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" + + lodash._objecttypes@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" + + lodash._shimkeys@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" + dependencies: + lodash._objecttypes "~2.4.1" + + lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + + lodash.defaults@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54" + dependencies: + lodash._objecttypes "~2.4.1" + lodash.keys "~2.4.1" + + lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + + lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + + lodash.isobject@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" + dependencies: + lodash._objecttypes "~2.4.1" + + lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + + lodash.keys@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" + dependencies: + lodash._isnative "~2.4.1" + lodash._shimkeys "~2.4.1" + lodash.isobject "~2.4.1" + + lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + + lodash@3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + + lodash@^4.0.0: + version "4.17.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" + + lodash@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.1.0.tgz#0637eaaa36a8a1cfc865c3adfb942189bfb0998d" + + lodash@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + + lodash@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.2.0.tgz#4bf50a3243f9aeb0bac41a55d3d5990675a462fb" + + longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + + lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + + marked@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + + media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + + merge-descriptors@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-0.0.1.tgz#2ff0980c924cf81d0b5d1fb601177cb8bb56c0d0" + + merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + + methods@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/methods/-/methods-0.0.1.tgz#277c90f8bef39709645a8371c51c3b6c648e068c" + + methods@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/methods/-/methods-0.1.0.tgz#335d429eefd21b7bacf2e9c922a8d2bd14a30e4f" + + methods@^1.1.1, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + + micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + + miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + + "mime-db@>= 1.24.0 < 2", mime-db@~1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" + + mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.6, mime-types@~2.1.7: + version "2.1.13" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" + dependencies: + mime-db "~1.25.0" + + mime-types@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" + + mime@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.5.tgz#9eed073022a8bf5e16c8566c6867b8832bfbfa13" + + mime@1.3.4, mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + + mime@~1.2.11, mime@~1.2.2, mime@~1.2.7, mime@~1.2.9: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + + minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + + minimatch@0.3: + version "0.3.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + + minimatch@0.x, minimatch@^0.2.14, minimatch@~0.2.11, minimatch@~0.2.12: + version "0.2.14" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + + "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + + minimatch@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz#e0dd2120b49e1b724ce8d714c520822a9438576d" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + + minimatch@^2.0.1: + version "2.0.10" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + dependencies: + brace-expansion "^1.0.0" + + minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + + minimist@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce" + + minimist@^1.1.0, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + + mkdirp@0.3.5, mkdirp@0.3.x: + version "0.3.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" + + mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + + mocha@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.2.0" + diff "1.4.0" + escape-string-regexp "1.0.5" + glob "7.0.5" + growl "1.9.2" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + + module-deps@^4.0.2, module-deps@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.0.8.tgz#55fd70623399706c3288bef7a609ff1e8c0ed2bb" + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + cached-path-relative "^1.0.0" + concat-stream "~1.5.0" + defined "^1.0.0" + detective "^4.0.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.1.3" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + + ms@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c" + + ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + + ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + + multer@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.2.0.tgz#5be1a45259fb04d2753d33c7c2a1caf5224705a2" + dependencies: + append-field "^0.1.0" + busboy "^0.2.11" + concat-stream "^1.5.0" + mkdirp "^0.5.1" + object-assign "^3.0.0" + on-finished "^2.3.0" + type-is "^1.6.4" + xtend "^4.0.0" + + multiparty@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-2.2.0.tgz#a567c2af000ad22dc8f2a653d91978ae1f5316f4" + dependencies: + readable-stream "~1.1.9" + stream-counter "~0.2.0" + + nan@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" + + natives@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + + ncp@~0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" + + negotiator@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.3.0.tgz#706d692efeddf574d57ea9fb1ab89a4fa7ee8f60" + + negotiator@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" + + negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + + node-int64@~0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.3.3.tgz#2d6e6b2ece5de8588b43d88d1bc41b26cd1fa84d" + + node-pre-gyp@^0.6.29: + version "0.6.32" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" + dependencies: + mkdirp "~0.5.1" + nopt "~3.0.6" + npmlog "^4.0.1" + rc "~1.1.6" + request "^2.79.0" + rimraf "~2.5.4" + semver "~5.3.0" + tar "~2.2.1" + tar-pack "~3.3.0" + + node-uuid@~1.4.0, node-uuid@~1.4.1: + version "1.4.7" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" + + nopt@3.x, nopt@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + + normalize-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + + npmlog@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.1.tgz#d14f503b4cd79710375553004ba96e6662fbc0b8" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" + + number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + + oauth-sign@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.4.0.tgz#f22956f31ea7151a821e5f2fb32c113cad8b9f69" + + oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + + object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + + object-assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + + object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + + object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + + on-finished@^2.3.0, on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + + on-finished@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.2.1.tgz#5c85c1cc36299f78029653f667f27b6b99ebc029" + dependencies: + ee-first "1.1.0" + + on-headers@~1.0.0, on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + + once@1.x, once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + + once@~1.3.0, once@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + + opener@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.0.tgz#d11f86eeeb076883735c9d509f538fe82d10b941" + + optimist@0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.4.tgz#4d6d0bd71ffad0da4ba4f6d876d5eeb04e07480b" + dependencies: + wordwrap "~0.0.2" + + optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + + optimist@~0.3, optimist@~0.3.5: + version "0.3.7" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" + dependencies: + wordwrap "~0.0.2" + + optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + + os-browserify@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" + + osenv@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.0.3.tgz#cd6ad8ddb290915ad9e22765576025d411f29cb6" + + outpipe@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" + dependencies: + shell-quote "^1.4.2" + + pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + + parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + dependencies: + path-platform "~0.11.15" + + parse-asn1@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + + parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + + parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + + path-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + + path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + + path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + + path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + + pause@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + + pbkdf2@^3.0.3: + version "3.0.9" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + dependencies: + create-hmac "^1.1.2" + + pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + + pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + + prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + + preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + + process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + + process@~0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + + proxy-addr@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.1.1" + + public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + + punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + + punycode@^1.3.2, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + + q@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.0.1.tgz#11872aeedee89268110b10a718448ffb10112a14" + + qs@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.5.tgz#294b268e4b0d4250f6dde19b3b8b34935dff14ef" + + qs@0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107" + + qs@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.4.2.tgz#f7ce788e5777df0b5010da7f7c4e73ba32470f5a" + + qs@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" + + qs@^6.1.0, qs@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" + + qs@~1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.2.tgz#19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88" + + querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + + querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + + random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + + randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + + randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + + range-parser@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-0.0.4.tgz#c0427ffef51c10acba0782a46c9602e744ff620b" + + range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + + raw-body@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.2.tgz#c74b3004dea5defd1696171106ac740ec31d62be" + dependencies: + bytes "~0.2.1" + + raw-body@~2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.0.2.tgz#a2c2f98c8531cee99c63d8d238b7de97bb659fca" + dependencies: + bytes "2.1.0" + iconv-lite "0.4.8" + + raw-body@~2.1.7: + version "2.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + + rc@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~1.0.4" + + read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + dependencies: + readable-stream "^2.0.2" + + readable-stream@1.1.x, readable-stream@^1.0.27-1, readable-stream@~1.1.11, readable-stream@~1.1.8, readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + + "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + + readable-stream@~1.0.2, readable-stream@~1.0.24, readable-stream@~1.0.26, readable-stream@~1.0.33: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + + readable-stream@~2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + + readable-stream@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + + readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + + reduce-component@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" + + regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + + repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + + repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + + request@2.11.4: + version "2.11.4" + resolved "https://registry.yarnpkg.com/request/-/request-2.11.4.tgz#6347d7d44e52dc588108cc1ce5cee975fc8926de" + dependencies: + form-data "~0.0.3" + mime "~1.2.7" + + request@^2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + + request@~2.46.0: + version "2.46.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.46.0.tgz#359195d52eaf720bc69742579d04ad6d265a8274" + dependencies: + aws-sign2 "~0.5.0" + bl "~0.9.0" + caseless "~0.6.0" + forever-agent "~0.5.0" + form-data "~0.1.0" + hawk "1.1.1" + http-signature "~0.10.0" + json-stringify-safe "~5.0.0" + mime-types "~1.0.1" + node-uuid "~1.4.0" + oauth-sign "~0.4.0" + qs "~1.2.0" + stringstream "~0.0.4" + tough-cookie ">=0.12.0" + tunnel-agent "~0.4.0" + + requires-port@0.x.x: + version "0.0.1" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-0.0.1.tgz#4b4414411d9df7c855995dd899a8c78a2951c16d" + + resolve@0.7.x: + version "0.7.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.7.4.tgz#395a9ef9e873fbfe12bd14408bd91bb936003d69" + + resolve@1.1.7, resolve@1.1.x, resolve@^1.1.3, resolve@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + + right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + + rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + dependencies: + glob "^7.0.5" + + rimraf@~2.2.0, rimraf@~2.2.2: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + + ripemd160@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" + + runnel@~0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/runnel/-/runnel-0.5.3.tgz#f9362b165a05fc6f5e46e458f77a1f7ecdc0daec" + + sax@>=0.6.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + + semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + + send@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/send/-/send-0.1.4.tgz#be70d8d1be01de61821af13780b50345a4f71abd" + dependencies: + debug "*" + fresh "0.2.0" + mime "~1.2.9" + range-parser "0.0.4" + + send@0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" + dependencies: + debug "~2.2.0" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.7.0" + fresh "0.3.0" + http-errors "~1.5.0" + mime "1.3.4" + ms "0.7.1" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.0" + + sequence@2.x: + version "2.2.1" + resolved "https://registry.yarnpkg.com/sequence/-/sequence-2.2.1.tgz#7f5617895d44351c0a047e764467690490a16b03" + + serve-static@~1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.14.1" + + set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + + set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + + setprototypeof@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" + + sha.js@^2.3.6, sha.js@~2.4.4: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + + shallow-copy@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + + shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + + shell-quote@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.4.1.tgz#ae18442b536a08c720239b079d2f228acbedee40" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + + shell-quote@^1.4.2, shell-quote@^1.4.3: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + + should-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-1.0.1.tgz#0b6e9516f2601a9fb0bb2dcc369afa1c7e200af7" + dependencies: + should-type "^1.0.0" + + should-format@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.2.tgz#1a543ad3abfea5dc2bea4a0ba875ede60fe22b19" + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + + should-http@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/should-http/-/should-http-0.0.4.tgz#b2a39a4780f90d9b238baeacb7bd4c4f3fc7da49" + + should-type-adaptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz#efe5553cdf68cff66e5c5f51b712dc351c77beaa" + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + + should-type@^1.0.0, should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + + should-util@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.0.tgz#c98cda374aa6b190df8ba87c9889c2b4db620063" + + should@^11.1.1: + version "11.1.2" + resolved "https://registry.yarnpkg.com/should/-/should-11.1.2.tgz#3cad9c6fc600ffe2e1547d948be3284e984da946" + dependencies: + should-equal "^1.0.0" + should-format "^3.0.2" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + + sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + + signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + + sntp@0.2.x: + version "0.2.4" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" + dependencies: + hoek "0.9.x" + + sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + + source-map-cjs@~0.1.31: + version "0.1.32" + resolved "https://registry.yarnpkg.com/source-map-cjs/-/source-map-cjs-0.1.32.tgz#b113f00065b484f4d3a1123ef084046a56228ce7" + + source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + + source-map@~0.1.33, source-map@~0.1.7: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + + source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + + source-map@~0.5.1, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + + split@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/split/-/split-0.1.2.tgz#f0710744c453d551fc7143ead983da6014e336cc" + dependencies: + through "1" + + sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + + sshpk@^1.7.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + + stack-mapper@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stack-mapper/-/stack-mapper-0.2.2.tgz#789029054937b7d47c1b5b67612cbb1e7cfe7071" + dependencies: + array-map "0.0.0" + foreach-shim "~0.1.1" + isarray "0.0.1" + source-map-cjs "~0.1.31" + + "stacktrace-js@http://github.com/defunctzombie/stacktrace.js/tarball/07e7b9516f1449f5c209e4f67f11a43f738c1712": + version "0.6.0" + resolved "http://github.com/defunctzombie/stacktrace.js/tarball/07e7b9516f1449f5c209e4f67f11a43f738c1712#62e2135deea45b38e7e5dd56e61e55da299607d4" + + "statuses@>= 1.3.1 < 2", statuses@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + + stream-browserify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + + stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + + stream-counter@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" + dependencies: + readable-stream "~1.1.8" + + stream-http@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.5.0.tgz#585eee513217ed98fe199817e7313b6f772a6802" + dependencies: + builtin-status-codes "^2.0.0" + inherits "^2.0.1" + readable-stream "^2.1.0" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + + stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + + streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + + string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + + string_decoder@~0.10.0, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + + stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + + strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + + strip-json-comments@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + + subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + + superagent@0.15.7: + version "0.15.7" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-0.15.7.tgz#095c70b8afffbc072f1458f39684d4854d6333a3" + dependencies: + cookiejar "1.3.0" + debug "~0.7.2" + emitter-component "1.0.0" + formidable "1.0.14" + methods "0.0.1" + mime "1.2.5" + qs "0.6.5" + reduce-component "1.0.1" + + supports-color@3.1.2, supports-color@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + + supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + + supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + + syntax-error@^1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.1.6.tgz#b4549706d386cc1c1dc7c2423f18579b6cade710" + dependencies: + acorn "^2.7.0" + + tap-finished@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tap-finished/-/tap-finished-0.0.1.tgz#08b5b543fdc04830290c6c561279552e71c4bd67" + dependencies: + tap-parser "~0.2.0" + through "~2.3.4" + + tap-parser@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-0.7.0.tgz#728a61d64680a5b48d5dbd9dbd0a4d48f5c35bcb" + dependencies: + inherits "~2.0.1" + minimist "^0.2.0" + readable-stream "~1.1.11" + + tap-parser@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-0.2.1.tgz#8e1e823f2114ee21d032e2f31e4fb642a296f50b" + dependencies: + split "~0.1.2" + + tar-pack@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" + dependencies: + debug "~2.2.0" + fstream "~1.0.10" + fstream-ignore "~1.0.5" + once "~1.3.3" + readable-stream "~2.1.4" + rimraf "~2.5.1" + tar "~2.2.1" + uid-number "~0.0.6" + + tar-stream@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.0.2.tgz#fd19b4a17900fa704f6a133e3045aead0562ab95" + dependencies: + bl "^0.9.0" + end-of-stream "^1.0.0" + readable-stream "^1.0.27-1" + xtend "^4.0.0" + + tar-stream@~1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.1.5.tgz#be9218c130c20029e107b0f967fb23de0579d13c" + dependencies: + bl "^0.9.0" + end-of-stream "^1.0.0" + readable-stream "~1.0.33" + xtend "^4.0.0" + + tar@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + + through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + + through@1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/through/-/through-1.1.2.tgz#344a5425a3773314ca7e0eb6512fbafaf76c0bfe" + + through@2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.4.tgz#495e40e8d8a8eaebc7c275ea88c2b8fc14c56455" + + "through@>=2.2.7 <3", through@^2.3.4, through@~2.3.4: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + + timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + + to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + + tough-cookie@>=0.12.0, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + + tty-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + + tunnel-agent@~0.4.0, tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + + tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.4" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.4.tgz#8c9dbfb52795686f166cd2023794bcf103d13c2b" + + type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + + type-is@^1.6.4, type-is@~1.6.13, type-is@~1.6.2: + version "1.6.14" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.13" + + typedarray@~0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + + uglify-js@^2.6: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + + uglify-js@~2.3: + version "2.3.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" + dependencies: + async "~0.2.6" + optimist "~0.3.5" + source-map "~0.1.7" + + uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + + uid-number@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + + uid-safe@~2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.3.tgz#077e264a00b3187936b270bb7376a26473631071" + dependencies: + base64-url "1.3.3" + random-bytes "~1.0.0" + + uid2@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" + + umd@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e" + + underscore.string@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" + + underscore.string@~2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" + + underscore@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + + unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + + url@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + + util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + + util@0.10.3, util@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + + utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + + uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + + vargs@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff" + + vary@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" + + vary@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" + + verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + + vm-browserify@~0.0.1: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + + walk@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/walk/-/walk-2.2.1.tgz#5ada1f8e49e47d4b7445d8be7a2e1e631ab43016" + dependencies: + forEachAsync "~2.2" + + watchify@3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.7.0.tgz#ee2f2c5c8c37312303f998b818b2b3450eefe648" + dependencies: + anymatch "^1.3.0" + browserify "^13.0.0" + chokidar "^1.0.0" + defined "^1.0.0" + outpipe "^1.1.0" + through2 "^2.0.0" + xtend "^4.0.0" + + wd@0.3.11: + version "0.3.11" + resolved "https://registry.yarnpkg.com/wd/-/wd-0.3.11.tgz#522716c79a7a10e781acbb2c6cafe588f701fcc0" + dependencies: + archiver "~0.12.0" + async "~0.9.0" + lodash "~2.4.1" + q "~1.0.1" + request "~2.46.0" + underscore.string "~2.3.3" + vargs "~0.1.0" + + which@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" + + which@^1.1.1: + version "1.2.12" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" + dependencies: + isexe "^1.1.1" + + wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + + window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + + wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + + wordwrap@0.0.x, wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + + wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + + wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + + wrench@~1.5.1: + version "1.5.9" + resolved "https://registry.yarnpkg.com/wrench/-/wrench-1.5.9.tgz#411691c63a9b2531b1700267279bdeca23b2142a" + + xml2js@~0.4.0: + version "0.4.17" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" + dependencies: + sax ">=0.6.0" + xmlbuilder "^4.1.0" + + xmlbuilder@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" + dependencies: + lodash "^4.0.0" + + xtend@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + dependencies: + object-keys "~0.4.0" + + xtend@^4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + + yamljs@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.1.4.tgz#665789afc2ad4b902bf403f00e85b6434e0f3300" + dependencies: + argparse "~0.1.4" + glob "~3.1.11" + + yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + + zip-stream@~0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.2.3.tgz#aef095376cfe138959a81341981d26338b46d8d3" + dependencies: + debug "~0.7.4" + lodash.defaults "~2.4.1" + readable-stream "~1.0.24" + + zip-stream@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.4.1.tgz#4ea795a8ce19e9fab49a31d1d0877214159f03a3" + dependencies: + compress-commons "~0.1.0" + lodash "~2.4.1" + readable-stream "~1.0.26" + + zip-stream@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.5.2.tgz#32dcbc506d0dab4d21372625bd7ebaac3c2fff56" + dependencies: + compress-commons "~0.2.0" + lodash "~3.2.0" + readable-stream "~1.0.26" + + zuul-localtunnel@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/zuul-localtunnel/-/zuul-localtunnel-1.1.0.tgz#70ad27fb0a6af968a2151fc5d5e895daa1aed15d" + dependencies: + localtunnel "1.5.0" + + zuul@^3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/zuul/-/zuul-3.11.1.tgz#7080bbbf22a6d97f60879b3b8f2a823c5a99bab2" + dependencies: + JSON2 "0.1.0" + batch "0.5.0" + browserify "13.0.0" + browserify-istanbul "0.1.5" + char-split "0.2.0" + colors "0.6.2" + commander "2.1.0" + compression "1.5.0" + convert-source-map "1.0.0" + debug "2.1.0" + express "3.4.8" + express-state "1.0.3" + find-nearest-file "1.0.0" + firefox-profile "0.2.7" + globs-to-files "1.0.0" + hbs "2.4.0" + highlight.js "7.5.0" + http-proxy "1.11.2" + humanize-duration "2.4.0" + istanbul-middleware "0.2.2" + load-script "0.0.5" + lodash "3.10.1" + opener "1.4.0" + osenv "0.0.3" + shallow-copy "0.0.1" + shell-quote "1.4.1" + stack-mapper "0.2.2" + stacktrace-js "http://github.com/defunctzombie/stacktrace.js/tarball/07e7b9516f1449f5c209e4f67f11a43f738c1712" + superagent "0.15.7" + tap-finished "0.0.1" + tap-parser "0.7.0" + watchify "3.7.0" + wd "0.3.11" + xtend "2.1.2" + yamljs "0.1.4" + zuul-localtunnel "1.1.0" + +Trace: + Error: connect ETIMEDOUT 104.16.60.173:443 + at Object.exports._errnoException (util.js:1022:11) + at exports._exceptionWithHostPort (util.js:1045:20) + at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1090:14) diff --git a/node_modules/superagent/yarn.lock b/node_modules/superagent/yarn.lock new file mode 100644 index 0000000..026d7c8 --- /dev/null +++ b/node_modules/superagent/yarn.lock @@ -0,0 +1,2631 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +Base64@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" + +Base64@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.3.0.tgz#6da261a4e80d4fa0f5c684254e5bccd16bbdce9f" + +JSON2@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/JSON2/-/JSON2-0.1.0.tgz#8d7493040a63d5835af75f47decb83ab6c8c0790" + +JSONStream@^1.0.3: + version "1.2.1" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.2.1.tgz#32aa5790e799481083b49b4b7fa94e23bae69bf9" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +JSONStream@~0.8.3, JSONStream@~0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.8.4.tgz#91657dfe6ff857483066132b4618b62e8f4887bd" + dependencies: + jsonparse "0.0.5" + through ">=2.2.7 <3" + +abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +accepts@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.1.4.tgz#d71c96f7d41d0feda2c38cd14e8a27c04158df4a" + dependencies: + mime-types "~2.0.4" + negotiator "0.4.9" + +acorn@^1.0.3: + version "1.2.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" + +acorn@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" + +acorn@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +adm-zip@~0.4.3: + version "0.4.7" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +archiver@0.10.x: + version "0.10.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.10.1.tgz#c88a50fe114f744d059a07dfc4690f3a204146e4" + dependencies: + buffer-crc32 "~0.2.1" + file-utils "~0.2.0" + lazystream "~0.1.0" + lodash "~2.4.1" + readable-stream "~1.0.26" + tar-stream "~0.4.0" + zip-stream "~0.3.0" + +archiver@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.12.0.tgz#b8ccde2508cab9092bb7106630139c0f39a280cc" + dependencies: + async "~0.9.0" + buffer-crc32 "~0.2.1" + glob "~4.0.6" + lazystream "~0.1.0" + lodash "~2.4.1" + readable-stream "~1.0.26" + tar-stream "~1.0.0" + zip-stream "~0.4.0" + +archiver@~0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.7.1.tgz#cf152d794f86bbd93f9858da60d36aaeabad9bbf" + dependencies: + file-utils "~0.1.5" + lazystream "~0.1.0" + lodash "~2.4.1" + readable-stream "~1.0.24" + zip-stream "~0.2.0" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +argparse@~0.1.4: + version "0.1.16" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" + dependencies: + underscore "~1.7.0" + underscore.string "~2.4.0" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-map@0.0.0, array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +asn1.js@^4.0.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.0.tgz#f71a1243f3e79d46d7b07d7fbf4824ee73af054a" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + +assert-plus@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + +assert@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.1.2.tgz#adaa04c46bb58c6dd1f294da3eb26e6228eb6e44" + dependencies: + util "0.10.3" + +astw@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astw/-/astw-2.0.0.tgz#08121ac8288d35611c0ceec663f6cd545604897d" + dependencies: + acorn "^1.0.3" + +async@0.9.x, async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@~0.2.6, async@~0.2.7, async@~0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +aws-sign2@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-js@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.7.tgz#54400dc91d696cec32a8a47902f971522fee8f48" + +base64-url@1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.3.3.tgz#f8b6c537f09a4fc58c99cb86e0b0e9c61461a20f" + +basic-auth-connect@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" + +batch@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.0.tgz#fd2e05a7a5d696b4db9314013e285d8ff3557ec3" + +better-assert@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + +bl@^0.9.0, bl@~0.9.0: + version "0.9.5" + resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" + dependencies: + readable-stream "~1.0.26" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + +body-parser@~1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.4.3.tgz#4727952cff4af0773eefa4b226c2f4122f5e234d" + dependencies: + bytes "1.0.0" + depd "0.3.0" + iconv-lite "0.4.3" + media-typer "0.2.0" + qs "0.6.6" + raw-body "1.2.2" + type-is "1.3.1" + +body-parser@~1.9.2: + version "1.9.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.9.3.tgz#edfacd4fcfad87dfe74f861a5cc712900aef2623" + dependencies: + bytes "1.0.0" + depd "~1.0.0" + iconv-lite "0.4.5" + media-typer "0.3.0" + on-finished "~2.1.1" + qs "2.3.3" + raw-body "1.3.1" + type-is "~1.5.3" + +boom@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" + dependencies: + hoek "0.9.x" + +bouncy@3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/bouncy/-/bouncy-3.2.2.tgz#82ab4ad7beae05890eed54b9af3c45394b185dc7" + dependencies: + optimist "~0.3.5" + through "~2.3.4" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +brorand@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.0.6.tgz#4028706b915f91f7b349a2e0bf3c376039d216e5" + +browser-pack@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-3.2.0.tgz#faa1cbc41487b1acc4747e373e1148adffd0e2d9" + dependencies: + JSONStream "~0.8.4" + combine-source-map "~0.3.0" + concat-stream "~1.4.1" + defined "~0.0.0" + through2 "~0.5.1" + umd "^2.1.0" + +browser-resolve@^1.3.0, browser-resolve@^1.7.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-istanbul@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browserify-istanbul/-/browserify-istanbul-0.1.3.tgz#42eca8f8040b75fd601c8b3d30aebb612114a89d" + dependencies: + istanbul "^0.2.8" + minimatch "^0.2.14" + through "^2.3.4" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +browserify@6.3.3: + version "6.3.3" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-6.3.3.tgz#d2a5031a24aec8045eb8174b501bf3f6248455d4" + dependencies: + JSONStream "~0.8.3" + assert "~1.1.0" + browser-pack "^3.2.0" + browser-resolve "^1.3.0" + browserify-zlib "~0.1.2" + buffer "^2.3.0" + builtins "~0.0.3" + commondir "0.0.1" + concat-stream "~1.4.1" + console-browserify "^1.1.0" + constants-browserify "~0.0.1" + crypto-browserify "^3.0.0" + deep-equal "~0.2.1" + defined "~0.0.0" + deps-sort "^1.3.5" + domain-browser "~1.1.0" + duplexer2 "~0.0.2" + events "~1.0.0" + glob "^4.0.5" + http-browserify "^1.4.0" + https-browserify "~0.0.0" + inherits "~2.0.1" + insert-module-globals "^6.1.0" + isarray "0.0.1" + labeled-stream-splicer "^1.0.0" + module-deps "^3.5.0" + os-browserify "~0.1.1" + parents "~0.0.1" + path-browserify "~0.0.0" + process "^0.8.0" + punycode "~1.2.3" + querystring-es3 "~0.2.0" + readable-stream "^1.0.33-1" + resolve "~0.7.1" + shallow-copy "0.0.1" + shasum "^1.0.0" + shell-quote "~0.0.1" + stream-browserify "^1.0.0" + string_decoder "~0.10.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^1.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + umd "~2.1.0" + url "~0.10.1" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^3.0.0" + +browserify@~6.3.2: + version "6.3.4" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-6.3.4.tgz#57b5d195cc568139e971302e5cd9d58ddafb54d8" + dependencies: + JSONStream "~0.8.3" + assert "~1.1.0" + browser-pack "^3.2.0" + browser-resolve "^1.3.0" + browserify-zlib "~0.1.2" + buffer "^2.3.0" + builtins "~0.0.3" + commondir "0.0.1" + concat-stream "~1.4.1" + console-browserify "^1.1.0" + constants-browserify "~0.0.1" + crypto-browserify "^3.0.0" + deep-equal "~0.2.1" + defined "~0.0.0" + deps-sort "^1.3.5" + domain-browser "~1.1.0" + duplexer2 "~0.0.2" + events "~1.0.0" + glob "^4.0.5" + http-browserify "^1.4.0" + https-browserify "~0.0.0" + inherits "~2.0.1" + insert-module-globals "^6.1.0" + isarray "0.0.1" + labeled-stream-splicer "^1.0.0" + module-deps "^3.5.0" + os-browserify "~0.1.1" + parents "~0.0.1" + path-browserify "~0.0.0" + process "^0.8.0" + punycode "~1.2.3" + querystring-es3 "~0.2.0" + readable-stream "^1.0.33-1" + resolve "~0.7.1" + shallow-copy "0.0.1" + shasum "^1.0.0" + shell-quote "~0.0.1" + stream-browserify "^1.0.0" + string_decoder "~0.10.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^1.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + umd "~2.1.0" + url "~0.10.1" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^3.0.0" + +buffer-crc32@0.2.1, buffer-crc32@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.1.tgz#be3e5382fc02b6d6324956ac1af98aa98b08534c" + +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^2.3.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-2.8.2.tgz#d73c214c0334384dc29b04ee0ff5f5527c7974e7" + dependencies: + base64-js "0.0.7" + ieee754 "^1.1.4" + is-array "^1.0.1" + +builtins@~0.0.3: + version "0.0.7" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a" + +bytes@0.2.1, bytes@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-0.2.1.tgz#555b08abcb063f8975905302523e4cd4ffdfdf31" + +bytes@1, bytes@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + +callsite@1.0.0, callsite@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +caseless@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.6.0.tgz#8167c1ab8397fb5bb95f96d28e5a81c50f247ac4" + +char-split@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/char-split/-/char-split-0.2.0.tgz#8755eda641e5db277dd0f509b517c827e50a8edf" + dependencies: + through "2.3.4" + +cipher-base@^1.0.0, cipher-base@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + +colors@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + +combine-source-map@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.3.0.tgz#d9e74f593d9cd43807312cb5d846d451efaa9eb7" + dependencies: + convert-source-map "~0.3.0" + inline-source-map "~0.3.0" + source-map "~0.1.31" + +combine-source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.6.1.tgz#9b4a09c316033d768e0f11e029fa2730e079ad96" + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.5.0" + lodash.memoize "~3.0.3" + source-map "~0.4.2" + +combined-stream@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +combined-stream@~0.0.4: + version "0.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" + dependencies: + delayed-stream "0.0.5" + +commander@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" + +commander@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-1.3.2.tgz#8a8f30ec670a6fdd64af52f1914b907d79ead5b5" + dependencies: + keypress "0.1.x" + +commander@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" + +commander@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" + +commondir@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-0.0.1.tgz#89f00fdcd51b519c578733fec563e6a6da7f5be2" + +component-emitter@~1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +compress-commons@~0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-0.1.6.tgz#0c740870fde58cba516f0ac0c822e33a0b85dfa3" + dependencies: + buffer-crc32 "~0.2.1" + crc32-stream "~0.3.1" + readable-stream "~1.0.26" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@~1.4.1, concat-stream@~1.4.5: + version "1.4.10" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.4.10.tgz#acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36" + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.9" + typedarray "~0.0.5" + +connect@2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-2.12.0.tgz#31d8fa0dcacdf1908d822bd2923be8a2d2a7ed9a" + dependencies: + batch "0.5.0" + buffer-crc32 "0.2.1" + bytes "0.2.1" + cookie "0.1.0" + cookie-signature "1.0.1" + debug ">= 0.7.3 < 1" + fresh "0.2.0" + methods "0.1.0" + multiparty "2.2.0" + negotiator "0.3.0" + pause "0.0.1" + qs "0.6.6" + raw-body "1.1.2" + send "0.1.4" + uid2 "0.0.3" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +constants-browserify@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2" + +convert-source-map@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.4.1.tgz#f919a0099fe31f80fc5a1d0eb303161b394070c7" + +convert-source-map@~0.3.0: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + +cookie-parser@~1.3.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + +cookie-signature@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.1.tgz#44e072148af01e6e8e24afbf12690d68ae698ecb" + +cookie-signature@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.5.tgz#a122e3f1503eca0f5355795b0711bb2368d450f9" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.0.tgz#90eb469ddce905c866de687efc43131d8801f9d0" + +cookie@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.2.tgz#72fec3d24e48a3432073d90c12642005061004b1" + +cookie@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" + +cookiejar@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-1.3.0.tgz#dd00b35679021e99cbd4e855b9ad041913474765" + +cookiejar@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.0.6.tgz#0abf356ad00d1c5a219d88d44518046dd026acfe" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +crc32-stream@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-0.2.0.tgz#5c80d480c8682f904b6f15530dbbe0b8c063dbbe" + dependencies: + buffer-crc32 "~0.2.1" + readable-stream "~1.0.24" + +crc32-stream@~0.3.1: + version "0.3.4" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-0.3.4.tgz#73bc25b45fac1db6632231a7bfce8927e9f06552" + dependencies: + buffer-crc32 "~0.2.1" + readable-stream "~1.0.24" + +crc@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.0.0.tgz#d11e97ec44a844e5eb15a74fa2c7875d0aac4b22" + +crc@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.2.1.tgz#5d9c8fb77a245cd5eca291e5d2d005334bab0082" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^1.0.0" + sha.js "^2.3.6" + +create-hmac@^1.1.0, create-hmac@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" + dependencies: + create-hash "^1.1.0" + inherits "^2.0.1" + +cryptiles@0.2.x: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" + dependencies: + boom "0.4.x" + +crypto-browserify@^3.0.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + +ctype@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug@*, debug@2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" + dependencies: + ms "0.7.2" + +debug@0.7.4, debug@~0.7.2, debug@~0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + +debug@2.0.0, debug@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.0.0.tgz#89bd9df6732b51256bc6705342bba02ed12131ef" + dependencies: + ms "0.6.2" + +debug@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.1.0.tgz#33ab915659d8c2cc8a41443d94d6ebd37697ed21" + dependencies: + ms "0.6.2" + +"debug@>= 0.7.3 < 1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130" + +debug@~1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-1.0.4.tgz#5b9c256bd54b6ec02283176fa8a0ede6d154cbf8" + dependencies: + ms "0.6.2" + +debug@~2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.1.3.tgz#ce8ab1b5ee8fbee2bfa3b633cab93d366b63418e" + dependencies: + ms "0.7.0" + +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-equal@~0.2.0, deep-equal@~0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.2.2.tgz#84b745896f34c684e98f2ce0e42abaf43bba017d" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +defined@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-0.0.0.tgz#f35eea7d705e933baf13b2f03b3f83d921403b3e" + +deflate-crc32-stream@~0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/deflate-crc32-stream/-/deflate-crc32-stream-0.1.2.tgz#975ea0e7303b75d85232198ab7b405c2d47baad5" + dependencies: + buffer-crc32 "~0.2.1" + +delayed-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +depd@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-0.3.0.tgz#11c9bc28e425325fbd8b38940beff69fa5326883" + +depd@0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/depd/-/depd-0.4.5.tgz#1a664b53388b4a6573e8ae67b5f767c693ca97f1" + +depd@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" + +deps-sort@^1.3.5: + version "1.3.9" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-1.3.9.tgz#29dfff53e17b36aecae7530adbbbf622c2ed1a71" + dependencies: + JSONStream "^1.0.3" + shasum "^1.0.0" + subarg "^1.0.0" + through2 "^1.0.0" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.3.tgz#b433b4724e71fd8551d9885174851c5fc377e2c9" + +detective@^4.0.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.3.2.tgz#77697e2e7947ac3fe7c8e26a6d6f115235afa91c" + dependencies: + acorn "^3.1.0" + defined "^1.0.0" + +diff@1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.0.8.tgz#343276308ec991b7bc82267ed55bc1411f971666" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +domain-browser@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +duplexer2@0.0.2, duplexer2@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +ee-first@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.0.5.tgz#8c9b212898d8cd9f1a9436650ce7be202c9e9ff0" + +ee-first@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.0.tgz#6a0d7c6221e490feefd92ec3f441c9ce8cd097f4" + +elliptic@^6.0.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.2.tgz#e4c81e0829cf0a65ab70e998b8232723b5c1bc48" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + inherits "^2.0.1" + +emitter-component@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.0.0.tgz#f04dd18fc3dc3e9a74cbc0f310b088666e4c016f" + +end-of-stream@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" + dependencies: + once "~1.3.0" + +escape-html@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.1.tgz#181a286ead397a39a92857cfb1d43052e356bff0" + +escape-string-regexp@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" + +escodegen@1.3.x: + version "1.3.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.3.3.tgz#f024016f5a88e046fd12005055e939802e6c5f23" + dependencies: + esprima "~1.1.1" + estraverse "~1.5.0" + esutils "~1.0.0" + optionalDependencies: + source-map "~0.1.33" + +esprima@1.2.x: + version "1.2.5" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549" + +estraverse@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" + +esutils@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" + +etag@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.4.0.tgz#3050991615857707c04119d075ba2088e0701225" + dependencies: + crc "3.0.0" + +events@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/events/-/events-1.0.2.tgz#75849dcfe93d10fb057c30055afdbd51d06a8e24" + +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + +express-session@~1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.9.3.tgz#7d2fc387af6fd928775213bfe9d635a5705a84ce" + dependencies: + cookie "0.1.2" + cookie-signature "1.0.5" + crc "3.2.1" + debug "~2.1.0" + depd "~1.0.0" + on-headers "~1.0.0" + parseurl "~1.3.0" + uid-safe "1.0.1" + utils-merge "1.0.0" + +express-state@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/express-state/-/express-state-1.0.3.tgz#b6f368743a95d8a91b7683adf593d02b1577ec02" + +express@3.4.8: + version "3.4.8" + resolved "https://registry.yarnpkg.com/express/-/express-3.4.8.tgz#aa7a8986de07053337f4bc5ed9a6453d9cc8e2e1" + dependencies: + buffer-crc32 "0.2.1" + commander "1.3.2" + connect "2.12.0" + cookie "0.1.0" + cookie-signature "1.0.1" + debug ">= 0.7.3 < 1" + fresh "0.2.0" + merge-descriptors "0.0.1" + methods "0.1.0" + mkdirp "0.3.5" + range-parser "0.0.4" + send "0.1.4" + +express@4.x, express@~4.9.8: + version "4.9.8" + resolved "https://registry.yarnpkg.com/express/-/express-4.9.8.tgz#f360f596baeabbd0e5223b603d6eb578d9d2d10d" + dependencies: + accepts "~1.1.2" + cookie "0.1.2" + cookie-signature "1.0.5" + debug "~2.0.0" + depd "0.4.5" + escape-html "1.0.1" + etag "~1.4.0" + finalhandler "0.2.0" + fresh "0.2.4" + media-typer "0.3.0" + merge-descriptors "0.0.2" + methods "1.1.0" + on-finished "~2.1.0" + parseurl "~1.3.0" + path-to-regexp "0.1.3" + proxy-addr "~1.0.3" + qs "2.2.4" + range-parser "~1.0.2" + send "0.9.3" + serve-static "~1.6.4" + type-is "~1.5.2" + utils-merge "1.0.0" + vary "~1.0.0" + +extend@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +file-utils@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/file-utils/-/file-utils-0.1.5.tgz#dc8153c855387cb4dacb0a1725531fa444a6b48c" + dependencies: + findup-sync "~0.1.2" + glob "~3.2.6" + iconv-lite "~0.2.11" + isbinaryfile "~0.1.9" + lodash "~2.1.0" + minimatch "~0.2.12" + rimraf "~2.2.2" + +file-utils@~0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/file-utils/-/file-utils-0.2.2.tgz#4b7967bb2079ada4d4a7f5454206ecb5c0d4c589" + dependencies: + findup-sync "^0.2.1" + glob "^4.3.5" + iconv-lite "^0.4.3" + isbinaryfile "^2.0.1" + lodash "^2.4.1" + minimatch "^2.0.1" + rimraf "^2.2.2" + +fileset@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.1.8.tgz#506b91a9396eaa7e32fb42a84077c7a0c736b741" + dependencies: + glob "3.x" + minimatch "0.x" + +finalhandler@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.2.0.tgz#794082424b17f6a4b2a0eda39f9db6948ee4be8d" + dependencies: + debug "~2.0.0" + escape-html "1.0.1" + +find-nearest-file@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-nearest-file/-/find-nearest-file-1.0.0.tgz#bf539d7d0f02996631fa2196680f6776762b9f70" + +findup-sync@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.2.1.tgz#e0a90a450075c49466ee513732057514b81e878c" + dependencies: + glob "~4.3.0" + +findup-sync@~0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683" + dependencies: + glob "~3.2.9" + lodash "~2.4.1" + +firefox-profile@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/firefox-profile/-/firefox-profile-0.2.7.tgz#fe46afc2ed6a96f62c5c3bd446fa259f6014a909" + dependencies: + adm-zip "~0.4.3" + archiver "~0.7.1" + async "~0.2.9" + fs-extra "~0.8.1" + lazystream "~0.1.0" + node-uuid "~1.4.1" + wrench "~1.5.1" + xml2js "~0.4.0" + +forEachAsync@~2.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/forEachAsync/-/forEachAsync-2.2.1.tgz#e3723f00903910e1eb4b1db3ad51b5c64a319fec" + dependencies: + sequence "2.x" + +foreach-shim@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/foreach-shim/-/foreach-shim-0.1.1.tgz#be61d75f46abb7176f5abd295e35885751b71d94" + +forever-agent@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + +form-data@1.0.0-rc3: + version "1.0.0-rc3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc3.tgz#d35bc62e7fbc2937ae78f948aaa0d38d90607577" + dependencies: + async "^1.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.3" + +form-data@~0.0.3: + version "0.0.10" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.0.10.tgz#db345a5378d86aeeb1ed5d553b869ac192d2f5ed" + dependencies: + async "~0.2.7" + combined-stream "~0.0.4" + mime "~1.2.2" + +form-data@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" + dependencies: + async "~0.9.0" + combined-stream "~0.0.4" + mime "~1.2.11" + +formidable@1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.14.tgz#2b3f4c411cbb5fdd695c44843e2a23514a43231a" + +formidable@~1.0.14: + version "1.0.17" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +fresh@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.0.tgz#bfd9402cf3df12c4a4c310c79f99a3dde13d34a7" + +fresh@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.4.tgz#3582499206c9723714190edd74b4604feb4a614c" + +fs-extra@~0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.8.1.tgz#0e5779ffbfedf511bc755595c7f03c06d4b43e8d" + dependencies: + jsonfile "~1.1.0" + mkdirp "0.3.x" + ncp "~0.4.2" + rimraf "~2.2.0" + +glob@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.3.tgz#e313eeb249c7affaa5c475286b0e115b59839467" + dependencies: + graceful-fs "~2.0.0" + inherits "2" + minimatch "~0.2.11" + +glob@3.x, glob@~3.2.6, glob@~3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + +glob@^4.0.5, glob@~4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.0.6.tgz#695c50bdd4e2fb5c5d370b091f388d3707e291a7" + dependencies: + graceful-fs "^3.0.2" + inherits "2" + minimatch "^1.0.0" + once "^1.3.0" + +glob@^4.3.5: + version "4.5.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.0" + +glob@~3.1.11: + version "3.1.21" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" + dependencies: + graceful-fs "~1.2.0" + inherits "1" + minimatch "~0.2.11" + +glob@~4.3.0: + version "4.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.3.5.tgz#80fbb08ca540f238acce5d11d1e9bc41e75173d3" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.0" + +graceful-fs@^3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + +graceful-fs@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" + +graceful-fs@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz#7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0" + +growl@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.8.1.tgz#4b2dec8d907e93db336624dcec0183502f8c9428" + +handlebars@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.0.12.tgz#18c6d3440c35e91b19b3ff582b9151ab4985d4fc" + dependencies: + optimist "~0.3" + uglify-js "~2.3" + +handlebars@1.3.x: + version "1.3.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.3.0.tgz#9e9b130a93e389491322d975cf3ec1818c37ce34" + dependencies: + optimist "~0.3" + optionalDependencies: + uglify-js "~2.3" + +hash.js@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + dependencies: + inherits "^2.0.1" + +hawk@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" + dependencies: + boom "0.4.x" + cryptiles "0.2.x" + hoek "0.9.x" + sntp "0.2.x" + +hbs@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/hbs/-/hbs-2.4.0.tgz#f4c956cb660d6974dc61214b7c49a21f6aaa3f51" + dependencies: + handlebars "1.0.12" + walk "2.2.1" + +highlight.js@7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-7.5.0.tgz#0052595eef15845d842e02a03313afadc3ebd6cc" + +hoek@0.9.x: + version "0.9.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" + +http-browserify@^1.4.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20" + dependencies: + Base64 "~0.2.0" + inherits "~2.0.1" + +http-signature@~0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" + dependencies: + asn1 "0.1.11" + assert-plus "^0.1.5" + ctype "0.5.3" + +https-browserify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + +iconv-lite@0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.3.tgz#9e7887793b769cc695eb22d2546a4fd2d79b7a1e" + +iconv-lite@0.4.5, iconv-lite@^0.4.3: + version "0.4.5" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.5.tgz#9c574b70c30d615859f2064d2be4335ad6b1a8d6" + +iconv-lite@~0.2.11: + version "0.2.11" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" + +inherits@2, inherits@^2.0.1, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +inline-source-map@~0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.3.1.tgz#a528b514e689fce90db3089e870d92f527acb5eb" + dependencies: + source-map "~0.3.0" + +inline-source-map@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.5.0.tgz#4a4c5dd8e4fb5e9b3cda60c822dfadcaee66e0af" + dependencies: + source-map "~0.4.0" + +insert-module-globals@^6.1.0: + version "6.6.3" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-6.6.3.tgz#20638e29a30f9ed1ca2e3a825fbc2cba5246ddfc" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.6.1" + concat-stream "~1.4.1" + is-buffer "^1.1.0" + lexical-scope "^1.2.0" + process "~0.11.0" + through2 "^1.0.0" + xtend "^4.0.0" + +ipaddr.js@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.0.5.tgz#5fa78cf301b825c78abc3042d812723049ea23c7" + +is-array@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-array/-/is-array-1.0.1.tgz#e9850cc2cc860c3bc0977e84ccf0dd464584279a" + +is-buffer@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + +isarray@0.0.1, isarray@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isbinaryfile@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-2.0.4.tgz#d23592e6a6f093efb84c2e6152056be294e414a1" + +isbinaryfile@~0.1.9: + version "0.1.9" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-0.1.9.tgz#15eece35c4ab708d8924da99fb874f2b5cc0b6c4" + +istanbul-middleware@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/istanbul-middleware/-/istanbul-middleware-0.2.0.tgz#82c7951a044e94322cda679e95b0c40290d358d6" + dependencies: + archiver "0.10.x" + body-parser "~1.4.3" + express "4.x" + istanbul "0.2.x" + +istanbul@0.2.x, istanbul@^0.2.8: + version "0.2.16" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.2.16.tgz#870545a0d4f4b4ce161039e9e805a98c2c700bd9" + dependencies: + abbrev "1.0.x" + async "0.9.x" + escodegen "1.3.x" + esprima "1.2.x" + fileset "0.1.x" + handlebars "1.3.x" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + resolve "0.7.x" + which "1.0.x" + wordwrap "0.0.x" + +jade@0.26.3: + version "0.26.3" + resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" + dependencies: + commander "0.6.1" + mkdirp "0.3.0" + +js-yaml@3.x: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +jsonfile@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-1.1.1.tgz#da4fd6ad77f1a255203ea63c7bc32dc31ef64433" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonparse@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-0.0.5.tgz#330542ad3f0a654665b778f3eb2d9a9fa507ac64" + +jsonparse@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.2.0.tgz#5c0c5685107160e72fe7489bddea0b44c2bc67bd" + +keypress@0.1.x: + version "0.1.0" + resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" + +labeled-stream-splicer@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz#4615331537784981e8fd264e1f3a434c4e0ddd65" + dependencies: + inherits "^2.0.1" + isarray "~0.0.1" + stream-splicer "^1.1.0" + +lazystream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-0.1.0.tgz#1b25d63c772a4c20f0a5ed0a9d77f484b6e16920" + dependencies: + readable-stream "~1.0.2" + +lexical-scope@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" + dependencies: + astw "^2.0.0" + +load-script@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-0.0.5.tgz#cbd54b27cd7309902b749640c70e996f4c643b63" + +localtunnel@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.5.0.tgz#5be949779325e9f3273021a3f38d2e7a8dcd7c4f" + dependencies: + debug "0.7.4" + optimist "0.3.4" + request "2.11.4" + +lodash._isnative@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" + +lodash._objecttypes@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" + +lodash._shimkeys@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" + dependencies: + lodash._objecttypes "~2.4.1" + +lodash.defaults@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54" + dependencies: + lodash._objecttypes "~2.4.1" + lodash.keys "~2.4.1" + +lodash.isobject@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" + dependencies: + lodash._objecttypes "~2.4.1" + +lodash.keys@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" + dependencies: + lodash._isnative "~2.4.1" + lodash._shimkeys "~2.4.1" + lodash.isobject "~2.4.1" + +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + +lodash@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.1.tgz#5b7723034dda4d262e5a46fb2c58d7cc22f71420" + +lodash@^2.4.1, lodash@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + +lodash@^4.0.0: + version "4.17.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" + +lodash@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.1.0.tgz#0637eaaa36a8a1cfc865c3adfb942189bfb0998d" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +marked@0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.5.tgz#4113a15ac5d7bca158a5aae07224587b9fa15b94" + +media-typer@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.2.0.tgz#d8a065213adfeaa2e76321a2b6dda36ff6335984" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-0.0.1.tgz#2ff0980c924cf81d0b5d1fb601177cb8bb56c0d0" + +merge-descriptors@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-0.0.2.tgz#c36a52a781437513c57275f39dd9d317514ac8c7" + +methods@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/methods/-/methods-0.0.1.tgz#277c90f8bef39709645a8371c51c3b6c648e068c" + +methods@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/methods/-/methods-0.1.0.tgz#335d429eefd21b7bacf2e9c922a8d2bd14a30e4f" + +methods@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.0.tgz#5dca4ee12df52ff3b056145986a8f01cbc86436f" + +methods@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@~1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" + +mime-db@~1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" + +mime-types@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.0.tgz#6a7b4a6af2e7d92f97afe03f047c7801e8f001d2" + +mime-types@^2.1.3: + version "2.1.13" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" + dependencies: + mime-db "~1.25.0" + +mime-types@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" + +mime-types@~2.0.4, mime-types@~2.0.9: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6" + dependencies: + mime-db "~1.12.0" + +mime@1.2.11, mime@~1.2.11, mime@~1.2.2, mime@~1.2.7, mime@~1.2.9: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +mime@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.5.tgz#9eed073022a8bf5e16c8566c6867b8832bfbfa13" + +mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimatch@0.3, minimatch@0.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimatch@^0.2.14, minimatch@~0.2.11, minimatch@~0.2.12: + version "0.2.14" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimatch@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz#e0dd2120b49e1b724ce8d714c520822a9438576d" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimatch@^2.0.1: + version "2.0.10" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + dependencies: + brace-expansion "^1.0.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce" + +minimist@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +mkdirp@0.3.5, mkdirp@0.3.x: + version "0.3.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" + +mkdirp@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" + dependencies: + minimist "0.0.8" + +mkdirp@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.0.1.tgz#5a16e88b856d0c4145d8c6888c27ebd4fab13e90" + dependencies: + commander "2.3.0" + debug "2.0.0" + diff "1.0.8" + escape-string-regexp "1.0.2" + glob "3.2.3" + growl "1.8.1" + jade "0.26.3" + mkdirp "0.5.0" + +module-deps@^3.5.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-3.9.1.tgz#ea75caf9199090d25b0d5512b5acacb96e7f87f3" + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + concat-stream "~1.4.5" + defined "^1.0.0" + detective "^4.0.0" + duplexer2 "0.0.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^1.1.13" + resolve "^1.1.3" + stream-combiner2 "~1.0.0" + subarg "^1.0.0" + through2 "^1.0.0" + xtend "^4.0.0" + +ms@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c" + +ms@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.0.tgz#865be94c2e7397ad8a57da6a633a6e2f30798b83" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +multiparty@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-2.2.0.tgz#a567c2af000ad22dc8f2a653d91978ae1f5316f4" + dependencies: + readable-stream "~1.1.9" + stream-counter "~0.2.0" + +mz@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-1.3.0.tgz#06f093fdd9956a06d37e1b1e81344e27478c42f0" + dependencies: + native-or-bluebird "1" + thenify "3" + thenify-all "1" + +native-or-bluebird@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/native-or-bluebird/-/native-or-bluebird-1.2.0.tgz#39c47bfd7825d1fb9ffad32210ae25daadf101c9" + +natives@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + +ncp@~0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" + +negotiator@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.3.0.tgz#706d692efeddf574d57ea9fb1ab89a4fa7ee8f60" + +negotiator@0.4.9: + version "0.4.9" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.4.9.tgz#92e46b6db53c7e421ed64a2bc94f08be7630df3f" + +node-uuid@~1.4.0, node-uuid@~1.4.1: + version "1.4.7" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +oauth-sign@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.4.0.tgz#f22956f31ea7151a821e5f2fb32c113cad8b9f69" + +object-inspect@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-0.4.0.tgz#f5157c116c1455b243b06ee97703392c5ad89fec" + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + +on-finished@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.1.0.tgz#0c539f09291e8ffadde0c8a25850fb2cedc7022d" + dependencies: + ee-first "1.0.5" + +on-finished@~2.1.0, on-finished@~2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.1.1.tgz#f82ca1c9e3a4f3286b1b9938610e5b8636bd3cb2" + dependencies: + ee-first "1.1.0" + +on-headers@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +opener@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.0.tgz#d11f86eeeb076883735c9d509f538fe82d10b941" + +optimist@0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.4.tgz#4d6d0bd71ffad0da4ba4f6d876d5eeb04e07480b" + dependencies: + wordwrap "~0.0.2" + +optimist@~0.3, optimist@~0.3.5: + version "0.3.7" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" + dependencies: + wordwrap "~0.0.2" + +os-browserify@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" + +osenv@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.0.3.tgz#cd6ad8ddb290915ad9e22765576025d411f29cb6" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parents@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + dependencies: + path-platform "~0.11.15" + +parents@~0.0.1: + version "0.0.3" + resolved "https://registry.yarnpkg.com/parents/-/parents-0.0.3.tgz#fa212f024d9fa6318dbb6b4ce676c8be493b9c43" + dependencies: + path-platform "^0.0.1" + +parse-asn1@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parseurl@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-platform@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.0.1.tgz#b5585d7c3c463d89aa0060d86611cf1afd617e2a" + +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + +path-to-regexp@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.3.tgz#21b9ab82274279de25b156ea08fd12ca51b8aecb" + +pause@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + +pbkdf2@^3.0.3: + version "3.0.9" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + dependencies: + create-hmac "^1.1.2" + +process@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/process/-/process-0.8.0.tgz#7bbaf7187fe6ded3fd5be0cb6103fba9cacb9798" + +process@~0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + +proxy-addr@~1.0.3: + version "1.0.10" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.0.10.tgz#0d40a82f801fc355567d2ecb65efe3f077f121c5" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.0.5" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@~1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.2.4.tgz#54008ac972aec74175def9cba6df7fa9d3918740" + +q@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.0.1.tgz#11872aeedee89268110b10a718448ffb10112a14" + +qs@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.5.tgz#294b268e4b0d4250f6dde19b3b8b34935dff14ef" + +qs@0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107" + +qs@2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.2.4.tgz#2e9fbcd34b540e3421c924ecd01e90aa975319c8" + +qs@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404" + +qs@~1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.2.tgz#19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88" + +querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + +range-parser@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-0.0.4.tgz#c0427ffef51c10acba0782a46c9602e744ff620b" + +range-parser@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" + +raw-body@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.2.tgz#c74b3004dea5defd1696171106ac740ec31d62be" + dependencies: + bytes "~0.2.1" + +raw-body@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.2.2.tgz#0c68e1ee28cfed7dba4822234aec6078461cbc1f" + dependencies: + bytes "1" + iconv-lite "0.4.3" + +raw-body@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.3.1.tgz#26a1491059086fd121942232d16758cd2817f815" + dependencies: + bytes "1" + iconv-lite "0.4.5" + +readable-stream@1.0.27-1: + version "1.0.27-1" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.27-1.tgz#6b67983c20357cefd07f0165001a16d710d91078" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@>=1.1.13-1 <1.2.0-0", readable-stream@^1.0.27-1, readable-stream@^1.0.33-1, readable-stream@^1.1.13, readable-stream@^1.1.13-1, readable-stream@~1.1.11, readable-stream@~1.1.8, readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~1.0.17, readable-stream@~1.0.2, readable-stream@~1.0.24, readable-stream@~1.0.26: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-wrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/readable-wrap/-/readable-wrap-1.0.0.tgz#3b5a211c631e12303a54991c806c17e7ae206bff" + dependencies: + readable-stream "^1.1.13-1" + +reduce-component@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" + +request@2.11.4: + version "2.11.4" + resolved "https://registry.yarnpkg.com/request/-/request-2.11.4.tgz#6347d7d44e52dc588108cc1ce5cee975fc8926de" + dependencies: + form-data "~0.0.3" + mime "~1.2.7" + +request@~2.46.0: + version "2.46.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.46.0.tgz#359195d52eaf720bc69742579d04ad6d265a8274" + dependencies: + aws-sign2 "~0.5.0" + bl "~0.9.0" + caseless "~0.6.0" + forever-agent "~0.5.0" + form-data "~0.1.0" + hawk "1.1.1" + http-signature "~0.10.0" + json-stringify-safe "~5.0.0" + mime-types "~1.0.1" + node-uuid "~1.4.0" + oauth-sign "~0.4.0" + qs "~1.2.0" + stringstream "~0.0.4" + tough-cookie ">=0.12.0" + tunnel-agent "~0.4.0" + +resolve@0.7.x, resolve@~0.7.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.7.4.tgz#395a9ef9e873fbfe12bd14408bd91bb936003d69" + +resolve@1.1.7, resolve@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@~0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.3.1.tgz#34c63447c664c70598d1c9b126fc43b2a24310a4" + +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + dependencies: + through "~2.3.4" + +rfile@~1.0, rfile@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rfile/-/rfile-1.0.0.tgz#59708cf90ca1e74c54c3cfc5c36fdb9810435261" + dependencies: + callsite "~1.0.0" + resolve "~0.3.0" + +rimraf@^2.2.2, rimraf@~2.2.0, rimraf@~2.2.2: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + +ripemd160@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" + +ruglify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ruglify/-/ruglify-1.0.0.tgz#dc8930e2a9544a274301cc9972574c0d0986b675" + dependencies: + rfile "~1.0" + uglify-js "~2.2" + +sax@>=0.6.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + +send@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/send/-/send-0.1.4.tgz#be70d8d1be01de61821af13780b50345a4f71abd" + dependencies: + debug "*" + fresh "0.2.0" + mime "~1.2.9" + range-parser "0.0.4" + +send@0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/send/-/send-0.9.3.tgz#b43a7414cd089b7fbec9b755246f7c37b7b85cc0" + dependencies: + debug "~2.0.0" + depd "0.4.5" + destroy "1.0.3" + escape-html "1.0.1" + etag "~1.4.0" + fresh "0.2.4" + mime "1.2.11" + ms "0.6.2" + on-finished "2.1.0" + range-parser "~1.0.2" + +sequence@2.x: + version "2.2.1" + resolved "https://registry.yarnpkg.com/sequence/-/sequence-2.2.1.tgz#7f5617895d44351c0a047e764467690490a16b03" + +serve-static@~1.6.4: + version "1.6.5" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.6.5.tgz#aca17e0deac4a87729f6078781b7d27f63aa3d9c" + dependencies: + escape-html "1.0.1" + parseurl "~1.3.0" + send "0.9.3" + utils-merge "1.0.0" + +sha.js@^2.3.6, sha.js@~2.4.4: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shallow-copy@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + +shell-quote@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.4.1.tgz#ae18442b536a08c720239b079d2f228acbedee40" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shell-quote@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-0.0.1.tgz#1a41196f3c0333c482323593d6886ecf153dd986" + +should@~3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/should/-/should-3.1.4.tgz#ac280c6e5fc9d35c77d68b95ef1bc60bd554a731" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +sntp@0.2.x: + version "0.2.4" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" + dependencies: + hoek "0.9.x" + +source-map-cjs@~0.1.31: + version "0.1.32" + resolved "https://registry.yarnpkg.com/source-map-cjs/-/source-map-cjs-0.1.32.tgz#b113f00065b484f4d3a1123ef084046a56228ce7" + +source-map@0.1.34: + version "0.1.34" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.34.tgz#a7cfe89aec7b1682c3b198d0acfb47d7d090566b" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.1.31, source-map@~0.1.33, source-map@~0.1.7: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.3.0.tgz#8586fb9a5a005e5b501e21cd18b6f21b457ad1f9" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.4.0, source-map@~0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +stack-mapper@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stack-mapper/-/stack-mapper-0.2.2.tgz#789029054937b7d47c1b5b67612cbb1e7cfe7071" + dependencies: + array-map "0.0.0" + foreach-shim "~0.1.1" + isarray "0.0.1" + source-map-cjs "~0.1.31" + +"stacktrace-js@git+https://github.com/defunctzombie/stacktrace.js#07e7b95": + version "0.6.0" + resolved "git+https://github.com/defunctzombie/stacktrace.js#07e7b95" + +stream-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-1.0.0.tgz#bf9b4abfb42b274d751479e44e0ff2656b6f1193" + dependencies: + inherits "~2.0.1" + readable-stream "^1.0.27-1" + +stream-combiner2@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.0.2.tgz#ba72a6b50cbfabfa950fc8bc87604bd01eb60671" + dependencies: + duplexer2 "~0.0.2" + through2 "~0.5.1" + +stream-counter@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" + dependencies: + readable-stream "~1.1.8" + +stream-splicer@^1.1.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-1.3.2.tgz#3c0441be15b9bf4e226275e6dc83964745546661" + dependencies: + indexof "0.0.1" + inherits "^2.0.1" + isarray "~0.0.1" + readable-stream "^1.1.13-1" + readable-wrap "^1.0.0" + through2 "^1.0.0" + +string_decoder@~0.10.0, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + +superagent@0.15.7: + version "0.15.7" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-0.15.7.tgz#095c70b8afffbc072f1458f39684d4854d6333a3" + dependencies: + cookiejar "1.3.0" + debug "~0.7.2" + emitter-component "1.0.0" + formidable "1.0.14" + methods "0.0.1" + mime "1.2.5" + qs "0.6.5" + reduce-component "1.0.1" + +superstack@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/superstack/-/superstack-0.0.4.tgz#6fe87b7913e0fd748ab33e333b5ae87eb020935c" + +syntax-error@^1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.1.6.tgz#b4549706d386cc1c1dc7c2423f18579b6cade710" + dependencies: + acorn "^2.7.0" + +tap-parser@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-0.7.0.tgz#728a61d64680a5b48d5dbd9dbd0a4d48f5c35bcb" + dependencies: + inherits "~2.0.1" + minimist "^0.2.0" + readable-stream "~1.1.11" + +tape@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-3.5.0.tgz#aebb061388104ad0cb407be842782049d64624f8" + dependencies: + deep-equal "~0.2.0" + defined "~0.0.0" + glob "~3.2.9" + inherits "~2.0.1" + object-inspect "~0.4.0" + resumer "~0.0.0" + through "~2.3.4" + +tar-stream@~0.4.0: + version "0.4.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-0.4.7.tgz#1f1d2ce9ebc7b42765243ca0e8f1b7bfda0aadcd" + dependencies: + bl "^0.9.0" + end-of-stream "^1.0.0" + readable-stream "^1.0.27-1" + xtend "^4.0.0" + +tar-stream@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.0.2.tgz#fd19b4a17900fa704f6a133e3045aead0562ab95" + dependencies: + bl "^0.9.0" + end-of-stream "^1.0.0" + readable-stream "^1.0.27-1" + xtend "^4.0.0" + +thenify-all@1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + dependencies: + thenify ">= 3.1.0 < 4" + +thenify@3, "thenify@>= 3.1.0 < 4": + version "3.2.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" + dependencies: + any-promise "^1.0.0" + +through2@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-1.1.1.tgz#0847cbc4449f3405574dbdccd9bb841b83ac3545" + dependencies: + readable-stream ">=1.1.13-1 <1.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through2@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7" + dependencies: + readable-stream "~1.0.17" + xtend "~3.0.0" + +through@2.3.4, "through@>=2.2.7 <3", through@^2.3.4, through@~2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.4.tgz#495e40e8d8a8eaebc7c275ea88c2b8fc14c56455" + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + +tough-cookie@>=0.12.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tty-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +type-is@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.3.1.tgz#a6789b5a52138289ade1ef8f6d9f2874ffd70b6b" + dependencies: + media-typer "0.2.0" + mime-types "1.0.0" + +type-is@~1.5.2, type-is@~1.5.3: + version "1.5.7" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.5.7.tgz#b9368a593cc6ef7d0645e78b2f4c64cbecd05e90" + dependencies: + media-typer "0.3.0" + mime-types "~2.0.9" + +typedarray@~0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uglify-js@~2.2: + version "2.2.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.2.5.tgz#a6e02a70d839792b9780488b7b8b184c095c99c7" + dependencies: + optimist "~0.3.5" + source-map "~0.1.7" + +uglify-js@~2.3: + version "2.3.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" + dependencies: + async "~0.2.6" + optimist "~0.3.5" + source-map "~0.1.7" + +uglify-js@~2.4.0: + version "2.4.24" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.4.24.tgz#fad5755c1e1577658bb06ff9ab6e548c95bebd6e" + dependencies: + async "~0.2.6" + source-map "0.1.34" + uglify-to-browserify "~1.0.0" + yargs "~3.5.4" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-safe@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-1.0.1.tgz#5bd148460a2e84f54f193fd20352c8c3d7de6ac8" + dependencies: + base64-url "1" + mz "1" + +uid2@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" + +umd@^2.1.0, umd@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/umd/-/umd-2.1.0.tgz#4a6307b762f17f02d201b5fa154e673396c263cf" + dependencies: + rfile "~1.0.0" + ruglify "~1.0.0" + through "~2.3.4" + uglify-js "~2.4.0" + +underscore.string@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" + +underscore.string@~2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" + +underscore@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + +url@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util@0.10.3, util@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +vargs@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff" + +vary@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" + +vm-browserify@~0.0.1: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +walk@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/walk/-/walk-2.2.1.tgz#5ada1f8e49e47d4b7445d8be7a2e1e631ab43016" + dependencies: + forEachAsync "~2.2" + +wd@0.3.11: + version "0.3.11" + resolved "https://registry.yarnpkg.com/wd/-/wd-0.3.11.tgz#522716c79a7a10e781acbb2c6cafe588f701fcc0" + dependencies: + archiver "~0.12.0" + async "~0.9.0" + lodash "~2.4.1" + q "~1.0.1" + request "~2.46.0" + underscore.string "~2.3.3" + vargs "~0.1.0" + +which@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@0.0.x, wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +wrench@~1.5.1: + version "1.5.9" + resolved "https://registry.yarnpkg.com/wrench/-/wrench-1.5.9.tgz#411691c63a9b2531b1700267279bdeca23b2142a" + +xml2js@~0.4.0: + version "0.4.17" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" + dependencies: + sax ">=0.6.0" + xmlbuilder "^4.1.0" + +xmlbuilder@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" + dependencies: + lodash "^4.0.0" + +xtend@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + dependencies: + object-keys "~0.4.0" + +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +xtend@^3.0.0, xtend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" + +yamljs@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.1.4.tgz#665789afc2ad4b902bf403f00e85b6434e0f3300" + dependencies: + argparse "~0.1.4" + glob "~3.1.11" + +yargs@~3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.5.4.tgz#d8aff8f665e94c34bd259bdebd1bfaf0ddd35361" + dependencies: + camelcase "^1.0.2" + decamelize "^1.0.0" + window-size "0.1.0" + wordwrap "0.0.2" + +zip-stream@~0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.2.3.tgz#aef095376cfe138959a81341981d26338b46d8d3" + dependencies: + debug "~0.7.4" + lodash.defaults "~2.4.1" + readable-stream "~1.0.24" + +zip-stream@~0.3.0: + version "0.3.7" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.3.7.tgz#c84d057eb0bcc0139747bd3c6c97280bcf5f2bb2" + dependencies: + buffer-crc32 "~0.2.1" + crc32-stream "~0.2.0" + debug "~1.0.2" + deflate-crc32-stream "~0.1.0" + lodash "~2.4.1" + readable-stream "~1.0.26" + +zip-stream@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.4.1.tgz#4ea795a8ce19e9fab49a31d1d0877214159f03a3" + dependencies: + compress-commons "~0.1.0" + lodash "~2.4.1" + readable-stream "~1.0.26" + +zuul-localtunnel@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/zuul-localtunnel/-/zuul-localtunnel-1.0.1.tgz#1a9823d84616a3cae707dd592412c4dfbf7f8669" + dependencies: + localtunnel "1.5.0" + +zuul@~1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/zuul/-/zuul-1.19.0.tgz#2a88c0bde71a10a5d29dc006c24072e44b845e4a" + dependencies: + JSON2 "0.1.0" + batch "0.5.0" + bouncy "3.2.2" + browserify "6.3.3" + browserify-istanbul "0.1.3" + char-split "0.2.0" + colors "0.6.2" + commander "2.1.0" + convert-source-map "0.4.1" + debug "2.1.0" + express "3.4.8" + express-state "1.0.3" + find-nearest-file "1.0.0" + firefox-profile "0.2.7" + hbs "2.4.0" + highlight.js "7.5.0" + istanbul-middleware "0.2.0" + load-script "0.0.5" + lodash "2.4.1" + opener "1.4.0" + osenv "0.0.3" + shallow-copy "0.0.1" + shell-quote "1.4.1" + stack-mapper "0.2.2" + stacktrace-js defunctzombie/stacktrace.js#07e7b95 + superagent "0.15.7" + superstack "0.0.4" + tap-parser "0.7.0" + tape "3.5.0" + wd "0.3.11" + xtend "2.1.2" + yamljs "0.1.4" + zuul-localtunnel "1.0.1" diff --git a/node_modules/supports-color/index.js b/node_modules/supports-color/index.js new file mode 100644 index 0000000..4346e27 --- /dev/null +++ b/node_modules/supports-color/index.js @@ -0,0 +1,50 @@ +'use strict'; +var argv = process.argv; + +var terminator = argv.indexOf('--'); +var hasFlag = function (flag) { + flag = '--' + flag; + var pos = argv.indexOf(flag); + return pos !== -1 && (terminator !== -1 ? pos < terminator : true); +}; + +module.exports = (function () { + if ('FORCE_COLOR' in process.env) { + return true; + } + + if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + return false; + } + + if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + return true; + } + + if (process.stdout && !process.stdout.isTTY) { + return false; + } + + if (process.platform === 'win32') { + return true; + } + + if ('COLORTERM' in process.env) { + return true; + } + + if (process.env.TERM === 'dumb') { + return false; + } + + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { + return true; + } + + return false; +})(); diff --git a/node_modules/supports-color/license b/node_modules/supports-color/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/supports-color/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/supports-color/package.json b/node_modules/supports-color/package.json new file mode 100644 index 0000000..48afb9f --- /dev/null +++ b/node_modules/supports-color/package.json @@ -0,0 +1,113 @@ +{ + "_args": [ + [ + { + "raw": "supports-color@^2.0.0", + "scope": null, + "escapedName": "supports-color", + "name": "supports-color", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/chalk" + ] + ], + "_from": "supports-color@>=2.0.0 <3.0.0", + "_id": "supports-color@2.0.0", + "_inCache": true, + "_location": "/supports-color", + "_nodeVersion": "0.12.5", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.11.2", + "_phantomChildren": {}, + "_requested": { + "raw": "supports-color@^2.0.0", + "scope": null, + "escapedName": "supports-color", + "name": "supports-color", + "rawSpec": "^2.0.0", + "spec": ">=2.0.0 <3.0.0", + "type": "range" + }, + "_requiredBy": [ + "/chalk" + ], + "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "_shasum": "535d045ce6b6363fa40117084629995e9df324c7", + "_shrinkwrap": null, + "_spec": "supports-color@^2.0.0", + "_where": "/home/burchettm/statsbot/node_modules/chalk", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/supports-color/issues" + }, + "dependencies": {}, + "description": "Detect whether a terminal supports color", + "devDependencies": { + "mocha": "*", + "require-uncached": "^1.0.2" + }, + "directories": {}, + "dist": { + "shasum": "535d045ce6b6363fa40117084629995e9df324c7", + "tarball": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + }, + "engines": { + "node": ">=0.8.0" + }, + "files": [ + "index.js" + ], + "gitHead": "8400d98ade32b2adffd50902c06d9e725a5c6588", + "homepage": "https://github.com/chalk/supports-color", + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "ansi", + "styles", + "tty", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "support", + "supports", + "capability", + "detect" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + { + "name": "jbnicolai", + "email": "jappelman@xebia.com" + } + ], + "name": "supports-color", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/supports-color.git" + }, + "scripts": { + "test": "mocha" + }, + "version": "2.0.0" +} diff --git a/node_modules/supports-color/readme.md b/node_modules/supports-color/readme.md new file mode 100644 index 0000000..b4761f1 --- /dev/null +++ b/node_modules/supports-color/readme.md @@ -0,0 +1,36 @@ +# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) + +> Detect whether a terminal supports color + + +## Install + +``` +$ npm install --save supports-color +``` + + +## Usage + +```js +var supportsColor = require('supports-color'); + +if (supportsColor) { + console.log('Terminal supports color'); +} +``` + +It obeys the `--color` and `--no-color` CLI flags. + +For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`. + + +## Related + +- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/trim-newlines/index.js b/node_modules/trim-newlines/index.js new file mode 100644 index 0000000..da31efd --- /dev/null +++ b/node_modules/trim-newlines/index.js @@ -0,0 +1,13 @@ +'use strict'; + +var fn = module.exports = function (x) { + return fn.end(fn.start(x)); +}; + +fn.start = function (x) { + return x.replace(/^[\r\n]+/, ''); +}; + +fn.end = function (x) { + return x.replace(/[\r\n]+$/, ''); +}; diff --git a/node_modules/trim-newlines/license b/node_modules/trim-newlines/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/trim-newlines/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/trim-newlines/package.json b/node_modules/trim-newlines/package.json new file mode 100644 index 0000000..cdab5db --- /dev/null +++ b/node_modules/trim-newlines/package.json @@ -0,0 +1,106 @@ +{ + "_args": [ + [ + { + "raw": "trim-newlines@^1.0.0", + "scope": null, + "escapedName": "trim-newlines", + "name": "trim-newlines", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/meow" + ] + ], + "_from": "trim-newlines@>=1.0.0 <2.0.0", + "_id": "trim-newlines@1.0.0", + "_inCache": true, + "_location": "/trim-newlines", + "_nodeVersion": "4.1.1", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "_npmVersion": "2.14.4", + "_phantomChildren": {}, + "_requested": { + "raw": "trim-newlines@^1.0.0", + "scope": null, + "escapedName": "trim-newlines", + "name": "trim-newlines", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/meow" + ], + "_resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "_shasum": "5887966bb582a4503a41eb524f7d35011815a613", + "_shrinkwrap": null, + "_spec": "trim-newlines@^1.0.0", + "_where": "/home/burchettm/statsbot/node_modules/meow", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/trim-newlines/issues" + }, + "dependencies": {}, + "description": "Trim newlines from the start and/or end of a string", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "directories": {}, + "dist": { + "shasum": "5887966bb582a4503a41eb524f7d35011815a613", + "tarball": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "gitHead": "f651a2d4cbf382c2936e6e53edee9316602e4ce7", + "homepage": "https://github.com/sindresorhus/trim-newlines", + "keywords": [ + "trim", + "newline", + "newlines", + "linebreak", + "lf", + "crlf", + "left", + "right", + "start", + "end", + "string", + "str", + "remove", + "delete", + "strip" + ], + "license": "MIT", + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "name": "trim-newlines", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/trim-newlines.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.0" +} diff --git a/node_modules/trim-newlines/readme.md b/node_modules/trim-newlines/readme.md new file mode 100644 index 0000000..fedb3ca --- /dev/null +++ b/node_modules/trim-newlines/readme.md @@ -0,0 +1,46 @@ +# trim-newlines [![Build Status](https://travis-ci.org/sindresorhus/trim-newlines.svg?branch=master)](https://travis-ci.org/sindresorhus/trim-newlines) + +> Trim [newlines](https://en.wikipedia.org/wiki/Newline) from the start and/or end of a string + + +## Install + +``` +$ npm install --save trim-newlines +``` + + +## Usage + +```js +var trimNewlines = require('trim-newlines'); + +trimNewlines('\nunicorn\r\n'); +//=> 'unicorn' +``` + + +## API + +### trimNewlines(input) + +Trim from the start and end of a string. + +### trimNewlines.start(input) + +Trim from the start of a string. + +### trimNewlines.end(input) + +Trim from the end of a string. + + +## Related + +- [trim-left](https://github.com/sindresorhus/trim-left) - Similar to `String#trim()` but removes only whitespace on the left +- [trim-right](https://github.com/sindresorhus/trim-right) - Similar to `String#trim()` but removes only whitespace on the right. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/tweetnacl/.npmignore b/node_modules/tweetnacl/.npmignore new file mode 100644 index 0000000..7d98dcb --- /dev/null +++ b/node_modules/tweetnacl/.npmignore @@ -0,0 +1,4 @@ +.eslintrc +.travis.yml +bower.json +test diff --git a/node_modules/tweetnacl/AUTHORS.md b/node_modules/tweetnacl/AUTHORS.md new file mode 100644 index 0000000..6d74d40 --- /dev/null +++ b/node_modules/tweetnacl/AUTHORS.md @@ -0,0 +1,28 @@ +List of TweetNaCl.js authors +============================ + + Alphabetical order by first name. + Format: Name (GitHub username or URL) + +* AndSDev (@AndSDev) +* Devi Mandiri (@devi) +* Dmitry Chestnykh (@dchest) + +List of authors of third-party public domain code from which TweetNaCl.js code was derived +========================================================================================== + +[TweetNaCl](http://tweetnacl.cr.yp.to/) +-------------------------------------- + +* Bernard van Gastel +* Daniel J. Bernstein +* Peter Schwabe +* Sjaak Smetsers +* Tanja Lange +* Wesley Janssen + + +[Poly1305-donna](https://github.com/floodyberry/poly1305-donna) +-------------------------------------------------------------- + +* Andrew Moon (@floodyberry) diff --git a/node_modules/tweetnacl/CHANGELOG.md b/node_modules/tweetnacl/CHANGELOG.md new file mode 100644 index 0000000..92a4fdc --- /dev/null +++ b/node_modules/tweetnacl/CHANGELOG.md @@ -0,0 +1,221 @@ +TweetNaCl.js Changelog +====================== + + +v0.14.5 +------- + +* Fixed incomplete return types in TypeScript typings. +* Replaced COPYING.txt with LICENSE file, which now has public domain dedication + text from The Unlicense. License fields in package.json and bower.json have + been set to "Unlicense". The project was and will be in the public domain -- + this change just makes it easier for automated tools to know about this fact by + using the widely recognized and SPDX-compatible template for public domain + dedication. + + +v0.14.4 +------- + +* Added TypeScript type definitions (contributed by @AndSDev). +* Improved benchmarking code. + + +v0.14.3 +------- + +Fixed a bug in the fast version of Poly1305 and brought it back. + +Thanks to @floodyberry for promptly responding and fixing the original C code: + +> "The issue was not properly detecting if st->h was >= 2^130 - 5, coupled with +> [testing mistake] not catching the failure. The chance of the bug affecting +> anything in the real world is essentially zero luckily, but it's good to have +> it fixed." + +https://github.com/floodyberry/poly1305-donna/issues/2#issuecomment-202698577 + + +v0.14.2 +------- + +Switched Poly1305 fast version back to original (slow) version due to a bug. + + +v0.14.1 +------- + +No code changes, just tweaked packaging and added COPYING.txt. + + +v0.14.0 +------- + +* **Breaking change!** All functions from `nacl.util` have been removed. These + functions are no longer available: + + nacl.util.decodeUTF8 + nacl.util.encodeUTF8 + nacl.util.decodeBase64 + nacl.util.encodeBase64 + + If want to continue using them, you can include + package: + + + + + or + + var nacl = require('tweetnacl'); + nacl.util = require('tweetnacl-util'); + + However it is recommended to use better packages that have wider + compatibility and better performance. Functions from `nacl.util` were never + intended to be robust solution for string conversion and were included for + convenience: cryptography library is not the right place for them. + + Currently calling these functions will throw error pointing to + `tweetnacl-util-js` (in the next version this error message will be removed). + +* Improved detection of available random number generators, making it possible + to use `nacl.randomBytes` and related functions in Web Workers without + changes. + +* Changes to testing (see README). + + +v0.13.3 +------- + +No code changes. + +* Reverted license field in package.json to "Public domain". + +* Fixed typo in README. + + +v0.13.2 +------- + +* Fixed undefined variable bug in fast version of Poly1305. No worries, this + bug was *never* triggered. + +* Specified CC0 public domain dedication. + +* Updated development dependencies. + + +v0.13.1 +------- + +* Exclude `crypto` and `buffer` modules from browserify builds. + + +v0.13.0 +------- + +* Made `nacl-fast` the default version in NPM package. Now + `require("tweetnacl")` will use fast version; to get the original version, + use `require("tweetnacl/nacl.js")`. + +* Cleanup temporary array after generating random bytes. + + +v0.12.2 +------- + +* Improved performance of curve operations, making `nacl.scalarMult`, `nacl.box`, + `nacl.sign` and related functions up to 3x faster in `nacl-fast` version. + + +v0.12.1 +------- + +* Significantly improved performance of Salsa20 (~1.5x faster) and + Poly1305 (~3.5x faster) in `nacl-fast` version. + + +v0.12.0 +------- + +* Instead of using the given secret key directly, TweetNaCl.js now copies it to + a new array in `nacl.box.keyPair.fromSecretKey` and + `nacl.sign.keyPair.fromSecretKey`. + + +v0.11.2 +------- + +* Added new constant: `nacl.sign.seedLength`. + + +v0.11.1 +------- + +* Even faster hash for both short and long inputs (in `nacl-fast`). + + +v0.11.0 +------- + +* Implement `nacl.sign.keyPair.fromSeed` to enable creation of sign key pairs + deterministically from a 32-byte seed. (It behaves like + [libsodium's](http://doc.libsodium.org/public-key_cryptography/public-key_signatures.html) + `crypto_sign_seed_keypair`: the seed becomes a secret part of the secret key.) + +* Fast version now has an improved hash implementation that is 2x-5x faster. + +* Fixed benchmarks, which may have produced incorrect measurements. + + +v0.10.1 +------- + +* Exported undocumented `nacl.lowlevel.crypto_core_hsalsa20`. + + +v0.10.0 +------- + +* **Signature API breaking change!** `nacl.sign` and `nacl.sign.open` now deal + with signed messages, and new `nacl.sign.detached` and + `nacl.sign.detached.verify` are available. + + Previously, `nacl.sign` returned a signature, and `nacl.sign.open` accepted a + message and "detached" signature. This was unlike NaCl's API, which dealt with + signed messages (concatenation of signature and message). + + The new API is: + + nacl.sign(message, secretKey) -> signedMessage + nacl.sign.open(signedMessage, publicKey) -> message | null + + Since detached signatures are common, two new API functions were introduced: + + nacl.sign.detached(message, secretKey) -> signature + nacl.sign.detached.verify(message, signature, publicKey) -> true | false + + (Note that it's `verify`, not `open`, and it returns a boolean value, unlike + `open`, which returns an "unsigned" message.) + +* NPM package now comes without `test` directory to keep it small. + + +v0.9.2 +------ + +* Improved documentation. +* Fast version: increased theoretical message size limit from 2^32-1 to 2^52 + bytes in Poly1305 (and thus, secretbox and box). However this has no impact + in practice since JavaScript arrays or ArrayBuffers are limited to 32-bit + indexes, and most implementations won't allocate more than a gigabyte or so. + (Obviously, there are no tests for the correctness of implementation.) Also, + it's not recommended to use messages that large without splitting them into + smaller packets anyway. + + +v0.9.1 +------ + +* Initial release diff --git a/node_modules/tweetnacl/LICENSE b/node_modules/tweetnacl/LICENSE new file mode 100644 index 0000000..cf1ab25 --- /dev/null +++ b/node_modules/tweetnacl/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a8eb4a9 --- /dev/null +++ b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +# Important! + +If your contribution is not trivial (not a typo fix, etc.), we can only accept +it if you dedicate your copyright for the contribution to the public domain. +Make sure you understand what it means (see http://unlicense.org/)! If you +agree, please add yourself to AUTHORS.md file, and include the following text +to your pull request description or a comment in it: + +------------------------------------------------------------------------------ + + I dedicate any and all copyright interest in this software to the + public domain. I make this dedication for the benefit of the public at + large and to the detriment of my heirs and successors. I intend this + dedication to be an overt act of relinquishment in perpetuity of all + present and future rights to this software under copyright law. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. diff --git a/node_modules/tweetnacl/README.md b/node_modules/tweetnacl/README.md new file mode 100644 index 0000000..ffb6871 --- /dev/null +++ b/node_modules/tweetnacl/README.md @@ -0,0 +1,459 @@ +TweetNaCl.js +============ + +Port of [TweetNaCl](http://tweetnacl.cr.yp.to) / [NaCl](http://nacl.cr.yp.to/) +to JavaScript for modern browsers and Node.js. Public domain. + +[![Build Status](https://travis-ci.org/dchest/tweetnacl-js.svg?branch=master) +](https://travis-ci.org/dchest/tweetnacl-js) + +Demo: + +**:warning: The library is stable and API is frozen, however it has not been +independently reviewed. If you can help reviewing it, please [contact +me](mailto:dmitry@codingrobots.com).** + +Documentation +============= + +* [Overview](#overview) +* [Installation](#installation) +* [Usage](#usage) + * [Public-key authenticated encryption (box)](#public-key-authenticated-encryption-box) + * [Secret-key authenticated encryption (secretbox)](#secret-key-authenticated-encryption-secretbox) + * [Scalar multiplication](#scalar-multiplication) + * [Signatures](#signatures) + * [Hashing](#hashing) + * [Random bytes generation](#random-bytes-generation) + * [Constant-time comparison](#constant-time-comparison) +* [System requirements](#system-requirements) +* [Development and testing](#development-and-testing) +* [Benchmarks](#benchmarks) +* [Contributors](#contributors) +* [Who uses it](#who-uses-it) + + +Overview +-------- + +The primary goal of this project is to produce a translation of TweetNaCl to +JavaScript which is as close as possible to the original C implementation, plus +a thin layer of idiomatic high-level API on top of it. + +There are two versions, you can use either of them: + +* `nacl.js` is the port of TweetNaCl with minimum differences from the + original + high-level API. + +* `nacl-fast.js` is like `nacl.js`, but with some functions replaced with + faster versions. + + +Installation +------------ + +You can install TweetNaCl.js via a package manager: + +[Bower](http://bower.io): + + $ bower install tweetnacl + +[NPM](https://www.npmjs.org/): + + $ npm install tweetnacl + +or [download source code](https://github.com/dchest/tweetnacl-js/releases). + + +Usage +----- + +All API functions accept and return bytes as `Uint8Array`s. If you need to +encode or decode strings, use functions from + or one of the more robust codec +packages. + +In Node.js v4 and later `Buffer` objects are backed by `Uint8Array`s, so you +can freely pass them to TweetNaCl.js functions as arguments. The returned +objects are still `Uint8Array`s, so if you need `Buffer`s, you'll have to +convert them manually; make sure to convert using copying: `new Buffer(array)`, +instead of sharing: `new Buffer(array.buffer)`, because some functions return +subarrays of their buffers. + + +### Public-key authenticated encryption (box) + +Implements *curve25519-xsalsa20-poly1305*. + +#### nacl.box.keyPair() + +Generates a new random key pair for box and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 32-byte secret key + } + + +#### nacl.box.keyPair.fromSecretKey(secretKey) + +Returns a key pair for box with public key corresponding to the given secret +key. + +#### nacl.box(message, nonce, theirPublicKey, mySecretKey) + +Encrypt and authenticates message using peer's public key, our secret key, and +the given nonce, which must be unique for each distinct message for a key pair. + +Returns an encrypted and authenticated message, which is +`nacl.box.overheadLength` longer than the original message. + +#### nacl.box.open(box, nonce, theirPublicKey, mySecretKey) + +Authenticates and decrypts the given box with peer's public key, our secret +key, and the given nonce. + +Returns the original message, or `false` if authentication fails. + +#### nacl.box.before(theirPublicKey, mySecretKey) + +Returns a precomputed shared key which can be used in `nacl.box.after` and +`nacl.box.open.after`. + +#### nacl.box.after(message, nonce, sharedKey) + +Same as `nacl.box`, but uses a shared key precomputed with `nacl.box.before`. + +#### nacl.box.open.after(box, nonce, sharedKey) + +Same as `nacl.box.open`, but uses a shared key precomputed with `nacl.box.before`. + +#### nacl.box.publicKeyLength = 32 + +Length of public key in bytes. + +#### nacl.box.secretKeyLength = 32 + +Length of secret key in bytes. + +#### nacl.box.sharedKeyLength = 32 + +Length of precomputed shared key in bytes. + +#### nacl.box.nonceLength = 24 + +Length of nonce in bytes. + +#### nacl.box.overheadLength = 16 + +Length of overhead added to box compared to original message. + + +### Secret-key authenticated encryption (secretbox) + +Implements *xsalsa20-poly1305*. + +#### nacl.secretbox(message, nonce, key) + +Encrypt and authenticates message using the key and the nonce. The nonce must +be unique for each distinct message for this key. + +Returns an encrypted and authenticated message, which is +`nacl.secretbox.overheadLength` longer than the original message. + +#### nacl.secretbox.open(box, nonce, key) + +Authenticates and decrypts the given secret box using the key and the nonce. + +Returns the original message, or `false` if authentication fails. + +#### nacl.secretbox.keyLength = 32 + +Length of key in bytes. + +#### nacl.secretbox.nonceLength = 24 + +Length of nonce in bytes. + +#### nacl.secretbox.overheadLength = 16 + +Length of overhead added to secret box compared to original message. + + +### Scalar multiplication + +Implements *curve25519*. + +#### nacl.scalarMult(n, p) + +Multiplies an integer `n` by a group element `p` and returns the resulting +group element. + +#### nacl.scalarMult.base(n) + +Multiplies an integer `n` by a standard group element and returns the resulting +group element. + +#### nacl.scalarMult.scalarLength = 32 + +Length of scalar in bytes. + +#### nacl.scalarMult.groupElementLength = 32 + +Length of group element in bytes. + + +### Signatures + +Implements [ed25519](http://ed25519.cr.yp.to). + +#### nacl.sign.keyPair() + +Generates new random key pair for signing and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 64-byte secret key + } + +#### nacl.sign.keyPair.fromSecretKey(secretKey) + +Returns a signing key pair with public key corresponding to the given +64-byte secret key. The secret key must have been generated by +`nacl.sign.keyPair` or `nacl.sign.keyPair.fromSeed`. + +#### nacl.sign.keyPair.fromSeed(seed) + +Returns a new signing key pair generated deterministically from a 32-byte seed. +The seed must contain enough entropy to be secure. This method is not +recommended for general use: instead, use `nacl.sign.keyPair` to generate a new +key pair from a random seed. + +#### nacl.sign(message, secretKey) + +Signs the message using the secret key and returns a signed message. + +#### nacl.sign.open(signedMessage, publicKey) + +Verifies the signed message and returns the message without signature. + +Returns `null` if verification failed. + +#### nacl.sign.detached(message, secretKey) + +Signs the message using the secret key and returns a signature. + +#### nacl.sign.detached.verify(message, signature, publicKey) + +Verifies the signature for the message and returns `true` if verification +succeeded or `false` if it failed. + +#### nacl.sign.publicKeyLength = 32 + +Length of signing public key in bytes. + +#### nacl.sign.secretKeyLength = 64 + +Length of signing secret key in bytes. + +#### nacl.sign.seedLength = 32 + +Length of seed for `nacl.sign.keyPair.fromSeed` in bytes. + +#### nacl.sign.signatureLength = 64 + +Length of signature in bytes. + + +### Hashing + +Implements *SHA-512*. + +#### nacl.hash(message) + +Returns SHA-512 hash of the message. + +#### nacl.hash.hashLength = 64 + +Length of hash in bytes. + + +### Random bytes generation + +#### nacl.randomBytes(length) + +Returns a `Uint8Array` of the given length containing random bytes of +cryptographic quality. + +**Implementation note** + +TweetNaCl.js uses the following methods to generate random bytes, +depending on the platform it runs on: + +* `window.crypto.getRandomValues` (WebCrypto standard) +* `window.msCrypto.getRandomValues` (Internet Explorer 11) +* `crypto.randomBytes` (Node.js) + +If the platform doesn't provide a suitable PRNG, the following functions, +which require random numbers, will throw exception: + +* `nacl.randomBytes` +* `nacl.box.keyPair` +* `nacl.sign.keyPair` + +Other functions are deterministic and will continue working. + +If a platform you are targeting doesn't implement secure random number +generator, but you somehow have a cryptographically-strong source of entropy +(not `Math.random`!), and you know what you are doing, you can plug it into +TweetNaCl.js like this: + + nacl.setPRNG(function(x, n) { + // ... copy n random bytes into x ... + }); + +Note that `nacl.setPRNG` *completely replaces* internal random byte generator +with the one provided. + + +### Constant-time comparison + +#### nacl.verify(x, y) + +Compares `x` and `y` in constant time and returns `true` if their lengths are +non-zero and equal, and their contents are equal. + +Returns `false` if either of the arguments has zero length, or arguments have +different lengths, or their contents differ. + + +System requirements +------------------- + +TweetNaCl.js supports modern browsers that have a cryptographically secure +pseudorandom number generator and typed arrays, including the latest versions +of: + +* Chrome +* Firefox +* Safari (Mac, iOS) +* Internet Explorer 11 + +Other systems: + +* Node.js + + +Development and testing +------------------------ + +Install NPM modules needed for development: + + $ npm install + +To build minified versions: + + $ npm run build + +Tests use minified version, so make sure to rebuild it every time you change +`nacl.js` or `nacl-fast.js`. + +### Testing + +To run tests in Node.js: + + $ npm run test-node + +By default all tests described here work on `nacl.min.js`. To test other +versions, set environment variable `NACL_SRC` to the file name you want to test. +For example, the following command will test fast minified version: + + $ NACL_SRC=nacl-fast.min.js npm run test-node + +To run full suite of tests in Node.js, including comparing outputs of +JavaScript port to outputs of the original C version: + + $ npm run test-node-all + +To prepare tests for browsers: + + $ npm run build-test-browser + +and then open `test/browser/test.html` (or `test/browser/test-fast.html`) to +run them. + +To run headless browser tests with `tape-run` (powered by Electron): + + $ npm run test-browser + +(If you get `Error: spawn ENOENT`, install *xvfb*: `sudo apt-get install xvfb`.) + +To run tests in both Node and Electron: + + $ npm test + +### Benchmarking + +To run benchmarks in Node.js: + + $ npm run bench + $ NACL_SRC=nacl-fast.min.js npm run bench + +To run benchmarks in a browser, open `test/benchmark/bench.html` (or +`test/benchmark/bench-fast.html`). + + +Benchmarks +---------- + +For reference, here are benchmarks from MacBook Pro (Retina, 13-inch, Mid 2014) +laptop with 2.6 GHz Intel Core i5 CPU (Intel) in Chrome 53/OS X and Xiaomi Redmi +Note 3 smartphone with 1.8 GHz Qualcomm Snapdragon 650 64-bit CPU (ARM) in +Chrome 52/Android: + +| | nacl.js Intel | nacl-fast.js Intel | nacl.js ARM | nacl-fast.js ARM | +| ------------- |:-------------:|:-------------------:|:-------------:|:-----------------:| +| salsa20 | 1.3 MB/s | 128 MB/s | 0.4 MB/s | 43 MB/s | +| poly1305 | 13 MB/s | 171 MB/s | 4 MB/s | 52 MB/s | +| hash | 4 MB/s | 34 MB/s | 0.9 MB/s | 12 MB/s | +| secretbox 1K | 1113 op/s | 57583 op/s | 334 op/s | 14227 op/s | +| box 1K | 145 op/s | 718 op/s | 37 op/s | 368 op/s | +| scalarMult | 171 op/s | 733 op/s | 56 op/s | 380 op/s | +| sign | 77 op/s | 200 op/s | 20 op/s | 61 op/s | +| sign.open | 39 op/s | 102 op/s | 11 op/s | 31 op/s | + +(You can run benchmarks on your devices by clicking on the links at the bottom +of the [home page](https://tweetnacl.js.org)). + +In short, with *nacl-fast.js* and 1024-byte messages you can expect to encrypt and +authenticate more than 57000 messages per second on a typical laptop or more than +14000 messages per second on a $170 smartphone, sign about 200 and verify 100 +messages per second on a laptop or 60 and 30 messages per second on a smartphone, +per CPU core (with Web Workers you can do these operations in parallel), +which is good enough for most applications. + + +Contributors +------------ + +See AUTHORS.md file. + + +Third-party libraries based on TweetNaCl.js +------------------------------------------- + +* [forward-secrecy](https://github.com/alax/forward-secrecy) — Axolotl ratchet implementation +* [nacl-stream](https://github.com/dchest/nacl-stream-js) - streaming encryption +* [tweetnacl-auth-js](https://github.com/dchest/tweetnacl-auth-js) — implementation of [`crypto_auth`](http://nacl.cr.yp.to/auth.html) +* [chloride](https://github.com/dominictarr/chloride) - unified API for various NaCl modules + + +Who uses it +----------- + +Some notable users of TweetNaCl.js: + +* [miniLock](http://minilock.io/) +* [Stellar](https://www.stellar.org/) diff --git a/node_modules/tweetnacl/nacl-fast.js b/node_modules/tweetnacl/nacl-fast.js new file mode 100644 index 0000000..5e4562f --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.js @@ -0,0 +1,2388 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; +} + +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} + +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ + +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; + +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; + +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (c ^ 1) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; + +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} + +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} + +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; +} + +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + mlen = -1; + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +// TODO: Completely remove this in v0.15. +if (!nacl.util) { + nacl.util = {}; + nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { + throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); + }; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl-fast.min.js b/node_modules/tweetnacl/nacl-fast.min.js new file mode 100644 index 0000000..8bc47da --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.min.js @@ -0,0 +1,2 @@ +!function(r){"use strict";function t(r,t,n,e){r[t]=n>>24&255,r[t+1]=n>>16&255,r[t+2]=n>>8&255,r[t+3]=255&n,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function n(r,t,n,e,o){var i,h=0;for(i=0;i>>8)-1}function e(r,t,e,o){return n(r,t,e,o,16)}function o(r,t,e,o){return n(r,t,e,o,32)}function i(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;d=d+i|0,U=U+h|0,E=E+a|0,x=x+f|0,M=M+s|0,m=m+c|0,B=B+u|0,S=S+y|0,K=K+l|0,T=T+w|0,Y=Y+p|0,k=k+v|0,L=L+b|0,z=z+g|0,R=R+_|0,P=P+A|0,r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=U>>>0&255,r[5]=U>>>8&255,r[6]=U>>>16&255,r[7]=U>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=x>>>0&255,r[13]=x>>>8&255,r[14]=x>>>16&255,r[15]=x>>>24&255,r[16]=M>>>0&255,r[17]=M>>>8&255,r[18]=M>>>16&255,r[19]=M>>>24&255,r[20]=m>>>0&255,r[21]=m>>>8&255,r[22]=m>>>16&255,r[23]=m>>>24&255,r[24]=B>>>0&255,r[25]=B>>>8&255,r[26]=B>>>16&255,r[27]=B>>>24&255,r[28]=S>>>0&255,r[29]=S>>>8&255,r[30]=S>>>16&255,r[31]=S>>>24&255,r[32]=K>>>0&255,r[33]=K>>>8&255,r[34]=K>>>16&255,r[35]=K>>>24&255,r[36]=T>>>0&255,r[37]=T>>>8&255,r[38]=T>>>16&255,r[39]=T>>>24&255,r[40]=Y>>>0&255,r[41]=Y>>>8&255,r[42]=Y>>>16&255,r[43]=Y>>>24&255,r[44]=k>>>0&255,r[45]=k>>>8&255,r[46]=k>>>16&255,r[47]=k>>>24&255,r[48]=L>>>0&255,r[49]=L>>>8&255,r[50]=L>>>16&255,r[51]=L>>>24&255,r[52]=z>>>0&255,r[53]=z>>>8&255,r[54]=z>>>16&255,r[55]=z>>>24&255,r[56]=R>>>0&255,r[57]=R>>>8&255,r[58]=R>>>16&255,r[59]=R>>>24&255,r[60]=P>>>0&255,r[61]=P>>>8&255,r[62]=P>>>16&255,r[63]=P>>>24&255}function h(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=m>>>0&255,r[5]=m>>>8&255,r[6]=m>>>16&255,r[7]=m>>>24&255,r[8]=Y>>>0&255,r[9]=Y>>>8&255,r[10]=Y>>>16&255,r[11]=Y>>>24&255,r[12]=P>>>0&255,r[13]=P>>>8&255,r[14]=P>>>16&255,r[15]=P>>>24&255,r[16]=B>>>0&255,r[17]=B>>>8&255,r[18]=B>>>16&255,r[19]=B>>>24&255,r[20]=S>>>0&255,r[21]=S>>>8&255,r[22]=S>>>16&255,r[23]=S>>>24&255,r[24]=K>>>0&255,r[25]=K>>>8&255,r[26]=K>>>16&255,r[27]=K>>>24&255,r[28]=T>>>0&255,r[29]=T>>>8&255,r[30]=T>>>16&255,r[31]=T>>>24&255}function a(r,t,n,e){i(r,t,n,e)}function f(r,t,n,e){h(r,t,n,e)}function s(r,t,n,e,o,i,h){var f,s,c=new Uint8Array(16),u=new Uint8Array(64);for(s=0;s<16;s++)c[s]=0;for(s=0;s<8;s++)c[s]=i[s];for(;o>=64;){for(a(u,c,h,ur),s=0;s<64;s++)r[t+s]=n[e+s]^u[s];for(f=1,s=8;s<16;s++)f=f+(255&c[s])|0,c[s]=255&f,f>>>=8;o-=64,t+=64,e+=64}if(o>0)for(a(u,c,h,ur),s=0;s=64;){for(a(s,f,o,ur),h=0;h<64;h++)r[t+h]=s[h];for(i=1,h=8;h<16;h++)i=i+(255&f[h])|0,f[h]=255&i,i>>>=8;n-=64,t+=64}if(n>0)for(a(s,f,o,ur),h=0;h>16&1),i[n-1]&=65535;i[15]=h[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,_(h,i,1-o)}for(n=0;n<16;n++)r[2*n]=255&h[n],r[2*n+1]=h[n]>>8}function d(r,t){var n=new Uint8Array(32),e=new Uint8Array(32);return A(n,r),A(e,t),o(n,0,e,0)}function U(r){var t=new Uint8Array(32);return A(t,r),1&t[0]}function E(r,t){var n;for(n=0;n<16;n++)r[n]=t[2*n]+(t[2*n+1]<<8);r[15]&=32767}function x(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]+n[e]}function M(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]-n[e]}function m(r,t,n){var e,o,i=0,h=0,a=0,f=0,s=0,c=0,u=0,y=0,l=0,w=0,p=0,v=0,b=0,g=0,_=0,A=0,d=0,U=0,E=0,x=0,M=0,m=0,B=0,S=0,K=0,T=0,Y=0,k=0,L=0,z=0,R=0,P=n[0],O=n[1],N=n[2],C=n[3],F=n[4],I=n[5],G=n[6],Z=n[7],j=n[8],q=n[9],V=n[10],X=n[11],D=n[12],H=n[13],J=n[14],Q=n[15];e=t[0],i+=e*P,h+=e*O,a+=e*N,f+=e*C,s+=e*F,c+=e*I,u+=e*G,y+=e*Z,l+=e*j,w+=e*q,p+=e*V,v+=e*X,b+=e*D,g+=e*H,_+=e*J,A+=e*Q,e=t[1],h+=e*P,a+=e*O,f+=e*N,s+=e*C,c+=e*F,u+=e*I,y+=e*G,l+=e*Z,w+=e*j,p+=e*q,v+=e*V,b+=e*X,g+=e*D,_+=e*H,A+=e*J,d+=e*Q,e=t[2],a+=e*P,f+=e*O,s+=e*N,c+=e*C,u+=e*F,y+=e*I,l+=e*G,w+=e*Z,p+=e*j,v+=e*q,b+=e*V,g+=e*X,_+=e*D,A+=e*H,d+=e*J,U+=e*Q,e=t[3],f+=e*P,s+=e*O,c+=e*N,u+=e*C,y+=e*F,l+=e*I,w+=e*G,p+=e*Z,v+=e*j,b+=e*q,g+=e*V,_+=e*X,A+=e*D,d+=e*H,U+=e*J,E+=e*Q,e=t[4],s+=e*P,c+=e*O,u+=e*N,y+=e*C,l+=e*F,w+=e*I,p+=e*G,v+=e*Z,b+=e*j,g+=e*q,_+=e*V,A+=e*X,d+=e*D,U+=e*H,E+=e*J,x+=e*Q,e=t[5],c+=e*P,u+=e*O,y+=e*N,l+=e*C,w+=e*F,p+=e*I,v+=e*G,b+=e*Z,g+=e*j,_+=e*q,A+=e*V,d+=e*X,U+=e*D,E+=e*H,x+=e*J,M+=e*Q,e=t[6],u+=e*P,y+=e*O,l+=e*N,w+=e*C,p+=e*F,v+=e*I,b+=e*G,g+=e*Z,_+=e*j,A+=e*q,d+=e*V,U+=e*X,E+=e*D,x+=e*H,M+=e*J,m+=e*Q,e=t[7],y+=e*P,l+=e*O,w+=e*N,p+=e*C,v+=e*F,b+=e*I,g+=e*G,_+=e*Z,A+=e*j,d+=e*q,U+=e*V,E+=e*X,x+=e*D,M+=e*H,m+=e*J,B+=e*Q,e=t[8],l+=e*P,w+=e*O,p+=e*N,v+=e*C,b+=e*F,g+=e*I,_+=e*G,A+=e*Z,d+=e*j,U+=e*q,E+=e*V,x+=e*X,M+=e*D,m+=e*H,B+=e*J,S+=e*Q,e=t[9],w+=e*P,p+=e*O,v+=e*N,b+=e*C,g+=e*F,_+=e*I,A+=e*G,d+=e*Z,U+=e*j,E+=e*q,x+=e*V,M+=e*X,m+=e*D,B+=e*H,S+=e*J,K+=e*Q,e=t[10],p+=e*P,v+=e*O,b+=e*N,g+=e*C,_+=e*F,A+=e*I,d+=e*G,U+=e*Z,E+=e*j,x+=e*q,M+=e*V,m+=e*X,B+=e*D,S+=e*H,K+=e*J,T+=e*Q,e=t[11],v+=e*P,b+=e*O,g+=e*N,_+=e*C,A+=e*F,d+=e*I,U+=e*G,E+=e*Z,x+=e*j,M+=e*q,m+=e*V,B+=e*X;S+=e*D;K+=e*H,T+=e*J,Y+=e*Q,e=t[12],b+=e*P,g+=e*O,_+=e*N,A+=e*C,d+=e*F,U+=e*I,E+=e*G,x+=e*Z,M+=e*j,m+=e*q,B+=e*V,S+=e*X,K+=e*D,T+=e*H,Y+=e*J,k+=e*Q,e=t[13],g+=e*P,_+=e*O,A+=e*N,d+=e*C,U+=e*F,E+=e*I,x+=e*G,M+=e*Z,m+=e*j,B+=e*q,S+=e*V,K+=e*X,T+=e*D,Y+=e*H,k+=e*J,L+=e*Q,e=t[14],_+=e*P,A+=e*O,d+=e*N,U+=e*C,E+=e*F,x+=e*I,M+=e*G,m+=e*Z,B+=e*j,S+=e*q,K+=e*V,T+=e*X,Y+=e*D,k+=e*H,L+=e*J,z+=e*Q,e=t[15],A+=e*P,d+=e*O,U+=e*N,E+=e*C,x+=e*F,M+=e*I,m+=e*G,B+=e*Z,S+=e*j,K+=e*q,T+=e*V,Y+=e*X,k+=e*D,L+=e*H,z+=e*J,R+=e*Q,i+=38*d,h+=38*U,a+=38*E,f+=38*x,s+=38*M,c+=38*m,u+=38*B,y+=38*S,l+=38*K,w+=38*T,p+=38*Y,v+=38*k,b+=38*L,g+=38*z,_+=38*R,o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),r[0]=i,r[1]=h,r[2]=a,r[3]=f,r[4]=s,r[5]=c,r[6]=u,r[7]=y,r[8]=l,r[9]=w,r[10]=p,r[11]=v,r[12]=b,r[13]=g;r[14]=_;r[15]=A}function B(r,t){m(r,t,t)}function S(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=253;n>=0;n--)B(e,e),2!==n&&4!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function K(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=250;n>=0;n--)B(e,e),1!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function T(r,t,n){var e,o,i=new Uint8Array(32),h=new Float64Array(80),a=$(),f=$(),s=$(),c=$(),u=$(),y=$();for(o=0;o<31;o++)i[o]=t[o];for(i[31]=127&t[31]|64,i[0]&=248,E(h,n),o=0;o<16;o++)f[o]=h[o],c[o]=a[o]=s[o]=0;for(a[0]=c[0]=1,o=254;o>=0;--o)e=i[o>>>3]>>>(7&o)&1,_(a,f,e),_(s,c,e),x(u,a,s),M(a,a,s),x(s,f,c),M(f,f,c),B(c,u),B(y,a),m(a,s,a),m(s,f,u),x(u,a,s),M(a,a,s),B(f,a),M(s,c,y),m(a,s,ir),x(a,a,c),m(s,s,a),m(a,c,y),m(c,f,h),B(f,u),_(a,f,e),_(s,c,e);for(o=0;o<16;o++)h[o+16]=a[o],h[o+32]=s[o],h[o+48]=f[o],h[o+64]=c[o];var l=h.subarray(32),w=h.subarray(16);return S(l,l),m(w,w,l),A(r,w),0}function Y(r,t){return T(r,t,nr)}function k(r,t){return rr(t,32),Y(r,t)}function L(r,t,n){var e=new Uint8Array(32);return T(e,n,t),f(r,tr,e,ur)}function z(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),lr(r,t,n,e,h)}function R(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),wr(r,t,n,e,h)}function P(r,t,n,e){for(var o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U,E,x,M,m,B,S,K,T=new Int32Array(16),Y=new Int32Array(16),k=r[0],L=r[1],z=r[2],R=r[3],P=r[4],O=r[5],N=r[6],C=r[7],F=t[0],I=t[1],G=t[2],Z=t[3],j=t[4],q=t[5],V=t[6],X=t[7],D=0;e>=128;){for(U=0;U<16;U++)E=8*U+D,T[U]=n[E+0]<<24|n[E+1]<<16|n[E+2]<<8|n[E+3],Y[U]=n[E+4]<<24|n[E+5]<<16|n[E+6]<<8|n[E+7];for(U=0;U<80;U++)if(o=k,i=L,h=z,a=R,f=P,s=O,c=N,u=C,y=F,l=I,w=G,p=Z,v=j,b=q,g=V,_=X,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(P>>>14|j<<18)^(P>>>18|j<<14)^(j>>>9|P<<23),M=(j>>>14|P<<18)^(j>>>18|P<<14)^(P>>>9|j<<23),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=P&O^~P&N,M=j&q^~j&V,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=pr[2*U],M=pr[2*U+1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=T[U%16],M=Y[U%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,A=65535&S|K<<16,d=65535&m|B<<16,x=A,M=d,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(k>>>28|F<<4)^(F>>>2|k<<30)^(F>>>7|k<<25),M=(F>>>28|k<<4)^(k>>>2|F<<30)^(k>>>7|F<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=k&L^k&z^L&z,M=F&I^F&G^I&G,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,u=65535&S|K<<16,_=65535&m|B<<16,x=a,M=p,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=A,M=d,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,a=65535&S|K<<16,p=65535&m|B<<16,L=o,z=i,R=h,P=a,O=f,N=s,C=c,k=u,I=y,G=l,Z=w,j=p,q=v,V=b,X=g,F=_,U%16===15)for(E=0;E<16;E++)x=T[E],M=Y[E],m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=T[(E+9)%16],M=Y[(E+9)%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+1)%16],d=Y[(E+1)%16],x=(A>>>1|d<<31)^(A>>>8|d<<24)^A>>>7,M=(d>>>1|A<<31)^(d>>>8|A<<24)^(d>>>7|A<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+14)%16],d=Y[(E+14)%16],x=(A>>>19|d<<13)^(d>>>29|A<<3)^A>>>6,M=(d>>>19|A<<13)^(A>>>29|d<<3)^(d>>>6|A<<26),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,T[E]=65535&S|K<<16,Y[E]=65535&m|B<<16;x=k,M=F,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[0],M=t[0],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[0]=k=65535&S|K<<16,t[0]=F=65535&m|B<<16,x=L,M=I,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[1],M=t[1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[1]=L=65535&S|K<<16,t[1]=I=65535&m|B<<16,x=z,M=G,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[2],M=t[2],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[2]=z=65535&S|K<<16,t[2]=G=65535&m|B<<16,x=R,M=Z,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[3],M=t[3],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[3]=R=65535&S|K<<16,t[3]=Z=65535&m|B<<16,x=P,M=j,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[4],M=t[4],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[4]=P=65535&S|K<<16,t[4]=j=65535&m|B<<16,x=O,M=q,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[5],M=t[5],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[5]=O=65535&S|K<<16,t[5]=q=65535&m|B<<16,x=N,M=V,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[6],M=t[6],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[6]=N=65535&S|K<<16,t[6]=V=65535&m|B<<16,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[7],M=t[7],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[7]=C=65535&S|K<<16,t[7]=X=65535&m|B<<16,D+=128,e-=128}return e}function O(r,n,e){var o,i=new Int32Array(8),h=new Int32Array(8),a=new Uint8Array(256),f=e;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,h[0]=4089235720,h[1]=2227873595,h[2]=4271175723,h[3]=1595750129,h[4]=2917565137,h[5]=725511199,h[6]=4215389547,h[7]=327033209,P(i,h,n,e),e%=128,o=0;o=0;--o)e=n[o/8|0]>>(7&o)&1,C(r,t,e),N(t,r),N(r,r),C(r,t,e)}function G(r,t){var n=[$(),$(),$(),$()];b(n[0],fr),b(n[1],sr),b(n[2],or),m(n[3],fr,sr),I(r,n,t)}function Z(r,t,n){var e,o=new Uint8Array(64),i=[$(),$(),$(),$()];for(n||rr(t,32),O(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,G(i,o),F(r,i),e=0;e<32;e++)t[e+32]=r[e];return 0}function j(r,t){var n,e,o,i;for(e=63;e>=32;--e){for(n=0,o=e-32,i=e-12;o>8,t[o]-=256*n;t[o]+=n,t[e]=0}for(n=0,o=0;o<32;o++)t[o]+=n-(t[31]>>4)*vr[o],n=t[o]>>8,t[o]&=255;for(o=0;o<32;o++)t[o]-=n*vr[o];for(e=0;e<32;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function q(r){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=r[t];for(t=0;t<64;t++)r[t]=0;j(r,n)}function V(r,t,n,e){var o,i,h=new Uint8Array(64),a=new Uint8Array(64),f=new Uint8Array(64),s=new Float64Array(64),c=[$(),$(),$(),$()];O(h,e,32),h[0]&=248,h[31]&=127,h[31]|=64;var u=n+64;for(o=0;o>7&&M(r[0],er,r[0]),m(r[3],r[0],r[1]),0)}function D(r,t,n,e){var i,h,a=new Uint8Array(32),f=new Uint8Array(64),s=[$(),$(),$(),$()],c=[$(),$(),$(),$()];if(h=-1,n<64)return-1;if(X(c,e))return-1;for(i=0;i>>13|n<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(n>>>10|e<<6),o=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|o<<9),i=255&r[8]|(255&r[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,h=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(i>>>14|h<<2),a=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(h>>>11|a<<5),f=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(a>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};yr.prototype.blocks=function(r,t,n){for(var e,o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U=this.fin?0:2048,E=this.h[0],x=this.h[1],M=this.h[2],m=this.h[3],B=this.h[4],S=this.h[5],K=this.h[6],T=this.h[7],Y=this.h[8],k=this.h[9],L=this.r[0],z=this.r[1],R=this.r[2],P=this.r[3],O=this.r[4],N=this.r[5],C=this.r[6],F=this.r[7],I=this.r[8],G=this.r[9];n>=16;)e=255&r[t+0]|(255&r[t+1])<<8,E+=8191&e,o=255&r[t+2]|(255&r[t+3])<<8,x+=8191&(e>>>13|o<<3),i=255&r[t+4]|(255&r[t+5])<<8,M+=8191&(o>>>10|i<<6),h=255&r[t+6]|(255&r[t+7])<<8,m+=8191&(i>>>7|h<<9),a=255&r[t+8]|(255&r[t+9])<<8,B+=8191&(h>>>4|a<<12),S+=a>>>1&8191,f=255&r[t+10]|(255&r[t+11])<<8,K+=8191&(a>>>14|f<<2),s=255&r[t+12]|(255&r[t+13])<<8,T+=8191&(f>>>11|s<<5),c=255&r[t+14]|(255&r[t+15])<<8,Y+=8191&(s>>>8|c<<8),k+=c>>>5|U,u=0,y=u,y+=E*L,y+=x*(5*G),y+=M*(5*I),y+=m*(5*F),y+=B*(5*C),u=y>>>13,y&=8191,y+=S*(5*N),y+=K*(5*O),y+=T*(5*P),y+=Y*(5*R),y+=k*(5*z),u+=y>>>13,y&=8191,l=u,l+=E*z,l+=x*L,l+=M*(5*G),l+=m*(5*I),l+=B*(5*F),u=l>>>13,l&=8191,l+=S*(5*C),l+=K*(5*N),l+=T*(5*O),l+=Y*(5*P),l+=k*(5*R),u+=l>>>13,l&=8191,w=u,w+=E*R,w+=x*z,w+=M*L,w+=m*(5*G),w+=B*(5*I),u=w>>>13,w&=8191,w+=S*(5*F),w+=K*(5*C),w+=T*(5*N),w+=Y*(5*O),w+=k*(5*P),u+=w>>>13,w&=8191,p=u,p+=E*P,p+=x*R,p+=M*z,p+=m*L,p+=B*(5*G),u=p>>>13,p&=8191,p+=S*(5*I),p+=K*(5*F),p+=T*(5*C),p+=Y*(5*N),p+=k*(5*O),u+=p>>>13,p&=8191,v=u,v+=E*O,v+=x*P,v+=M*R,v+=m*z,v+=B*L,u=v>>>13,v&=8191,v+=S*(5*G),v+=K*(5*I),v+=T*(5*F),v+=Y*(5*C),v+=k*(5*N),u+=v>>>13,v&=8191,b=u,b+=E*N,b+=x*O,b+=M*P,b+=m*R,b+=B*z,u=b>>>13,b&=8191,b+=S*L,b+=K*(5*G),b+=T*(5*I),b+=Y*(5*F),b+=k*(5*C),u+=b>>>13,b&=8191,g=u,g+=E*C,g+=x*N,g+=M*O,g+=m*P,g+=B*R,u=g>>>13,g&=8191,g+=S*z,g+=K*L,g+=T*(5*G),g+=Y*(5*I),g+=k*(5*F),u+=g>>>13,g&=8191,_=u,_+=E*F,_+=x*C,_+=M*N,_+=m*O,_+=B*P,u=_>>>13,_&=8191,_+=S*R,_+=K*z,_+=T*L,_+=Y*(5*G),_+=k*(5*I),u+=_>>>13,_&=8191,A=u,A+=E*I,A+=x*F,A+=M*C,A+=m*N,A+=B*O,u=A>>>13,A&=8191,A+=S*P,A+=K*R,A+=T*z,A+=Y*L,A+=k*(5*G),u+=A>>>13,A&=8191,d=u,d+=E*G,d+=x*I,d+=M*F,d+=m*C,d+=B*N,u=d>>>13,d&=8191,d+=S*O,d+=K*P,d+=T*R,d+=Y*z,d+=k*L,u+=d>>>13,d&=8191,u=(u<<2)+u|0,u=u+y|0,y=8191&u,u>>>=13,l+=u,E=y,x=l,M=w,m=p,B=v,S=b,K=g,T=_,Y=A,k=d,t+=16,n-=16;this.h[0]=E,this.h[1]=x,this.h[2]=M,this.h[3]=m,this.h[4]=B,this.h[5]=S,this.h[6]=K,this.h[7]=T,this.h[8]=Y,this.h[9]=k},yr.prototype.finish=function(r,t){var n,e,o,i,h=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=n,n=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,h[0]=this.h[0]+5,n=h[0]>>>13,h[0]&=8191,i=1;i<10;i++)h[i]=this.h[i]+n,n=h[i]>>>13,h[i]&=8191;for(h[9]-=8192,e=(1^n)-1,i=0;i<10;i++)h[i]&=e;for(e=~e,i=0;i<10;i++)this.h[i]=this.h[i]&e|h[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},yr.prototype.update=function(r,t,n){var e,o;if(this.leftover){for(o=16-this.leftover,o>n&&(o=n),e=0;e=16&&(o=n-n%16,this.blocks(r,t,o),t+=o,n-=o),n){for(e=0;e=0},r.sign.keyPair=function(){var r=new Uint8Array(Tr),t=new Uint8Array(Yr);return Z(r,t),{publicKey:r,secretKey:t}},r.sign.keyPair.fromSecretKey=function(r){if(Q(r),r.length!==Yr)throw new Error("bad secret key size");for(var t=new Uint8Array(Tr),n=0;n void): void; +} diff --git a/node_modules/tweetnacl/nacl.js b/node_modules/tweetnacl/nacl.js new file mode 100644 index 0000000..f72dd78 --- /dev/null +++ b/node_modules/tweetnacl/nacl.js @@ -0,0 +1,1175 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var u64 = function(h, l) { this.hi = h|0 >>> 0; this.lo = l|0 >>> 0; }; +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function L32(x, c) { return (x << c) | (x >>> (32 - c)); } + +function ld32(x, i) { + var u = x[i+3] & 0xff; + u = (u<<8)|(x[i+2] & 0xff); + u = (u<<8)|(x[i+1] & 0xff); + return (u<<8)|(x[i+0] & 0xff); +} + +function dl64(x, i) { + var h = (x[i] << 24) | (x[i+1] << 16) | (x[i+2] << 8) | x[i+3]; + var l = (x[i+4] << 24) | (x[i+5] << 16) | (x[i+6] << 8) | x[i+7]; + return new u64(h, l); +} + +function st32(x, j, u) { + var i; + for (i = 0; i < 4; i++) { x[j+i] = u & 255; u >>>= 8; } +} + +function ts64(x, i, u) { + x[i] = (u.hi >> 24) & 0xff; + x[i+1] = (u.hi >> 16) & 0xff; + x[i+2] = (u.hi >> 8) & 0xff; + x[i+3] = u.hi & 0xff; + x[i+4] = (u.lo >> 24) & 0xff; + x[i+5] = (u.lo >> 16) & 0xff; + x[i+6] = (u.lo >> 8) & 0xff; + x[i+7] = u.lo & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core(out,inp,k,c,h) { + var w = new Uint32Array(16), x = new Uint32Array(16), + y = new Uint32Array(16), t = new Uint32Array(4); + var i, j, m; + + for (i = 0; i < 4; i++) { + x[5*i] = ld32(c, 4*i); + x[1+i] = ld32(k, 4*i); + x[6+i] = ld32(inp, 4*i); + x[11+i] = ld32(k, 16+4*i); + } + + for (i = 0; i < 16; i++) y[i] = x[i]; + + for (i = 0; i < 20; i++) { + for (j = 0; j < 4; j++) { + for (m = 0; m < 4; m++) t[m] = x[(5*j+4*m)%16]; + t[1] ^= L32((t[0]+t[3])|0, 7); + t[2] ^= L32((t[1]+t[0])|0, 9); + t[3] ^= L32((t[2]+t[1])|0,13); + t[0] ^= L32((t[3]+t[2])|0,18); + for (m = 0; m < 4; m++) w[4*j+(j+m)%4] = t[m]; + } + for (m = 0; m < 16; m++) x[m] = w[m]; + } + + if (h) { + for (i = 0; i < 16; i++) x[i] = (x[i] + y[i]) | 0; + for (i = 0; i < 4; i++) { + x[5*i] = (x[5*i] - ld32(c, 4*i)) | 0; + x[6+i] = (x[6+i] - ld32(inp, 4*i)) | 0; + } + for (i = 0; i < 4; i++) { + st32(out,4*i,x[5*i]); + st32(out,16+4*i,x[6+i]); + } + } else { + for (i = 0; i < 16; i++) st32(out, 4 * i, (x[i] + y[i]) | 0); + } +} + +function crypto_core_salsa20(out,inp,k,c) { + core(out,inp,k,c,false); + return 0; +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core(out,inp,k,c,true); + return 0; +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + if (!b) return 0; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + if (m) mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,d,n,k) { + return crypto_stream_salsa20_xor(c,cpos,null,0,d,n,k); +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20(c,cpos,d,n.subarray(16),s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,n.subarray(16),s); +} + +function add1305(h, c) { + var j, u = 0; + for (j = 0; j < 17; j++) { + u = (u + ((h[j] + c[j]) | 0)) | 0; + h[j] = u & 255; + u >>>= 8; + } +} + +var minusp = new Uint32Array([ + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 +]); + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s, i, j, u; + var x = new Uint32Array(17), r = new Uint32Array(17), + h = new Uint32Array(17), c = new Uint32Array(17), + g = new Uint32Array(17); + for (j = 0; j < 17; j++) r[j]=h[j]=0; + for (j = 0; j < 16; j++) r[j]=k[j]; + r[3]&=15; + r[4]&=252; + r[7]&=15; + r[8]&=252; + r[11]&=15; + r[12]&=252; + r[15]&=15; + + while (n > 0) { + for (j = 0; j < 17; j++) c[j] = 0; + for (j = 0; (j < 16) && (j < n); ++j) c[j] = m[mpos+j]; + c[j] = 1; + mpos += j; n -= j; + add1305(h,c); + for (i = 0; i < 17; i++) { + x[i] = 0; + for (j = 0; j < 17; j++) x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j])|0))) | 0) | 0; + } + for (i = 0; i < 17; i++) h[i] = x[i]; + u = 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u & 3; + u = (5 * (u >>> 2)) | 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u; + } + + for (j = 0; j < 17; j++) g[j] = h[j]; + add1305(h,minusp); + s = (-(h[16] >>> 7) | 0); + for (j = 0; j < 17; j++) h[j] ^= s & (g[j] ^ h[j]); + + for (j = 0; j < 16; j++) c[j] = k[j + 16]; + c[16] = 0; + add1305(h,c); + for (j = 0; j < 16; j++) out[outpos+j] = h[j]; + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var c; + var i; + for (i = 0; i < 16; i++) { + o[i] += 65536; + c = Math.floor(o[i] / 65536); + o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0); + o[i] -= (c * 65536); + } +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0; +} + +function Z(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0; +} + +function M(o, a, b) { + var i, j, t = new Float64Array(31); + for (i = 0; i < 31; i++) t[i] = 0; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + t[i+j] += a[i] * b[j]; + } + } + for (i = 0; i < 15; i++) { + t[i] += 38 * t[i+16]; + } + for (i = 0; i < 16; i++) o[i] = t[i]; + car25519(o); + car25519(o); +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +function add64() { + var a = 0, b = 0, c = 0, d = 0, m16 = 65535, l, h, i; + for (i = 0; i < arguments.length; i++) { + l = arguments[i].lo; + h = arguments[i].hi; + a += (l & m16); b += (l >>> 16); + c += (h & m16); d += (h >>> 16); + } + + b += (a >>> 16); + c += (b >>> 16); + d += (c >>> 16); + + return new u64((c & m16) | (d << 16), (a & m16) | (b << 16)); +} + +function shr64(x, c) { + return new u64((x.hi >>> c), (x.lo >>> c) | (x.hi << (32 - c))); +} + +function xor64() { + var l = 0, h = 0, i; + for (i = 0; i < arguments.length; i++) { + l ^= arguments[i].lo; + h ^= arguments[i].hi; + } + return new u64(h, l); +} + +function R(x, c) { + var h, l, c1 = 32 - c; + if (c < 32) { + h = (x.hi >>> c) | (x.lo << c1); + l = (x.lo >>> c) | (x.hi << c1); + } else if (c < 64) { + h = (x.lo >>> c) | (x.hi << c1); + l = (x.hi >>> c) | (x.lo << c1); + } + return new u64(h, l); +} + +function Ch(x, y, z) { + var h = (x.hi & y.hi) ^ (~x.hi & z.hi), + l = (x.lo & y.lo) ^ (~x.lo & z.lo); + return new u64(h, l); +} + +function Maj(x, y, z) { + var h = (x.hi & y.hi) ^ (x.hi & z.hi) ^ (y.hi & z.hi), + l = (x.lo & y.lo) ^ (x.lo & z.lo) ^ (y.lo & z.lo); + return new u64(h, l); +} + +function Sigma0(x) { return xor64(R(x,28), R(x,34), R(x,39)); } +function Sigma1(x) { return xor64(R(x,14), R(x,18), R(x,41)); } +function sigma0(x) { return xor64(R(x, 1), R(x, 8), shr64(x,7)); } +function sigma1(x) { return xor64(R(x,19), R(x,61), shr64(x,6)); } + +var K = [ + new u64(0x428a2f98, 0xd728ae22), new u64(0x71374491, 0x23ef65cd), + new u64(0xb5c0fbcf, 0xec4d3b2f), new u64(0xe9b5dba5, 0x8189dbbc), + new u64(0x3956c25b, 0xf348b538), new u64(0x59f111f1, 0xb605d019), + new u64(0x923f82a4, 0xaf194f9b), new u64(0xab1c5ed5, 0xda6d8118), + new u64(0xd807aa98, 0xa3030242), new u64(0x12835b01, 0x45706fbe), + new u64(0x243185be, 0x4ee4b28c), new u64(0x550c7dc3, 0xd5ffb4e2), + new u64(0x72be5d74, 0xf27b896f), new u64(0x80deb1fe, 0x3b1696b1), + new u64(0x9bdc06a7, 0x25c71235), new u64(0xc19bf174, 0xcf692694), + new u64(0xe49b69c1, 0x9ef14ad2), new u64(0xefbe4786, 0x384f25e3), + new u64(0x0fc19dc6, 0x8b8cd5b5), new u64(0x240ca1cc, 0x77ac9c65), + new u64(0x2de92c6f, 0x592b0275), new u64(0x4a7484aa, 0x6ea6e483), + new u64(0x5cb0a9dc, 0xbd41fbd4), new u64(0x76f988da, 0x831153b5), + new u64(0x983e5152, 0xee66dfab), new u64(0xa831c66d, 0x2db43210), + new u64(0xb00327c8, 0x98fb213f), new u64(0xbf597fc7, 0xbeef0ee4), + new u64(0xc6e00bf3, 0x3da88fc2), new u64(0xd5a79147, 0x930aa725), + new u64(0x06ca6351, 0xe003826f), new u64(0x14292967, 0x0a0e6e70), + new u64(0x27b70a85, 0x46d22ffc), new u64(0x2e1b2138, 0x5c26c926), + new u64(0x4d2c6dfc, 0x5ac42aed), new u64(0x53380d13, 0x9d95b3df), + new u64(0x650a7354, 0x8baf63de), new u64(0x766a0abb, 0x3c77b2a8), + new u64(0x81c2c92e, 0x47edaee6), new u64(0x92722c85, 0x1482353b), + new u64(0xa2bfe8a1, 0x4cf10364), new u64(0xa81a664b, 0xbc423001), + new u64(0xc24b8b70, 0xd0f89791), new u64(0xc76c51a3, 0x0654be30), + new u64(0xd192e819, 0xd6ef5218), new u64(0xd6990624, 0x5565a910), + new u64(0xf40e3585, 0x5771202a), new u64(0x106aa070, 0x32bbd1b8), + new u64(0x19a4c116, 0xb8d2d0c8), new u64(0x1e376c08, 0x5141ab53), + new u64(0x2748774c, 0xdf8eeb99), new u64(0x34b0bcb5, 0xe19b48a8), + new u64(0x391c0cb3, 0xc5c95a63), new u64(0x4ed8aa4a, 0xe3418acb), + new u64(0x5b9cca4f, 0x7763e373), new u64(0x682e6ff3, 0xd6b2b8a3), + new u64(0x748f82ee, 0x5defb2fc), new u64(0x78a5636f, 0x43172f60), + new u64(0x84c87814, 0xa1f0ab72), new u64(0x8cc70208, 0x1a6439ec), + new u64(0x90befffa, 0x23631e28), new u64(0xa4506ceb, 0xde82bde9), + new u64(0xbef9a3f7, 0xb2c67915), new u64(0xc67178f2, 0xe372532b), + new u64(0xca273ece, 0xea26619c), new u64(0xd186b8c7, 0x21c0c207), + new u64(0xeada7dd6, 0xcde0eb1e), new u64(0xf57d4f7f, 0xee6ed178), + new u64(0x06f067aa, 0x72176fba), new u64(0x0a637dc5, 0xa2c898a6), + new u64(0x113f9804, 0xbef90dae), new u64(0x1b710b35, 0x131c471b), + new u64(0x28db77f5, 0x23047d84), new u64(0x32caab7b, 0x40c72493), + new u64(0x3c9ebe0a, 0x15c9bebc), new u64(0x431d67c4, 0x9c100d4c), + new u64(0x4cc5d4be, 0xcb3e42b6), new u64(0x597f299c, 0xfc657e2a), + new u64(0x5fcb6fab, 0x3ad6faec), new u64(0x6c44198c, 0x4a475817) +]; + +function crypto_hashblocks(x, m, n) { + var z = [], b = [], a = [], w = [], t, i, j; + + for (i = 0; i < 8; i++) z[i] = a[i] = dl64(x, 8*i); + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) w[i] = dl64(m, 8*i+pos); + for (i = 0; i < 80; i++) { + for (j = 0; j < 8; j++) b[j] = a[j]; + t = add64(a[7], Sigma1(a[4]), Ch(a[4], a[5], a[6]), K[i], w[i%16]); + b[7] = add64(t, Sigma0(a[0]), Maj(a[0], a[1], a[2])); + b[3] = add64(b[3], t); + for (j = 0; j < 8; j++) a[(j+1)%8] = b[j]; + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + w[j] = add64(w[j], w[(j+9)%16], sigma0(w[(j+1)%16]), sigma1(w[(j+14)%16])); + } + } + } + + for (i = 0; i < 8; i++) { + a[i] = add64(a[i], z[i]); + z[i] = a[i]; + } + + pos += 128; + n -= 128; + } + + for (i = 0; i < 8; i++) ts64(x, 8*i, z[i]); + return n; +} + +var iv = new Uint8Array([ + 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, + 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, + 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b, + 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1, + 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1, + 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f, + 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b, + 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79 +]); + +function crypto_hash(out, m, n) { + var h = new Uint8Array(64), x = new Uint8Array(256); + var i, b = n; + + for (i = 0; i < 64; i++) h[i] = iv[i]; + + crypto_hashblocks(h, m, n); + n %= 128; + + for (i = 0; i < 256; i++) x[i] = 0; + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, new u64((b / 0x20000000) | 0, b << 3)); + crypto_hashblocks(h, x, n); + + for (i = 0; i < 64; i++) out[i] = h[i]; + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + mlen = -1; + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +// TODO: Completely remove this in v0.15. +if (!nacl.util) { + nacl.util = {}; + nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { + throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); + }; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl.min.js b/node_modules/tweetnacl/nacl.min.js new file mode 100644 index 0000000..4484974 --- /dev/null +++ b/node_modules/tweetnacl/nacl.min.js @@ -0,0 +1 @@ +!function(r){"use strict";function n(r,n){return r<>>32-n}function e(r,n){var e=255&r[n+3];return e=e<<8|255&r[n+2],e=e<<8|255&r[n+1],e<<8|255&r[n+0]}function t(r,n){var e=r[n]<<24|r[n+1]<<16|r[n+2]<<8|r[n+3],t=r[n+4]<<24|r[n+5]<<16|r[n+6]<<8|r[n+7];return new sr(e,t)}function o(r,n,e){var t;for(t=0;t<4;t++)r[n+t]=255&e,e>>>=8}function i(r,n,e){r[n]=e.hi>>24&255,r[n+1]=e.hi>>16&255,r[n+2]=e.hi>>8&255,r[n+3]=255&e.hi,r[n+4]=e.lo>>24&255,r[n+5]=e.lo>>16&255,r[n+6]=e.lo>>8&255,r[n+7]=255&e.lo}function a(r,n,e,t,o){var i,a=0;for(i=0;i>>8)-1}function f(r,n,e,t){return a(r,n,e,t,16)}function u(r,n,e,t){return a(r,n,e,t,32)}function c(r,t,i,a,f){var u,c,w,y=new Uint32Array(16),l=new Uint32Array(16),s=new Uint32Array(16),h=new Uint32Array(4);for(u=0;u<4;u++)l[5*u]=e(a,4*u),l[1+u]=e(i,4*u),l[6+u]=e(t,4*u),l[11+u]=e(i,16+4*u);for(u=0;u<16;u++)s[u]=l[u];for(u=0;u<20;u++){for(c=0;c<4;c++){for(w=0;w<4;w++)h[w]=l[(5*c+4*w)%16];for(h[1]^=n(h[0]+h[3]|0,7),h[2]^=n(h[1]+h[0]|0,9),h[3]^=n(h[2]+h[1]|0,13),h[0]^=n(h[3]+h[2]|0,18),w=0;w<4;w++)y[4*c+(c+w)%4]=h[w]}for(w=0;w<16;w++)l[w]=y[w]}if(f){for(u=0;u<16;u++)l[u]=l[u]+s[u]|0;for(u=0;u<4;u++)l[5*u]=l[5*u]-e(a,4*u)|0,l[6+u]=l[6+u]-e(t,4*u)|0;for(u=0;u<4;u++)o(r,4*u,l[5*u]),o(r,16+4*u,l[6+u])}else for(u=0;u<16;u++)o(r,4*u,l[u]+s[u]|0)}function w(r,n,e,t){return c(r,n,e,t,!1),0}function y(r,n,e,t){return c(r,n,e,t,!0),0}function l(r,n,e,t,o,i,a){var f,u,c=new Uint8Array(16),y=new Uint8Array(64);if(!o)return 0;for(u=0;u<16;u++)c[u]=0;for(u=0;u<8;u++)c[u]=i[u];for(;o>=64;){for(w(y,c,a,Br),u=0;u<64;u++)r[n+u]=(e?e[t+u]:0)^y[u];for(f=1,u=8;u<16;u++)f=f+(255&c[u])|0,c[u]=255&f,f>>>=8;o-=64,n+=64,e&&(t+=64)}if(o>0)for(w(y,c,a,Br),u=0;u>>=8}function b(r,n,e,t,o,i){var a,f,u,c,w=new Uint32Array(17),y=new Uint32Array(17),l=new Uint32Array(17),s=new Uint32Array(17),h=new Uint32Array(17);for(u=0;u<17;u++)y[u]=l[u]=0;for(u=0;u<16;u++)y[u]=i[u];for(y[3]&=15,y[4]&=252,y[7]&=15,y[8]&=252,y[11]&=15,y[12]&=252,y[15]&=15;o>0;){for(u=0;u<17;u++)s[u]=0;for(u=0;u<16&&u>>=8;for(c=c+l[16]|0,l[16]=3&c,c=5*(c>>>2)|0,u=0;u<16;u++)c=c+l[u]|0,l[u]=255&c,c>>>=8;c=c+l[16]|0,l[16]=c}for(u=0;u<17;u++)h[u]=l[u];for(v(l,Sr),a=0|-(l[16]>>>7),u=0;u<17;u++)l[u]^=a&(h[u]^l[u]);for(u=0;u<16;u++)s[u]=i[u+16];for(s[16]=0,v(l,s),u=0;u<16;u++)r[n+u]=l[u];return 0}function p(r,n,e,t,o,i){var a=new Uint8Array(16);return b(a,0,e,t,o,i),f(r,n,a,0)}function _(r,n,e,t,o){var i;if(e<32)return-1;for(g(r,0,n,0,e,t,o),b(r,16,r,32,e-32,r),i=0;i<16;i++)r[i]=0;return 0}function A(r,n,e,t,o){var i,a=new Uint8Array(32);if(e<32)return-1;if(h(a,0,32,t,o),0!==p(n,16,n,32,e-32,a))return-1;for(g(r,0,n,0,e,t,o),i=0;i<32;i++)r[i]=0;return 0}function U(r,n){var e;for(e=0;e<16;e++)r[e]=0|n[e]}function E(r){var n,e;for(e=0;e<16;e++)r[e]+=65536,n=Math.floor(r[e]/65536),r[(e+1)*(e<15?1:0)]+=n-1+37*(n-1)*(15===e?1:0),r[e]-=65536*n}function d(r,n,e){for(var t,o=~(e-1),i=0;i<16;i++)t=o&(r[i]^n[i]),r[i]^=t,n[i]^=t}function x(r,n){var e,t,o,i=hr(),a=hr();for(e=0;e<16;e++)a[e]=n[e];for(E(a),E(a),E(a),t=0;t<2;t++){for(i[0]=a[0]-65517,e=1;e<15;e++)i[e]=a[e]-65535-(i[e-1]>>16&1),i[e-1]&=65535;i[15]=a[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,d(a,i,1-o)}for(e=0;e<16;e++)r[2*e]=255&a[e],r[2*e+1]=a[e]>>8}function m(r,n){var e=new Uint8Array(32),t=new Uint8Array(32);return x(e,r),x(t,n),u(e,0,t,0)}function B(r){var n=new Uint8Array(32);return x(n,r),1&n[0]}function S(r,n){var e;for(e=0;e<16;e++)r[e]=n[2*e]+(n[2*e+1]<<8);r[15]&=32767}function K(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]+e[t]|0}function T(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]-e[t]|0}function Y(r,n,e){var t,o,i=new Float64Array(31);for(t=0;t<31;t++)i[t]=0;for(t=0;t<16;t++)for(o=0;o<16;o++)i[t+o]+=n[t]*e[o];for(t=0;t<15;t++)i[t]+=38*i[t+16];for(t=0;t<16;t++)r[t]=i[t];E(r),E(r)}function L(r,n){Y(r,n,n)}function k(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=253;e>=0;e--)L(t,t),2!==e&&4!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function z(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=250;e>=0;e--)L(t,t),1!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function R(r,n,e){var t,o,i=new Uint8Array(32),a=new Float64Array(80),f=hr(),u=hr(),c=hr(),w=hr(),y=hr(),l=hr();for(o=0;o<31;o++)i[o]=n[o];for(i[31]=127&n[31]|64,i[0]&=248,S(a,e),o=0;o<16;o++)u[o]=a[o],w[o]=f[o]=c[o]=0;for(f[0]=w[0]=1,o=254;o>=0;--o)t=i[o>>>3]>>>(7&o)&1,d(f,u,t),d(c,w,t),K(y,f,c),T(f,f,c),K(c,u,w),T(u,u,w),L(w,y),L(l,f),Y(f,c,f),Y(c,u,y),K(y,f,c),T(f,f,c),L(u,f),T(c,w,l),Y(f,c,Ar),K(f,f,w),Y(c,c,f),Y(f,w,l),Y(w,u,a),L(u,y),d(f,u,t),d(c,w,t);for(o=0;o<16;o++)a[o+16]=f[o],a[o+32]=c[o],a[o+48]=u[o],a[o+64]=w[o];var s=a.subarray(32),h=a.subarray(16);return k(s,s),Y(h,h,s),x(r,h),0}function P(r,n){return R(r,n,br)}function O(r,n){return gr(n,32),P(r,n)}function F(r,n,e){var t=new Uint8Array(32);return R(t,e,n),y(r,vr,t,Br)}function N(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Kr(r,n,e,t,a)}function C(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Tr(r,n,e,t,a)}function M(){var r,n,e,t=0,o=0,i=0,a=0,f=65535;for(e=0;e>>16,i+=n&f,a+=n>>>16;return o+=t>>>16,i+=o>>>16,a+=i>>>16,new sr(i&f|a<<16,t&f|o<<16)}function G(r,n){return new sr(r.hi>>>n,r.lo>>>n|r.hi<<32-n)}function Z(){var r,n=0,e=0;for(r=0;r>>n|r.lo<>>n|r.hi<>>n|r.hi<>>n|r.lo<=128;){for(a=0;a<16;a++)y[a]=t(n,8*a+l);for(a=0;a<80;a++){for(f=0;f<8;f++)c[f]=w[f];for(o=M(w[7],X(w[4]),q(w[4],w[5],w[6]),Yr[a],y[a%16]),c[7]=M(o,V(w[0]),I(w[0],w[1],w[2])),c[3]=M(c[3],o),f=0;f<8;f++)w[(f+1)%8]=c[f];if(a%16===15)for(f=0;f<16;f++)y[f]=M(y[f],y[(f+9)%16],D(y[(f+1)%16]),H(y[(f+14)%16]))}for(a=0;a<8;a++)w[a]=M(w[a],u[a]),u[a]=w[a];l+=128,e-=128}for(a=0;a<8;a++)i(r,8*a,u[a]);return e}function Q(r,n,e){var t,o=new Uint8Array(64),a=new Uint8Array(256),f=e;for(t=0;t<64;t++)o[t]=Lr[t];for(J(o,n,e),e%=128,t=0;t<256;t++)a[t]=0;for(t=0;t=0;--o)t=e[o/8|0]>>(7&o)&1,$(r,n,t),W(n,r),W(r,r),$(r,n,t)}function er(r,n){var e=[hr(),hr(),hr(),hr()];U(e[0],dr),U(e[1],xr),U(e[2],_r),Y(e[3],dr,xr),nr(r,e,n)}function tr(r,n,e){var t,o=new Uint8Array(64),i=[hr(),hr(),hr(),hr()];for(e||gr(n,32),Q(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,er(i,o),rr(r,i),t=0;t<32;t++)n[t+32]=r[t];return 0}function or(r,n){var e,t,o,i;for(t=63;t>=32;--t){for(e=0,o=t-32,i=t-12;o>8,n[o]-=256*e;n[o]+=e,n[t]=0}for(e=0,o=0;o<32;o++)n[o]+=e-(n[31]>>4)*kr[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*kr[o];for(t=0;t<32;t++)n[t+1]+=n[t]>>8,r[t]=255&n[t]}function ir(r){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=r[n];for(n=0;n<64;n++)r[n]=0;or(r,e)}function ar(r,n,e,t){var o,i,a=new Uint8Array(64),f=new Uint8Array(64),u=new Uint8Array(64),c=new Float64Array(64),w=[hr(),hr(),hr(),hr()];Q(a,t,32),a[0]&=248,a[31]&=127,a[31]|=64;var y=e+64;for(o=0;o>7&&T(r[0],pr,r[0]),Y(r[3],r[0],r[1]),0)}function ur(r,n,e,t){var o,i,a=new Uint8Array(32),f=new Uint8Array(64),c=[hr(),hr(),hr(),hr()],w=[hr(),hr(),hr(),hr()];if(i=-1,e<64)return-1;if(fr(w,t))return-1;for(o=0;o=0},r.sign.keyPair=function(){var r=new Uint8Array(Vr),n=new Uint8Array(Xr);return tr(r,n),{publicKey:r,secretKey:n}},r.sign.keyPair.fromSecretKey=function(r){if(yr(r),r.length!==Xr)throw new Error("bad secret key size");for(var n=new Uint8Array(Vr),e=0;e=0.14.1 <0.15.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/discordie" + ] + ], + "_from": "tweetnacl@>=0.14.1 <0.15.0", + "_id": "tweetnacl@0.14.5", + "_inCache": true, + "_location": "/tweetnacl", + "_nodeVersion": "7.0.0", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/tweetnacl-0.14.5.tgz_1481627515097_0.015130913350731134" + }, + "_npmUser": { + "name": "dchest", + "email": "dmitry@codingrobots.com" + }, + "_npmVersion": "3.10.8", + "_phantomChildren": {}, + "_requested": { + "raw": "tweetnacl@^0.14.1", + "scope": null, + "escapedName": "tweetnacl", + "name": "tweetnacl", + "rawSpec": "^0.14.1", + "spec": ">=0.14.1 <0.15.0", + "type": "range" + }, + "_requiredBy": [ + "/discordie" + ], + "_resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "_shasum": "5ae68177f192d4456269d108afa93ff8743f4f64", + "_shrinkwrap": null, + "_spec": "tweetnacl@^0.14.1", + "_where": "/home/burchettm/statsbot/node_modules/discordie", + "author": { + "name": "TweetNaCl-js contributors" + }, + "browser": { + "buffer": false, + "crypto": false + }, + "bugs": { + "url": "https://github.com/dchest/tweetnacl-js/issues" + }, + "dependencies": {}, + "description": "Port of TweetNaCl cryptographic library to JavaScript", + "devDependencies": { + "browserify": "^13.0.0", + "eslint": "^2.2.0", + "faucet": "^0.0.1", + "tap-browser-color": "^0.1.2", + "tape": "^4.4.0", + "tape-run": "^2.1.3", + "tweetnacl-util": "^0.13.3", + "uglify-js": "^2.6.1" + }, + "directories": { + "test": "test" + }, + "dist": { + "shasum": "5ae68177f192d4456269d108afa93ff8743f4f64", + "tarball": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + }, + "gitHead": "cce829e473b1ae299a9373b5140c713ee88f577f", + "homepage": "https://tweetnacl.js.org", + "keywords": [ + "crypto", + "cryptography", + "curve25519", + "ed25519", + "encrypt", + "hash", + "key", + "nacl", + "poly1305", + "public", + "salsa20", + "signatures" + ], + "license": "Unlicense", + "main": "nacl-fast.js", + "maintainers": [ + { + "name": "dchest", + "email": "dmitry@codingrobots.com" + } + ], + "name": "tweetnacl", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/dchest/tweetnacl-js.git" + }, + "scripts": { + "bench": "node test/benchmark/bench.js", + "build": "uglifyjs nacl.js -c -m -o nacl.min.js && uglifyjs nacl-fast.js -c -m -o nacl-fast.min.js", + "build-test-browser": "browserify test/browser/init.js test/*.js | uglifyjs -c -m -o test/browser/_bundle.js 2>/dev/null && browserify test/browser/init.js test/*.quick.js | uglifyjs -c -m -o test/browser/_bundle-quick.js 2>/dev/null", + "lint": "eslint nacl.js nacl-fast.js test/*.js test/benchmark/*.js", + "test": "npm run test-node-all && npm run test-browser", + "test-browser": "NACL_SRC=${NACL_SRC:='nacl.min.js'} && npm run build-test-browser && cat $NACL_SRC test/browser/_bundle.js | tape-run | faucet", + "test-node": "tape test/*.js | faucet", + "test-node-all": "make -C test/c && tape test/*.js test/c/*.js | faucet" + }, + "types": "nacl.d.ts", + "version": "0.14.5" +} diff --git a/node_modules/ultron/.npmignore b/node_modules/ultron/.npmignore new file mode 100644 index 0000000..66210a2 --- /dev/null +++ b/node_modules/ultron/.npmignore @@ -0,0 +1,3 @@ +node_modules +coverage +.tern-port diff --git a/node_modules/ultron/.travis.yml b/node_modules/ultron/.travis.yml new file mode 100644 index 0000000..a505004 --- /dev/null +++ b/node_modules/ultron/.travis.yml @@ -0,0 +1,21 @@ +sudo: false +language: node_js +node_js: + - "0.12" + - "0.10" + - "0.8" + - "iojs" +before_install: + - 'if [ "${TRAVIS_NODE_VERSION}" == "0.8" ]; then npm install -g npm@2.11.1; fi' +script: + - "npm run test-travis" +after_script: + - "npm install coveralls@2.11.x && cat coverage/lcov.info | coveralls" +matrix: + fast_finish: true +notifications: + irc: + channels: + - "irc.freenode.org#unshift" + on_success: change + on_failure: change diff --git a/node_modules/ultron/LICENSE b/node_modules/ultron/LICENSE new file mode 100644 index 0000000..6dc9316 --- /dev/null +++ b/node_modules/ultron/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/ultron/README.md b/node_modules/ultron/README.md new file mode 100644 index 0000000..84fa3f2 --- /dev/null +++ b/node_modules/ultron/README.md @@ -0,0 +1,97 @@ +# Ultron + +[![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](http://img.shields.io/npm/v/ultron.svg?style=flat-square)](http://browsenpm.org/package/ultron)[![Build Status](http://img.shields.io/travis/unshiftio/ultron/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/ultron)[![Dependencies](https://img.shields.io/david/unshiftio/ultron.svg?style=flat-square)](https://david-dm.org/unshiftio/ultron)[![Coverage Status](http://img.shields.io/coveralls/unshiftio/ultron/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/ultron?branch=master)[![IRC channel](http://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](http://webchat.freenode.net/?channels=unshift) + +Ultron is a high-intelligence robot. It gathers intelligence so it can start +improving upon his rudimentary design. It will learn your event emitting +patterns and find ways to exterminate them. Allowing you to remove only the +event emitters that **you** assigned and not the ones that your users or +developers assigned. This can prevent race conditions, memory leaks and even file +descriptor leaks from ever happening as you won't remove clean up processes. + +## Installation + +The module is designed to be used in browsers using browserify and in Node.js. +You can install the module through the public npm registry by running the +following command in CLI: + +``` +npm install --save ultron +``` + +## Usage + +In all examples we assume that you've required the library as following: + +```js +'use strict'; + +var Ultron = require('ultron'); +``` + +Now that we've required the library we can construct our first `Ultron` instance. +The constructor requires one argument which should be the `EventEmitter` +instance that we need to operate upon. This can be the `EventEmitter` module +that ships with Node.js or `EventEmitter3` or anything else as long as it +follow the same API and internal structure as these 2. So with that in mind we +can create the instance: + +```js +// +// For the sake of this example we're going to construct an empty EventEmitter +// +var EventEmitter = require('events').EventEmitter; // or require('eventmitter3'); +var events = new EventEmitter(); + +var ultron = new Ultron(events); +``` + +You can now use the following API's from the Ultron instance: + +### Ultron.on + +Register a new event listener for the given event. It follows the exact same API +as `EventEmitter.on` but it will return itself instead of returning the +EventEmitter instance. If you are using EventEmitter3 it also supports the +context param: + +```js +ultron.on('event-name', handler, { custom: 'function context' }); +``` + +### Ultron.once + +Exactly the same as the [Ultron.on](#ultronon) but it only allows the execution +once. + +### Ultron.remove + +This is where all the magic happens and the safe removal starts. This function +accepts different argument styles: + +- No arguments, assume that all events need to be removed so it will work as + `removeAllListeners()` API. +- 1 argument, when it's a string it will be split on ` ` and `,` to create a + list of events that need to be cleared. +- Multiple arguments, we assume that they are all names of events that need to + be cleared. + +```js +ultron.remove('foo, bar baz'); // Removes foo, bar and baz. +ultron.remove('foo', 'bar', 'baz'); // Removes foo, bar and baz. +ultron.remove(); // Removes everything. +``` + +If you just want to remove a single event listener using a function reference +you can still use the EventEmitter's `removeListener(event, fn)` API: + +```js +function foo() {} + +ulton.on('foo', foo); +events.removeListener('foo', foo); +``` + +## License + +MIT diff --git a/node_modules/ultron/index.js b/node_modules/ultron/index.js new file mode 100644 index 0000000..af17ab7 --- /dev/null +++ b/node_modules/ultron/index.js @@ -0,0 +1,129 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +/** + * An auto incrementing id which we can use to create "unique" Ultron instances + * so we can track the event emitters that are added through the Ultron + * interface. + * + * @type {Number} + * @private + */ +var id = 0; + +/** + * Ultron is high-intelligence robot. It gathers intelligence so it can start improving + * upon his rudimentary design. It will learn from your EventEmitting patterns + * and exterminate them. + * + * @constructor + * @param {EventEmitter} ee EventEmitter instance we need to wrap. + * @api public + */ +function Ultron(ee) { + if (!(this instanceof Ultron)) return new Ultron(ee); + + this.id = id++; + this.ee = ee; +} + +/** + * Register a new EventListener for the given event. + * + * @param {String} event Name of the event. + * @param {Functon} fn Callback function. + * @param {Mixed} context The context of the function. + * @returns {Ultron} + * @api public + */ +Ultron.prototype.on = function on(event, fn, context) { + fn.__ultron = this.id; + this.ee.on(event, fn, context); + + return this; +}; +/** + * Add an EventListener that's only called once. + * + * @param {String} event Name of the event. + * @param {Function} fn Callback function. + * @param {Mixed} context The context of the function. + * @returns {Ultron} + * @api public + */ +Ultron.prototype.once = function once(event, fn, context) { + fn.__ultron = this.id; + this.ee.once(event, fn, context); + + return this; +}; + +/** + * Remove the listeners we assigned for the given event. + * + * @returns {Ultron} + * @api public + */ +Ultron.prototype.remove = function remove() { + var args = arguments + , event; + + // + // When no event names are provided we assume that we need to clear all the + // events that were assigned through us. + // + if (args.length === 1 && 'string' === typeof args[0]) { + args = args[0].split(/[, ]+/); + } else if (!args.length) { + args = []; + + for (event in this.ee._events) { + if (has.call(this.ee._events, event)) args.push(event); + } + } + + for (var i = 0; i < args.length; i++) { + var listeners = this.ee.listeners(args[i]); + + for (var j = 0; j < listeners.length; j++) { + event = listeners[j]; + + // + // Once listeners have a `listener` property that stores the real listener + // in the EventEmitter that ships with Node.js. + // + if (event.listener) { + if (event.listener.__ultron !== this.id) continue; + delete event.listener.__ultron; + } else { + if (event.__ultron !== this.id) continue; + delete event.__ultron; + } + + this.ee.removeListener(args[i], event); + } + } + + return this; +}; + +/** + * Destroy the Ultron instance, remove all listeners and release all references. + * + * @returns {Boolean} + * @api public + */ +Ultron.prototype.destroy = function destroy() { + if (!this.ee) return false; + + this.remove(); + this.ee = null; + + return true; +}; + +// +// Expose the module. +// +module.exports = Ultron; diff --git a/node_modules/ultron/package.json b/node_modules/ultron/package.json new file mode 100644 index 0000000..3808323 --- /dev/null +++ b/node_modules/ultron/package.json @@ -0,0 +1,108 @@ +{ + "_args": [ + [ + { + "raw": "ultron@1.0.x", + "scope": null, + "escapedName": "ultron", + "name": "ultron", + "rawSpec": "1.0.x", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/ws" + ] + ], + "_from": "ultron@>=1.0.0 <1.1.0", + "_id": "ultron@1.0.2", + "_inCache": true, + "_location": "/ultron", + "_nodeVersion": "0.12.3", + "_npmUser": { + "name": "3rdeden", + "email": "npm@3rd-Eden.com" + }, + "_npmVersion": "2.9.1", + "_phantomChildren": {}, + "_requested": { + "raw": "ultron@1.0.x", + "scope": null, + "escapedName": "ultron", + "name": "ultron", + "rawSpec": "1.0.x", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/ws" + ], + "_resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "_shasum": "ace116ab557cd197386a4e88f4685378c8b2e4fa", + "_shrinkwrap": null, + "_spec": "ultron@1.0.x", + "_where": "/home/burchettm/statsbot/node_modules/ws", + "author": { + "name": "Arnout Kazemier" + }, + "bugs": { + "url": "https://github.com/unshiftio/ultron/issues" + }, + "dependencies": {}, + "description": "Ultron is high-intelligence robot. It gathers intel so it can start improving upon his rudimentary design", + "devDependencies": { + "assume": "1.2.x", + "eventemitter3": "1.1.x", + "istanbul": "0.3.x", + "mocha": "2.2.x", + "pre-commit": "1.0.x" + }, + "directories": {}, + "dist": { + "shasum": "ace116ab557cd197386a4e88f4685378c8b2e4fa", + "tarball": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz" + }, + "gitHead": "a10482ae98a09120821545456c90c6d60d540f7c", + "homepage": "https://github.com/unshiftio/ultron", + "keywords": [ + "Ultron", + "robot", + "gather", + "intelligence", + "event", + "events", + "eventemitter", + "emitter", + "cleanup" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "unshift", + "email": "npm@unshift.io" + }, + { + "name": "v1", + "email": "info@3rd-Eden.com" + }, + { + "name": "3rdeden", + "email": "npm@3rd-Eden.com" + } + ], + "name": "ultron", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/unshiftio/ultron.git" + }, + "scripts": { + "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100", + "coverage": "istanbul cover ./node_modules/.bin/_mocha -- test.js", + "test": "mocha test.js", + "test-travis": "istanbul cover node_modules/.bin/_mocha --report lcovonly -- test.js", + "watch": "mocha --watch test.js" + }, + "version": "1.0.2" +} diff --git a/node_modules/ultron/test.js b/node_modules/ultron/test.js new file mode 100644 index 0000000..1fd4f1b --- /dev/null +++ b/node_modules/ultron/test.js @@ -0,0 +1,327 @@ +/* istanbul ignore next */ +describe('Ultron', function () { + 'use strict'; + + var EventEmitter = require('eventemitter3') + , EE = require('events').EventEmitter + , assume = require('assume') + , Ultron = require('./') + , ultron + , ee; + + beforeEach(function () { + ee = new EventEmitter(); + ultron = new Ultron(ee); + }); + + afterEach(function () { + ultron.destroy(); + ee.removeAllListeners(); + }); + + it('is exposed as a function', function () { + assume(Ultron).is.a('function'); + }); + + it('can be initialized without the new keyword', function () { + assume(Ultron(ee)).is.instanceOf(Ultron); + }); + + it('assigns a unique id to every instance', function () { + for (var i = 0; i < 100; i++) { + assume(ultron.id).does.not.equal((new Ultron()).id); + } + }); + + it('allows removal through the event emitter', function () { + function foo() {} + function bar() {} + + ultron.on('foo', foo); + ultron.once('foo', bar); + + assume(foo.__ultron).equals(ultron.id); + assume(bar.__ultron).equals(ultron.id); + assume(ee.listeners('foo').length).equals(2); + + ee.removeListener('foo', foo); + assume(ee.listeners('foo').length).equals(1); + + ee.removeListener('foo', bar); + assume(ee.listeners('foo').length).equals(0); + }); + + describe('#on', function () { + it('assigns a listener', function () { + assume(ee.listeners('foo').length).equals(0); + + function foo() {} + + ultron.on('foo', foo); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('tags the assigned function', function () { + assume(ee.listeners('foo').length).equals(0); + + ultron.on('foo', function () {}); + assume(ee.listeners('foo')[0].__ultron).equals(ultron.id); + }); + + it('also passes in the context', function (next) { + var context = 1313; + + ultron.on('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + assume(this).equals(context); + + next(); + }, context); + + ee.emit('foo', 'a', 'b', 'c'); + }); + + it('works with regular eventemitters as well', function (next) { + var ee = new EE() + , ultron = new Ultron(ee); + + ultron.on('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + next(); + }); + + ee.emit('foo', 'a', 'b', 'c'); + }); + }); + + describe('#once', function () { + it('assigns a listener', function () { + assume(ee.listeners('foo').length).equals(0); + + function foo() {} + ultron.once('foo', foo); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('tags the assigned function', function () { + assume(ee.listeners('foo').length).equals(0); + + ultron.once('foo', function () {}); + assume(ee.listeners('foo')[0].__ultron).equals(ultron.id); + }); + + it('also passes in the context', function (next) { + var context = 1313; + + ultron.once('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + assume(this).equals(context); + + next(); + }, context); + + ee.emit('foo', 'a', 'b', 'c'); + ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute + }); + + it('works with regular eventemitters as well', function (next) { + var ee = new EE() + , ultron = new Ultron(ee); + + ultron.once('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + next(); + }); + + ee.emit('foo', 'a', 'b', 'c'); + ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute + }); + }); + + describe('#remove', function () { + it('removes only our assigned `on` listeners', function () { + function foo() {} + function bar() {} + + ee.on('foo', foo); + ultron.on('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('removes our private __ultron references', function () { + function once() {} + function on() {} + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.on('foo', on); + ultron.once('bar', once); + + assume('__ultron' in once).is.true(); + assume('__ultron' in on).is.true(); + + ultron.remove('foo, bar'); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.destroy(); + + ee = new EE(); + ultron = new Ultron(ee); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.on('foo', on); + ultron.once('bar', once); + + assume('__ultron' in once).is.true(); + assume('__ultron' in on).is.true(); + + ultron.remove('foo, bar'); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + }); + + it('removes only our assigned `once` listeners', function () { + function foo() {} + function bar() {} + + ee.once('foo', foo); + ultron.once('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('removes only our assigned `once` listeners from regular EE', function () { + var ee = new EE() + , ultron = new Ultron(ee); + + function foo() {} + function bar() {} + + ee.once('foo', foo); + ultron.once('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0].listener).equals(foo); + }); + + it('removes all assigned events if called without args', function () { + function foo() {} + function bar() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + + ultron.remove(); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + }); + + it('removes multiple listeners based on args', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.remove('foo', 'bar'); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(1); + }); + + it('removes multiple listeners if first arg is seperated string', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.remove('foo, bar'); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(1); + }); + }); + + describe('#destroy', function () { + it('removes all listeners', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.destroy(); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(0); + }); + + it('removes the .ee reference', function () { + assume(ultron.ee).equals(ee); + ultron.destroy(); + assume(ultron.ee).equals(null); + }); + + it('returns booleans for state indication', function () { + assume(ultron.destroy()).is.true(); + assume(ultron.destroy()).is.false(); + assume(ultron.destroy()).is.false(); + assume(ultron.destroy()).is.false(); + }); + }); +}); diff --git a/node_modules/validate-npm-package-license/LICENSE b/node_modules/validate-npm-package-license/LICENSE new file mode 100644 index 0000000..a5e905d --- /dev/null +++ b/node_modules/validate-npm-package-license/LICENSE @@ -0,0 +1,174 @@ +SPDX:Apache-2.0 + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the +copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other +entities that control, are controlled by, or are under common control +with that entity. For the purposes of this definition, "control" means +(i) the power, direct or indirect, to cause the direction or management +of such entity, whether by contract or otherwise, or (ii) ownership of +fifty percent (50%) or more of the outstanding shares, or (iii) +beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation source, +and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but not +limited to compiled object code, generated documentation, and +conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object +form, made available under the License, as indicated by a copyright +notice that is included in or attached to the work (an example is +provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original +version of the Work and any modifications or additions to that Work or +Derivative Works thereof, that is intentionally submitted to Licensor +for inclusion in the Work by the copyright owner or by an individual or +Legal Entity authorized to submit on behalf of the copyright owner. For +the purposes of this definition, "submitted" means any form of +electronic, verbal, or written communication sent to the Licensor or its +representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding +communication that is conspicuously marked or otherwise designated in +writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on +behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright +license to reproduce, prepare Derivative Works of, publicly display, +publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this +License, each Contributor hereby grants to You a perpetual, worldwide, +non-exclusive, no-charge, royalty-free, irrevocable (except as stated in +this section) patent license to make, have made, use, offer to sell, +sell, import, and otherwise transfer the Work, where such license +applies only to those patent claims licensable by such Contributor that +are necessarily infringed by their Contribution(s) alone or by +combination of their Contribution(s) with the Work to which such +Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim in a +lawsuit) alleging that the Work or a Contribution incorporated within +the Work constitutes direct or contributory patent infringement, then +any patent licenses granted to You under this License for that Work +shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work +or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You meet the +following conditions: + +(a) You must give any other recipients of the Work or Derivative Works a +copy of this License; and + +(b) You must cause any modified files to carry prominent notices stating +that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works that You +distribute, all copyright, patent, trademark, and attribution notices +from the Source form of the Work, excluding those notices that do not +pertain to any part of the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must include +a readable copy of the attribution notices contained within such NOTICE +file, excluding those notices that do not pertain to any part of the +Derivative Works, in at least one of the following places: within a +NOTICE text file distributed as part of the Derivative Works; within the +Source form or documentation, if provided along with the Derivative +Works; or, within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents of the +NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative +Works that You distribute, alongside or as an addendum to the NOTICE +text from the Work, provided that such additional attribution notices +cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may +provide additional or different license terms and conditions for use, +reproduction, or distribution of Your modifications, or for any such +Derivative Works as a whole, provided Your use, reproduction, and +distribution of the Work otherwise complies with the conditions stated +in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work by +You to the Licensor shall be under the terms and conditions of this +License, without any additional terms or conditions. Notwithstanding the +above, nothing herein shall supersede or modify the terms of any +separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed +to in writing, Licensor provides the Work (and each Contributor provides +its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +OF ANY KIND, either express or implied, including, without limitation, +any warranties or conditions of TITLE, NON-INFRINGEMENT, +MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely +responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your +exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, unless +required by applicable law (such as deliberate and grossly negligent +acts) or agreed to in writing, shall any Contributor be liable to You +for damages, including any direct, indirect, special, incidental, or +consequential damages of any character arising as a result of this +License or out of the use or inability to use the Work (including but +not limited to damages for loss of goodwill, work stoppage, computer +failure or malfunction, or any and all other commercial damages or +losses), even if such Contributor has been advised of the possibility of +such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the +Work or Derivative Works thereof, You may choose to offer, and charge a +fee for, acceptance of support, warranty, indemnity, or other liability +obligations and/or rights consistent with this License. However, in +accepting such obligations, You may act only on Your own behalf and on +Your sole responsibility, not on behalf of any other Contributor, and +only if You agree to indemnify, defend, and hold each Contributor +harmless for any liability incurred by, or claims asserted against, such +Contributor by reason of your accepting any such warranty or additional +liability. diff --git a/node_modules/validate-npm-package-license/README.md b/node_modules/validate-npm-package-license/README.md new file mode 100644 index 0000000..c5b3bfc --- /dev/null +++ b/node_modules/validate-npm-package-license/README.md @@ -0,0 +1,113 @@ +validate-npm-package-license +============================ + +Give me a string and I'll tell you if it's a valid npm package license string. + +```javascript +var valid = require('validate-npm-package-license'); +``` + +SPDX license identifiers are valid license strings: + +```javascript + +var assert = require('assert'); +var validSPDXExpression = { + validForNewPackages: true, + validForOldPackages: true, + spdx: true +}; + +assert.deepEqual(valid('MIT'), validSPDXExpression); +assert.deepEqual(valid('BSD-2-Clause'), validSPDXExpression); +assert.deepEqual(valid('Apache-2.0'), validSPDXExpression); +assert.deepEqual(valid('ISC'), validSPDXExpression); +``` +The function will return a warning and suggestion for nearly-correct license identifiers: + +```javascript +assert.deepEqual( + valid('Apache 2.0'), + { + validForOldPackages: false, + validForNewPackages: false, + warnings: [ + 'license should be ' + + 'a valid SPDX license expression (without "LicenseRef"), ' + + '"UNLICENSED", or ' + + '"SEE LICENSE IN "', + 'license is similar to the valid expression "Apache-2.0"' + ] + } +); +``` + +SPDX expressions are valid, too ... + +```javascript +// Simple SPDX license expression for dual licensing +assert.deepEqual( + valid('(GPL-3.0 OR BSD-2-Clause)'), + validSPDXExpression +); +``` + +... except if they contain `LicenseRef`: + +```javascript +var warningAboutLicenseRef = { + validForOldPackages: false, + validForNewPackages: false, + spdx: true, + warnings: [ + 'license should be ' + + 'a valid SPDX license expression (without "LicenseRef"), ' + + '"UNLICENSED", or ' + + '"SEE LICENSE IN "', + ] +}; + +assert.deepEqual( + valid('LicenseRef-Made-Up'), + warningAboutLicenseRef +); + +assert.deepEqual( + valid('(MIT OR LicenseRef-Made-Up)'), + warningAboutLicenseRef +); +``` + +If you can't describe your licensing terms with standardized SPDX identifiers, put the terms in a file in the package and point users there: + +```javascript +assert.deepEqual( + valid('SEE LICENSE IN LICENSE.txt'), + { + validForNewPackages: true, + validForOldPackages: true, + inFile: 'LICENSE.txt' + } +); + +assert.deepEqual( + valid('SEE LICENSE IN license.md'), + { + validForNewPackages: true, + validForOldPackages: true, + inFile: 'license.md' + } +); +``` + +If there aren't any licensing terms, use `UNLICENSED`: + +```javascript +var unlicensed = { + validForNewPackages: true, + validForOldPackages: true, + unlicensed: true +}; +assert.deepEqual(valid('UNLICENSED'), unlicensed); +assert.deepEqual(valid('UNLICENCED'), unlicensed); +``` diff --git a/node_modules/validate-npm-package-license/index.js b/node_modules/validate-npm-package-license/index.js new file mode 100644 index 0000000..2ad98d9 --- /dev/null +++ b/node_modules/validate-npm-package-license/index.js @@ -0,0 +1,84 @@ +var parse = require('spdx-expression-parse'); +var correct = require('spdx-correct'); + +var genericWarning = ( + 'license should be ' + + 'a valid SPDX license expression (without "LicenseRef"), ' + + '"UNLICENSED", or ' + + '"SEE LICENSE IN "' +); + +var fileReferenceRE = /^SEE LICEN[CS]E IN (.+)$/; + +function startsWith(prefix, string) { + return string.slice(0, prefix.length) === prefix; +} + +function usesLicenseRef(ast) { + if (ast.hasOwnProperty('license')) { + var license = ast.license; + return ( + startsWith('LicenseRef', license) || + startsWith('DocumentRef', license) + ); + } else { + return ( + usesLicenseRef(ast.left) || + usesLicenseRef(ast.right) + ); + } +} + +module.exports = function(argument) { + var ast; + + try { + ast = parse(argument); + } catch (e) { + var match + if ( + argument === 'UNLICENSED' || + argument === 'UNLICENCED' + ) { + return { + validForOldPackages: true, + validForNewPackages: true, + unlicensed: true + }; + } else if (match = fileReferenceRE.exec(argument)) { + return { + validForOldPackages: true, + validForNewPackages: true, + inFile: match[1] + }; + } else { + var result = { + validForOldPackages: false, + validForNewPackages: false, + warnings: [genericWarning] + }; + var corrected = correct(argument); + if (corrected) { + result.warnings.push( + 'license is similar to the valid expression "' + corrected + '"' + ); + } + return result; + } + } + + if (usesLicenseRef(ast)) { + return { + validForNewPackages: false, + validForOldPackages: false, + spdx: true, + warnings: [genericWarning] + }; + } else { + return { + validForNewPackages: true, + validForOldPackages: true, + spdx: true + }; + } +}; diff --git a/node_modules/validate-npm-package-license/package.json b/node_modules/validate-npm-package-license/package.json new file mode 100644 index 0000000..9abdec3 --- /dev/null +++ b/node_modules/validate-npm-package-license/package.json @@ -0,0 +1,96 @@ +{ + "_args": [ + [ + { + "raw": "validate-npm-package-license@^3.0.1", + "scope": null, + "escapedName": "validate-npm-package-license", + "name": "validate-npm-package-license", + "rawSpec": "^3.0.1", + "spec": ">=3.0.1 <4.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/normalize-package-data" + ] + ], + "_from": "validate-npm-package-license@>=3.0.1 <4.0.0", + "_id": "validate-npm-package-license@3.0.1", + "_inCache": true, + "_location": "/validate-npm-package-license", + "_nodeVersion": "0.12.7", + "_npmUser": { + "name": "kemitchell", + "email": "kyle@kemitchell.com" + }, + "_npmVersion": "2.13.5", + "_phantomChildren": {}, + "_requested": { + "raw": "validate-npm-package-license@^3.0.1", + "scope": null, + "escapedName": "validate-npm-package-license", + "name": "validate-npm-package-license", + "rawSpec": "^3.0.1", + "spec": ">=3.0.1 <4.0.0", + "type": "range" + }, + "_requiredBy": [ + "/normalize-package-data" + ], + "_resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "_shasum": "2804babe712ad3379459acfbe24746ab2c303fbc", + "_shrinkwrap": null, + "_spec": "validate-npm-package-license@^3.0.1", + "_where": "/home/burchettm/statsbot/node_modules/normalize-package-data", + "author": { + "name": "Kyle E. Mitchell", + "email": "kyle@kemitchell.com", + "url": "https://kemitchell.com" + }, + "bugs": { + "url": "https://github.com/kemitchell/validate-npm-package-license.js/issues" + }, + "dependencies": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + }, + "description": "Give me a string and I'll tell you if it's a valid npm package license string", + "devDependencies": { + "defence-cli": "^1.0.1", + "replace-require-self": "^1.0.0" + }, + "directories": {}, + "dist": { + "shasum": "2804babe712ad3379459acfbe24746ab2c303fbc", + "tarball": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" + }, + "gitHead": "00200d28f9960985f221bc1a8a71e4760daf39bf", + "homepage": "https://github.com/kemitchell/validate-npm-package-license.js#readme", + "keywords": [ + "license", + "npm", + "package", + "validation" + ], + "license": "Apache-2.0", + "maintainers": [ + { + "name": "kemitchell", + "email": "kyle@kemitchell.com" + }, + { + "name": "othiym23", + "email": "ogd@aoaioxxysz.net" + } + ], + "name": "validate-npm-package-license", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/kemitchell/validate-npm-package-license.js.git" + }, + "scripts": { + "test": "defence README.md | replace-require-self | node" + }, + "version": "3.0.1" +} diff --git a/node_modules/ws/Makefile b/node_modules/ws/Makefile new file mode 100644 index 0000000..7adc0fa --- /dev/null +++ b/node_modules/ws/Makefile @@ -0,0 +1,45 @@ +ALL_TESTS = $(shell find test/ -name '*.test.js') +ALL_INTEGRATION = $(shell find test/ -name '*.integration.js') + +run-tests: + @./node_modules/.bin/mocha \ + -t 5000 \ + -s 2400 \ + $(TESTFLAGS) \ + $(TESTS) + +run-integrationtests: + @./node_modules/.bin/mocha \ + -t 5000 \ + -s 6000 \ + $(TESTFLAGS) \ + $(TESTS) + +run-coverage: + @./node_modules/.bin/istanbul cover --report html \ + ./node_modules/.bin/_mocha -- \ + -t 5000 \ + -s 6000 \ + $(TESTFLAGS) \ + $(TESTS) + +test: + @$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 TESTS="$(ALL_TESTS)" run-tests + +integrationtest: + @$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 TESTS="$(ALL_INTEGRATION)" run-integrationtests + +coverage: + @$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 TESTS="$(ALL_TESTS)" run-coverage + +benchmark: + @node bench/sender.benchmark.js + @node bench/parser.benchmark.js + +autobahn: + @node test/autobahn.js + +autobahn-server: + @node test/autobahn-server.js + +.PHONY: test coverage diff --git a/node_modules/ws/README.md b/node_modules/ws/README.md new file mode 100644 index 0000000..93106d7 --- /dev/null +++ b/node_modules/ws/README.md @@ -0,0 +1,235 @@ +# ws: a node.js websocket library + +[![Build Status](https://travis-ci.org/websockets/ws.svg?branch=master)](https://travis-ci.org/websockets/ws) + +`ws` is a simple to use WebSocket implementation, up-to-date against RFC-6455, +and [probably the fastest WebSocket library for node.js][archive]. + +Passes the quite extensive Autobahn test suite. See http://websockets.github.com/ws +for the full reports. + +## Protocol support + +* **Hixie draft 76** (Old and deprecated, but still in use by Safari and Opera. + Added to ws version 0.4.2, but server only. Can be disabled by setting the + `disableHixie` option to true.) +* **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) +* **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`) + +### Installing + +``` +npm install --save ws +``` + +### Opt-in for performance + +There are 2 optional modules that can be installed along side with the `ws` +module. These modules are binary addons which improve certain operations, but as +they are binary addons they require compilation which can fail if no c++ +compiler is installed on the host system. + +- `npm install --save bufferutil`: Improves internal buffer operations which + allows for faster processing of masked WebSocket frames and general buffer + operations. +- `npm install --save utf-8-validate`: The specification requires validation of + invalid UTF-8 chars, some of these validations could not be done in JavaScript + hence the need for a binary addon. In most cases you will already be + validating the input that you receive for security purposes leading to double + validation. But if you want to be 100% spec-conforming and have fast + validation of UTF-8 then this module is a must. + +### Sending and receiving text data + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://www.host.com/path'); + +ws.on('open', function open() { + ws.send('something'); +}); + +ws.on('message', function(data, flags) { + // flags.binary will be set if a binary data is received. + // flags.masked will be set if the data was masked. +}); +``` + +### Sending binary data + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://www.host.com/path'); + +ws.on('open', function open() { + var array = new Float32Array(5); + + for (var i = 0; i < array.length; ++i) { + array[i] = i / 2; + } + + ws.send(array, { binary: true, mask: true }); +}); +``` + +Setting `mask`, as done for the send options above, will cause the data to be +masked according to the WebSocket protocol. The same option applies for text +data. + +### Server example + +```js +var WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('message', function incoming(message) { + console.log('received: %s', message); + }); + + ws.send('something'); +}); +``` + +### ExpressJS example + +```js +var server = require('http').createServer() + , url = require('url') + , WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ server: server }) + , express = require('express') + , app = express() + , port = 4080; + +app.use(function (req, res) { + res.send({ msg: "hello" }); +}); + +wss.on('connection', function connection(ws) { + var location = url.parse(ws.upgradeReq.url, true); + // you might use location.query.access_token to authenticate or share sessions + // or ws.upgradeReq.headers.cookie (see http://stackoverflow.com/a/16395220/151312) + + ws.on('message', function incoming(message) { + console.log('received: %s', message); + }); + + ws.send('something'); +}); + +server.on('request', app); +server.listen(port, function () { console.log('Listening on ' + server.address().port) }); +``` + +### Server sending broadcast data + +```js +var WebSocketServer = require('ws').Server + , wss = new WebSocketServer({ port: 8080 }); + +wss.broadcast = function broadcast(data) { + wss.clients.forEach(function each(client) { + client.send(data); + }); +}; +``` + +### Error handling best practices + +```js +// If the WebSocket is closed before the following send is attempted +ws.send('something'); + +// Errors (both immediate and async write errors) can be detected in an optional +// callback. The callback is also the only way of being notified that data has +// actually been sent. +ws.send('something', function ack(error) { + // if error is not defined, the send has been completed, + // otherwise the error object will indicate what failed. +}); + +// Immediate errors can also be handled with try/catch-blocks, but **note** that +// since sends are inherently asynchronous, socket write failures will *not* be +// captured when this technique is used. +try { ws.send('something'); } +catch (e) { /* handle error */ } +``` + +### echo.websocket.org demo + +```js +var WebSocket = require('ws'); +var ws = new WebSocket('ws://echo.websocket.org/', { + protocolVersion: 8, + origin: 'http://websocket.org' +}); + +ws.on('open', function open() { + console.log('connected'); + ws.send(Date.now().toString(), {mask: true}); +}); + +ws.on('close', function close() { + console.log('disconnected'); +}); + +ws.on('message', function message(data, flags) { + console.log('Roundtrip time: ' + (Date.now() - parseInt(data)) + 'ms', flags); + + setTimeout(function timeout() { + ws.send(Date.now().toString(), {mask: true}); + }, 500); +}); +``` + +### Other examples + +For a full example with a browser client communicating with a ws server, see the +examples folder. + +Note that the usage together with Express 3.0 is quite different from Express +2.x. The difference is expressed in the two different serverstats-examples. + +Otherwise, see the test cases. + +### Running the tests + +``` +make test +``` + +## API Docs + +See [`/doc/ws.md`](https://github.com/websockets/ws/blob/master/doc/ws.md) for Node.js-like docs for the ws classes. + +## Changelog + +We're using the GitHub [`releases`](https://github.com/websockets/ws/releases) for changelog entries. + +## License + +(The MIT License) + +Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +[archive]: http://web.archive.org/web/20130314230536/http://hobbycoding.posterous.com/the-fastest-websocket-module-for-nodejs diff --git a/node_modules/ws/SECURITY.md b/node_modules/ws/SECURITY.md new file mode 100644 index 0000000..fd8e07b --- /dev/null +++ b/node_modules/ws/SECURITY.md @@ -0,0 +1,33 @@ +# Security Guidelines + +Please contact us directly at **security@3rd-Eden.com** for any bug that might +impact the security of this project. Please prefix the subject of your email +with `[security]` in lowercase and square brackets. Our email filters will +automatically prevent these messages from being moved to our spam box. + +You will receive an acknowledgement of your report within **24 hours**. + +All emails that do not include security vulnerabilities will be removed and +blocked instantly. + +## Exceptions + +If you do not receive an acknowledgement within the said time frame please give +us the benefit of the doubt as it's possible that we haven't seen it yet. In +this case please send us a message **without details** using one of the +following methods: + +- Contact the lead developers of this project on their personal e-mails. You + can find the e-mails in the git logs, for example using the following command: + `git --no-pager show -s --format='%an <%ae>' ` where `` is the + SHA1 of their latest commit in the project. +- Create a GitHub issue stating contact details and the severity of the issue. + +Once we have acknowledged receipt of your report and confirmed the bug +ourselves we will work with you to fix the vulnerability and publicly acknowledge +your responsible disclosure, if you wish. In addition to that we will report +all vulnerabilities to the [Node Security Project](https://nodesecurity.io/). + +## History + +04 Jan 2016: [Buffer vulnerablity](https://github.com/websockets/ws/releases/tag/1.0.1) diff --git a/node_modules/ws/index.js b/node_modules/ws/index.js new file mode 100644 index 0000000..a7e8644 --- /dev/null +++ b/node_modules/ws/index.js @@ -0,0 +1,49 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var WS = module.exports = require('./lib/WebSocket'); + +WS.Server = require('./lib/WebSocketServer'); +WS.Sender = require('./lib/Sender'); +WS.Receiver = require('./lib/Receiver'); + +/** + * Create a new WebSocket server. + * + * @param {Object} options Server options + * @param {Function} fn Optional connection listener. + * @returns {WS.Server} + * @api public + */ +WS.createServer = function createServer(options, fn) { + var server = new WS.Server(options); + + if (typeof fn === 'function') { + server.on('connection', fn); + } + + return server; +}; + +/** + * Create a new WebSocket connection. + * + * @param {String} address The URL/address we need to connect to. + * @param {Function} fn Open listener. + * @returns {WS} + * @api public + */ +WS.connect = WS.createConnection = function connect(address, fn) { + var client = new WS(address); + + if (typeof fn === 'function') { + client.on('open', fn); + } + + return client; +}; diff --git a/node_modules/ws/lib/BufferPool.js b/node_modules/ws/lib/BufferPool.js new file mode 100644 index 0000000..8ee5990 --- /dev/null +++ b/node_modules/ws/lib/BufferPool.js @@ -0,0 +1,63 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util'); + +function BufferPool(initialSize, growStrategy, shrinkStrategy) { + if (this instanceof BufferPool === false) { + throw new TypeError("Classes can't be function-called"); + } + + if (typeof initialSize === 'function') { + shrinkStrategy = growStrategy; + growStrategy = initialSize; + initialSize = 0; + } + else if (typeof initialSize === 'undefined') { + initialSize = 0; + } + this._growStrategy = (growStrategy || function(db, size) { + return db.used + size; + }).bind(null, this); + this._shrinkStrategy = (shrinkStrategy || function(db) { + return initialSize; + }).bind(null, this); + this._buffer = initialSize ? new Buffer(initialSize) : null; + this._offset = 0; + this._used = 0; + this._changeFactor = 0; + this.__defineGetter__('size', function(){ + return this._buffer == null ? 0 : this._buffer.length; + }); + this.__defineGetter__('used', function(){ + return this._used; + }); +} + +BufferPool.prototype.get = function(length) { + if (this._buffer == null || this._offset + length > this._buffer.length) { + var newBuf = new Buffer(this._growStrategy(length)); + this._buffer = newBuf; + this._offset = 0; + } + this._used += length; + var buf = this._buffer.slice(this._offset, this._offset + length); + this._offset += length; + return buf; +} + +BufferPool.prototype.reset = function(forceNewBuffer) { + var len = this._shrinkStrategy(); + if (len < this.size) this._changeFactor -= 1; + if (forceNewBuffer || this._changeFactor < -2) { + this._changeFactor = 0; + this._buffer = len ? new Buffer(len) : null; + } + this._offset = 0; + this._used = 0; +} + +module.exports = BufferPool; diff --git a/node_modules/ws/lib/BufferUtil.fallback.js b/node_modules/ws/lib/BufferUtil.fallback.js new file mode 100644 index 0000000..7abd0d8 --- /dev/null +++ b/node_modules/ws/lib/BufferUtil.fallback.js @@ -0,0 +1,47 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +exports.BufferUtil = { + merge: function(mergedBuffer, buffers) { + var offset = 0; + for (var i = 0, l = buffers.length; i < l; ++i) { + var buf = buffers[i]; + buf.copy(mergedBuffer, offset); + offset += buf.length; + } + }, + mask: function(source, mask, output, offset, length) { + var maskNum = mask.readUInt32LE(0, true); + var i = 0; + for (; i < length - 3; i += 4) { + var num = maskNum ^ source.readUInt32LE(i, true); + if (num < 0) num = 4294967296 + num; + output.writeUInt32LE(num, offset + i, true); + } + switch (length % 4) { + case 3: output[offset + i + 2] = source[i + 2] ^ mask[2]; + case 2: output[offset + i + 1] = source[i + 1] ^ mask[1]; + case 1: output[offset + i] = source[i] ^ mask[0]; + case 0:; + } + }, + unmask: function(data, mask) { + var maskNum = mask.readUInt32LE(0, true); + var length = data.length; + var i = 0; + for (; i < length - 3; i += 4) { + var num = maskNum ^ data.readUInt32LE(i, true); + if (num < 0) num = 4294967296 + num; + data.writeUInt32LE(num, i, true); + } + switch (length % 4) { + case 3: data[i + 2] = data[i + 2] ^ mask[2]; + case 2: data[i + 1] = data[i + 1] ^ mask[1]; + case 1: data[i] = data[i] ^ mask[0]; + case 0:; + } + } +} diff --git a/node_modules/ws/lib/BufferUtil.js b/node_modules/ws/lib/BufferUtil.js new file mode 100644 index 0000000..794684f --- /dev/null +++ b/node_modules/ws/lib/BufferUtil.js @@ -0,0 +1,17 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var bufferUtil; + +try { + bufferUtil = require('bufferutil'); +} catch (e) { + bufferUtil = require('./BufferUtil.fallback'); +} + +module.exports = bufferUtil.BufferUtil || bufferUtil; diff --git a/node_modules/ws/lib/ErrorCodes.js b/node_modules/ws/lib/ErrorCodes.js new file mode 100644 index 0000000..55ebd52 --- /dev/null +++ b/node_modules/ws/lib/ErrorCodes.js @@ -0,0 +1,24 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +module.exports = { + isValidErrorCode: function(code) { + return (code >= 1000 && code <= 1011 && code != 1004 && code != 1005 && code != 1006) || + (code >= 3000 && code <= 4999); + }, + 1000: 'normal', + 1001: 'going away', + 1002: 'protocol error', + 1003: 'unsupported data', + 1004: 'reserved', + 1005: 'reserved for extensions', + 1006: 'reserved for extensions', + 1007: 'inconsistent or invalid data', + 1008: 'policy violation', + 1009: 'message too big', + 1010: 'extension handshake missing', + 1011: 'an unexpected condition prevented the request from being fulfilled', +}; \ No newline at end of file diff --git a/node_modules/ws/lib/Extensions.js b/node_modules/ws/lib/Extensions.js new file mode 100644 index 0000000..a465ace --- /dev/null +++ b/node_modules/ws/lib/Extensions.js @@ -0,0 +1,70 @@ + +var util = require('util'); + +/** + * Module exports. + */ + +exports.parse = parse; +exports.format = format; + +/** + * Parse extensions header value + */ + +function parse(value) { + value = value || ''; + + var extensions = {}; + + value.split(',').forEach(function(v) { + var params = v.split(';'); + var token = params.shift().trim(); + var paramsList = extensions[token] = extensions[token] || []; + var parsedParams = {}; + + params.forEach(function(param) { + var parts = param.trim().split('='); + var key = parts[0]; + var value = parts[1]; + if (typeof value === 'undefined') { + value = true; + } else { + // unquote value + if (value[0] === '"') { + value = value.slice(1); + } + if (value[value.length - 1] === '"') { + value = value.slice(0, value.length - 1); + } + } + (parsedParams[key] = parsedParams[key] || []).push(value); + }); + + paramsList.push(parsedParams); + }); + + return extensions; +} + +/** + * Format extensions header value + */ + +function format(value) { + return Object.keys(value).map(function(token) { + var paramsList = value[token]; + if (!util.isArray(paramsList)) { + paramsList = [paramsList]; + } + return paramsList.map(function(params) { + return [token].concat(Object.keys(params).map(function(k) { + var p = params[k]; + if (!util.isArray(p)) p = [p]; + return p.map(function(v) { + return v === true ? k : k + '=' + v; + }).join('; '); + })).join('; '); + }).join(', '); + }).join(', '); +} diff --git a/node_modules/ws/lib/PerMessageDeflate.js b/node_modules/ws/lib/PerMessageDeflate.js new file mode 100644 index 0000000..00a6ea6 --- /dev/null +++ b/node_modules/ws/lib/PerMessageDeflate.js @@ -0,0 +1,337 @@ + +var zlib = require('zlib'); + +var AVAILABLE_WINDOW_BITS = [8, 9, 10, 11, 12, 13, 14, 15]; +var DEFAULT_WINDOW_BITS = 15; +var DEFAULT_MEM_LEVEL = 8; + +PerMessageDeflate.extensionName = 'permessage-deflate'; + +/** + * Per-message Compression Extensions implementation + */ + +function PerMessageDeflate(options, isServer,maxPayload) { + if (this instanceof PerMessageDeflate === false) { + throw new TypeError("Classes can't be function-called"); + } + + this._options = options || {}; + this._isServer = !!isServer; + this._inflate = null; + this._deflate = null; + this.params = null; + this._maxPayload = maxPayload || 0; +} + +/** + * Create extension parameters offer + * + * @api public + */ + +PerMessageDeflate.prototype.offer = function() { + var params = {}; + if (this._options.serverNoContextTakeover) { + params.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + params.client_no_context_takeover = true; + } + if (this._options.serverMaxWindowBits) { + params.server_max_window_bits = this._options.serverMaxWindowBits; + } + if (this._options.clientMaxWindowBits) { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits == null) { + params.client_max_window_bits = true; + } + return params; +}; + +/** + * Accept extension offer + * + * @api public + */ + +PerMessageDeflate.prototype.accept = function(paramsList) { + paramsList = this.normalizeParams(paramsList); + + var params; + if (this._isServer) { + params = this.acceptAsServer(paramsList); + } else { + params = this.acceptAsClient(paramsList); + } + + this.params = params; + return params; +}; + +/** + * Releases all resources used by the extension + * + * @api public + */ + +PerMessageDeflate.prototype.cleanup = function() { + if (this._inflate) { + if (this._inflate.writeInProgress) { + this._inflate.pendingClose = true; + } else { + if (this._inflate.close) this._inflate.close(); + this._inflate = null; + } + } + if (this._deflate) { + if (this._deflate.writeInProgress) { + this._deflate.pendingClose = true; + } else { + if (this._deflate.close) this._deflate.close(); + this._deflate = null; + } + } +}; + +/** + * Accept extension offer from client + * + * @api private + */ + +PerMessageDeflate.prototype.acceptAsServer = function(paramsList) { + var accepted = {}; + var result = paramsList.some(function(params) { + accepted = {}; + if (this._options.serverNoContextTakeover === false && params.server_no_context_takeover) { + return; + } + if (this._options.serverMaxWindowBits === false && params.server_max_window_bits) { + return; + } + if (typeof this._options.serverMaxWindowBits === 'number' && + typeof params.server_max_window_bits === 'number' && + this._options.serverMaxWindowBits > params.server_max_window_bits) { + return; + } + if (typeof this._options.clientMaxWindowBits === 'number' && !params.client_max_window_bits) { + return; + } + + if (this._options.serverNoContextTakeover || params.server_no_context_takeover) { + accepted.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + accepted.client_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover !== false && params.client_no_context_takeover) { + accepted.client_no_context_takeover = true; + } + if (typeof this._options.serverMaxWindowBits === 'number') { + accepted.server_max_window_bits = this._options.serverMaxWindowBits; + } else if (typeof params.server_max_window_bits === 'number') { + accepted.server_max_window_bits = params.server_max_window_bits; + } + if (typeof this._options.clientMaxWindowBits === 'number') { + accepted.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits !== false && typeof params.client_max_window_bits === 'number') { + accepted.client_max_window_bits = params.client_max_window_bits; + } + return true; + }, this); + + if (!result) { + throw new Error('Doesn\'t support the offered configuration'); + } + + return accepted; +}; + +/** + * Accept extension response from server + * + * @api privaye + */ + +PerMessageDeflate.prototype.acceptAsClient = function(paramsList) { + var params = paramsList[0]; + if (this._options.clientNoContextTakeover != null) { + if (this._options.clientNoContextTakeover === false && params.client_no_context_takeover) { + throw new Error('Invalid value for "client_no_context_takeover"'); + } + } + if (this._options.clientMaxWindowBits != null) { + if (this._options.clientMaxWindowBits === false && params.client_max_window_bits) { + throw new Error('Invalid value for "client_max_window_bits"'); + } + if (typeof this._options.clientMaxWindowBits === 'number' && + (!params.client_max_window_bits || params.client_max_window_bits > this._options.clientMaxWindowBits)) { + throw new Error('Invalid value for "client_max_window_bits"'); + } + } + return params; +}; + +/** + * Normalize extensions parameters + * + * @api private + */ + +PerMessageDeflate.prototype.normalizeParams = function(paramsList) { + return paramsList.map(function(params) { + Object.keys(params).forEach(function(key) { + var value = params[key]; + if (value.length > 1) { + throw new Error('Multiple extension parameters for ' + key); + } + + value = value[0]; + + switch (key) { + case 'server_no_context_takeover': + case 'client_no_context_takeover': + if (value !== true) { + throw new Error('invalid extension parameter value for ' + key + ' (' + value + ')'); + } + params[key] = true; + break; + case 'server_max_window_bits': + case 'client_max_window_bits': + if (typeof value === 'string') { + value = parseInt(value, 10); + if (!~AVAILABLE_WINDOW_BITS.indexOf(value)) { + throw new Error('invalid extension parameter value for ' + key + ' (' + value + ')'); + } + } + if (!this._isServer && value === true) { + throw new Error('Missing extension parameter value for ' + key); + } + params[key] = value; + break; + default: + throw new Error('Not defined extension parameter (' + key + ')'); + } + }, this); + return params; + }, this); +}; + +/** + * Decompress message + * + * @api public + */ + +PerMessageDeflate.prototype.decompress = function (data, fin, callback) { + var endpoint = this._isServer ? 'client' : 'server'; + + if (!this._inflate) { + var maxWindowBits = this.params[endpoint + '_max_window_bits']; + this._inflate = zlib.createInflateRaw({ + windowBits: 'number' === typeof maxWindowBits ? maxWindowBits : DEFAULT_WINDOW_BITS + }); + } + this._inflate.writeInProgress = true; + + var self = this; + var buffers = []; + var cumulativeBufferLength=0; + + this._inflate.on('error', onError).on('data', onData); + this._inflate.write(data); + if (fin) { + this._inflate.write(new Buffer([0x00, 0x00, 0xff, 0xff])); + } + this._inflate.flush(function() { + cleanup(); + callback(null, Buffer.concat(buffers)); + }); + + function onError(err) { + cleanup(); + callback(err); + } + + function onData(data) { + if(self._maxPayload!==undefined && self._maxPayload!==null && self._maxPayload>0){ + cumulativeBufferLength+=data.length; + if(cumulativeBufferLength>self._maxPayload){ + buffers=[]; + cleanup(); + var err={type:1009}; + callback(err); + return; + } + } + buffers.push(data); + } + + function cleanup() { + if (!self._inflate) return; + self._inflate.removeListener('error', onError); + self._inflate.removeListener('data', onData); + self._inflate.writeInProgress = false; + if ((fin && self.params[endpoint + '_no_context_takeover']) || self._inflate.pendingClose) { + if (self._inflate.close) self._inflate.close(); + self._inflate = null; + } + } +}; + +/** + * Compress message + * + * @api public + */ + +PerMessageDeflate.prototype.compress = function (data, fin, callback) { + var endpoint = this._isServer ? 'server' : 'client'; + + if (!this._deflate) { + var maxWindowBits = this.params[endpoint + '_max_window_bits']; + this._deflate = zlib.createDeflateRaw({ + flush: zlib.Z_SYNC_FLUSH, + windowBits: 'number' === typeof maxWindowBits ? maxWindowBits : DEFAULT_WINDOW_BITS, + memLevel: this._options.memLevel || DEFAULT_MEM_LEVEL + }); + } + this._deflate.writeInProgress = true; + + var self = this; + var buffers = []; + + this._deflate.on('error', onError).on('data', onData); + this._deflate.write(data); + this._deflate.flush(function() { + cleanup(); + var data = Buffer.concat(buffers); + if (fin) { + data = data.slice(0, data.length - 4); + } + callback(null, data); + }); + + function onError(err) { + cleanup(); + callback(err); + } + + function onData(data) { + buffers.push(data); + } + + function cleanup() { + if (!self._deflate) return; + self._deflate.removeListener('error', onError); + self._deflate.removeListener('data', onData); + self._deflate.writeInProgress = false; + if ((fin && self.params[endpoint + '_no_context_takeover']) || self._deflate.pendingClose) { + if (self._deflate.close) self._deflate.close(); + self._deflate = null; + } + } +}; + +module.exports = PerMessageDeflate; diff --git a/node_modules/ws/lib/Receiver.hixie.js b/node_modules/ws/lib/Receiver.hixie.js new file mode 100644 index 0000000..598ccbd --- /dev/null +++ b/node_modules/ws/lib/Receiver.hixie.js @@ -0,0 +1,194 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util'); + +/** + * State constants + */ + +var EMPTY = 0 + , BODY = 1; +var BINARYLENGTH = 2 + , BINARYBODY = 3; + +/** + * Hixie Receiver implementation + */ + +function Receiver () { + if (this instanceof Receiver === false) { + throw new TypeError("Classes can't be function-called"); + } + + this.state = EMPTY; + this.buffers = []; + this.messageEnd = -1; + this.spanLength = 0; + this.dead = false; + + this.onerror = function() {}; + this.ontext = function() {}; + this.onbinary = function() {}; + this.onclose = function() {}; + this.onping = function() {}; + this.onpong = function() {}; +} + +module.exports = Receiver; + +/** + * Add new data to the parser. + * + * @api public + */ + +Receiver.prototype.add = function(data) { + if (this.dead) return; + var self = this; + function doAdd() { + if (self.state === EMPTY) { + if (data.length == 2 && data[0] == 0xFF && data[1] == 0x00) { + self.reset(); + self.onclose(); + return; + } + if (data[0] === 0x80) { + self.messageEnd = 0; + self.state = BINARYLENGTH; + data = data.slice(1); + } else { + + if (data[0] !== 0x00) { + self.error('payload must start with 0x00 byte', true); + return; + } + data = data.slice(1); + self.state = BODY; + + } + } + if (self.state === BINARYLENGTH) { + var i = 0; + while ((i < data.length) && (data[i] & 0x80)) { + self.messageEnd = 128 * self.messageEnd + (data[i] & 0x7f); + ++i; + } + if (i < data.length) { + self.messageEnd = 128 * self.messageEnd + (data[i] & 0x7f); + self.state = BINARYBODY; + ++i; + } + if (i > 0) + data = data.slice(i); + } + if (self.state === BINARYBODY) { + var dataleft = self.messageEnd - self.spanLength; + if (data.length >= dataleft) { + // consume the whole buffer to finish the frame + self.buffers.push(data); + self.spanLength += dataleft; + self.messageEnd = dataleft; + return self.parse(); + } + // frame's not done even if we consume it all + self.buffers.push(data); + self.spanLength += data.length; + return; + } + self.buffers.push(data); + if ((self.messageEnd = bufferIndex(data, 0xFF)) != -1) { + self.spanLength += self.messageEnd; + return self.parse(); + } + else self.spanLength += data.length; + } + while(data) data = doAdd(); +}; + +/** + * Releases all resources used by the receiver. + * + * @api public + */ + +Receiver.prototype.cleanup = function() { + this.dead = true; + this.state = EMPTY; + this.buffers = []; +}; + +/** + * Process buffered data. + * + * @api public + */ + +Receiver.prototype.parse = function() { + var output = new Buffer(this.spanLength); + var outputIndex = 0; + for (var bi = 0, bl = this.buffers.length; bi < bl - 1; ++bi) { + var buffer = this.buffers[bi]; + buffer.copy(output, outputIndex); + outputIndex += buffer.length; + } + var lastBuffer = this.buffers[this.buffers.length - 1]; + if (this.messageEnd > 0) lastBuffer.copy(output, outputIndex, 0, this.messageEnd); + if (this.state !== BODY) --this.messageEnd; + var tail = null; + if (this.messageEnd < lastBuffer.length - 1) { + tail = lastBuffer.slice(this.messageEnd + 1); + } + this.reset(); + this.ontext(output.toString('utf8')); + return tail; +}; + +/** + * Handles an error + * + * @api private + */ + +Receiver.prototype.error = function (reason, terminate) { + if (this.dead) return; + this.reset(); + if(typeof reason == 'string'){ + this.onerror(new Error(reason), terminate); + } + else if(reason.constructor == Error){ + this.onerror(reason, terminate); + } + else{ + this.onerror(new Error("An error occured"),terminate); + } + return this; +}; + +/** + * Reset parser state + * + * @api private + */ + +Receiver.prototype.reset = function (reason) { + if (this.dead) return; + this.state = EMPTY; + this.buffers = []; + this.messageEnd = -1; + this.spanLength = 0; +}; + +/** + * Internal api + */ + +function bufferIndex(buffer, byte) { + for (var i = 0, l = buffer.length; i < l; ++i) { + if (buffer[i] === byte) return i; + } + return -1; +} diff --git a/node_modules/ws/lib/Receiver.js b/node_modules/ws/lib/Receiver.js new file mode 100644 index 0000000..acbe621 --- /dev/null +++ b/node_modules/ws/lib/Receiver.js @@ -0,0 +1,793 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util') + , isValidUTF8 = require('./Validation') + , ErrorCodes = require('./ErrorCodes') + , BufferPool = require('./BufferPool') + , bufferUtil = require('./BufferUtil') + , PerMessageDeflate = require('./PerMessageDeflate'); + +/** + * HyBi Receiver implementation + */ + +function Receiver (extensions,maxPayload) { + if (this instanceof Receiver === false) { + throw new TypeError("Classes can't be function-called"); + } + if(typeof extensions==='number'){ + maxPayload=extensions; + extensions={}; + } + + + // memory pool for fragmented messages + var fragmentedPoolPrevUsed = -1; + this.fragmentedBufferPool = new BufferPool(1024, function(db, length) { + return db.used + length; + }, function(db) { + return fragmentedPoolPrevUsed = fragmentedPoolPrevUsed >= 0 ? + Math.ceil((fragmentedPoolPrevUsed + db.used) / 2) : + db.used; + }); + + // memory pool for unfragmented messages + var unfragmentedPoolPrevUsed = -1; + this.unfragmentedBufferPool = new BufferPool(1024, function(db, length) { + return db.used + length; + }, function(db) { + return unfragmentedPoolPrevUsed = unfragmentedPoolPrevUsed >= 0 ? + Math.ceil((unfragmentedPoolPrevUsed + db.used) / 2) : + db.used; + }); + this.extensions = extensions || {}; + this.maxPayload = maxPayload || 0; + this.currentPayloadLength = 0; + this.state = { + activeFragmentedOperation: null, + lastFragment: false, + masked: false, + opcode: 0, + fragmentedOperation: false + }; + this.overflow = []; + this.headerBuffer = new Buffer(10); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + this.currentMessage = []; + this.currentMessageLength = 0; + this.messageHandlers = []; + this.expectHeader(2, this.processPacket); + this.dead = false; + this.processing = false; + + this.onerror = function() {}; + this.ontext = function() {}; + this.onbinary = function() {}; + this.onclose = function() {}; + this.onping = function() {}; + this.onpong = function() {}; +} + +module.exports = Receiver; + +/** + * Add new data to the parser. + * + * @api public + */ + +Receiver.prototype.add = function(data) { + if (this.dead) return; + var dataLength = data.length; + if (dataLength == 0) return; + if (this.expectBuffer == null) { + this.overflow.push(data); + return; + } + var toRead = Math.min(dataLength, this.expectBuffer.length - this.expectOffset); + fastCopy(toRead, data, this.expectBuffer, this.expectOffset); + this.expectOffset += toRead; + if (toRead < dataLength) { + this.overflow.push(data.slice(toRead)); + } + while (this.expectBuffer && this.expectOffset == this.expectBuffer.length) { + var bufferForHandler = this.expectBuffer; + this.expectBuffer = null; + this.expectOffset = 0; + this.expectHandler.call(this, bufferForHandler); + } +}; + +/** + * Releases all resources used by the receiver. + * + * @api public + */ + +Receiver.prototype.cleanup = function() { + this.dead = true; + this.overflow = null; + this.headerBuffer = null; + this.expectBuffer = null; + this.expectHandler = null; + this.unfragmentedBufferPool = null; + this.fragmentedBufferPool = null; + this.state = null; + this.currentMessage = null; + this.onerror = null; + this.ontext = null; + this.onbinary = null; + this.onclose = null; + this.onping = null; + this.onpong = null; +}; + +/** + * Waits for a certain amount of header bytes to be available, then fires a callback. + * + * @api private + */ + +Receiver.prototype.expectHeader = function(length, handler) { + if (length == 0) { + handler(null); + return; + } + this.expectBuffer = this.headerBuffer.slice(this.expectOffset, this.expectOffset + length); + this.expectHandler = handler; + var toRead = length; + while (toRead > 0 && this.overflow.length > 0) { + var fromOverflow = this.overflow.pop(); + if (toRead < fromOverflow.length) this.overflow.push(fromOverflow.slice(toRead)); + var read = Math.min(fromOverflow.length, toRead); + fastCopy(read, fromOverflow, this.expectBuffer, this.expectOffset); + this.expectOffset += read; + toRead -= read; + } +}; + +/** + * Waits for a certain amount of data bytes to be available, then fires a callback. + * + * @api private + */ + +Receiver.prototype.expectData = function(length, handler) { + if (length == 0) { + handler(null); + return; + } + this.expectBuffer = this.allocateFromPool(length, this.state.fragmentedOperation); + this.expectHandler = handler; + var toRead = length; + while (toRead > 0 && this.overflow.length > 0) { + var fromOverflow = this.overflow.pop(); + if (toRead < fromOverflow.length) this.overflow.push(fromOverflow.slice(toRead)); + var read = Math.min(fromOverflow.length, toRead); + fastCopy(read, fromOverflow, this.expectBuffer, this.expectOffset); + this.expectOffset += read; + toRead -= read; + } +}; + +/** + * Allocates memory from the buffer pool. + * + * @api private + */ + +Receiver.prototype.allocateFromPool = function(length, isFragmented) { + return (isFragmented ? this.fragmentedBufferPool : this.unfragmentedBufferPool).get(length); +}; + +/** + * Start processing a new packet. + * + * @api private + */ + +Receiver.prototype.processPacket = function (data) { + if (this.extensions[PerMessageDeflate.extensionName]) { + if ((data[0] & 0x30) != 0) { + this.error('reserved fields (2, 3) must be empty', 1002); + return; + } + } else { + if ((data[0] & 0x70) != 0) { + this.error('reserved fields must be empty', 1002); + return; + } + } + this.state.lastFragment = (data[0] & 0x80) == 0x80; + this.state.masked = (data[1] & 0x80) == 0x80; + var compressed = (data[0] & 0x40) == 0x40; + var opcode = data[0] & 0xf; + if (opcode === 0) { + if (compressed) { + this.error('continuation frame cannot have the Per-message Compressed bits', 1002); + return; + } + // continuation frame + this.state.fragmentedOperation = true; + this.state.opcode = this.state.activeFragmentedOperation; + if (!(this.state.opcode == 1 || this.state.opcode == 2)) { + this.error('continuation frame cannot follow current opcode', 1002); + return; + } + } + else { + if (opcode < 3 && this.state.activeFragmentedOperation != null) { + this.error('data frames after the initial data frame must have opcode 0', 1002); + return; + } + if (opcode >= 8 && compressed) { + this.error('control frames cannot have the Per-message Compressed bits', 1002); + return; + } + this.state.compressed = compressed; + this.state.opcode = opcode; + if (this.state.lastFragment === false) { + this.state.fragmentedOperation = true; + this.state.activeFragmentedOperation = opcode; + } + else this.state.fragmentedOperation = false; + } + var handler = opcodes[this.state.opcode]; + if (typeof handler == 'undefined') this.error('no handler for opcode ' + this.state.opcode, 1002); + else { + handler.start.call(this, data); + } +}; + +/** + * Endprocessing a packet. + * + * @api private + */ + +Receiver.prototype.endPacket = function() { + if (this.dead) return; + if (!this.state.fragmentedOperation) this.unfragmentedBufferPool.reset(true); + else if (this.state.lastFragment) this.fragmentedBufferPool.reset(true); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + if (this.state.lastFragment && this.state.opcode === this.state.activeFragmentedOperation) { + // end current fragmented operation + this.state.activeFragmentedOperation = null; + } + this.currentPayloadLength = 0; + this.state.lastFragment = false; + this.state.opcode = this.state.activeFragmentedOperation != null ? this.state.activeFragmentedOperation : 0; + this.state.masked = false; + this.expectHeader(2, this.processPacket); +}; + +/** + * Reset the parser state. + * + * @api private + */ + +Receiver.prototype.reset = function() { + if (this.dead) return; + this.state = { + activeFragmentedOperation: null, + lastFragment: false, + masked: false, + opcode: 0, + fragmentedOperation: false + }; + this.fragmentedBufferPool.reset(true); + this.unfragmentedBufferPool.reset(true); + this.expectOffset = 0; + this.expectBuffer = null; + this.expectHandler = null; + this.overflow = []; + this.currentMessage = []; + this.currentMessageLength = 0; + this.messageHandlers = []; + this.currentPayloadLength = 0; +}; + +/** + * Unmask received data. + * + * @api private + */ + +Receiver.prototype.unmask = function (mask, buf, binary) { + if (mask != null && buf != null) bufferUtil.unmask(buf, mask); + if (binary) return buf; + return buf != null ? buf.toString('utf8') : ''; +}; + +/** + * Handles an error + * + * @api private + */ + +Receiver.prototype.error = function (reason, protocolErrorCode) { + if (this.dead) return; + this.reset(); + if(typeof reason == 'string'){ + this.onerror(new Error(reason), protocolErrorCode); + } + else if(reason.constructor == Error){ + this.onerror(reason, protocolErrorCode); + } + else{ + this.onerror(new Error("An error occured"),protocolErrorCode); + } + return this; +}; + +/** + * Execute message handler buffers + * + * @api private + */ + +Receiver.prototype.flush = function() { + if (this.processing || this.dead) return; + + var handler = this.messageHandlers.shift(); + if (!handler) return; + + this.processing = true; + var self = this; + + handler(function() { + self.processing = false; + self.flush(); + }); +}; + +/** + * Apply extensions to message + * + * @api private + */ + +Receiver.prototype.applyExtensions = function(messageBuffer, fin, compressed, callback) { + var self = this; + if (compressed) { + this.extensions[PerMessageDeflate.extensionName].decompress(messageBuffer, fin, function(err, buffer) { + if (self.dead) return; + if (err) { + callback(new Error('invalid compressed data')); + return; + } + callback(null, buffer); + }); + } else { + callback(null, messageBuffer); + } +}; + +/** +* Checks payload size, disconnects socket when it exceeds maxPayload +* +* @api private +*/ +Receiver.prototype.maxPayloadExceeded = function(length) { + if (this.maxPayload=== undefined || this.maxPayload === null || this.maxPayload < 1) { + return false; + } + var fullLength = this.currentPayloadLength + length; + if (fullLength < this.maxPayload) { + this.currentPayloadLength = fullLength; + return false; + } + this.error('payload cannot exceed ' + this.maxPayload + ' bytes', 1009); + this.messageBuffer=[]; + this.cleanup(); + + return true; +}; + +/** + * Buffer utilities + */ + +function readUInt16BE(start) { + return (this[start]<<8) + + this[start+1]; +} + +function readUInt32BE(start) { + return (this[start]<<24) + + (this[start+1]<<16) + + (this[start+2]<<8) + + this[start+3]; +} + +function fastCopy(length, srcBuffer, dstBuffer, dstOffset) { + switch (length) { + default: srcBuffer.copy(dstBuffer, dstOffset, 0, length); break; + case 16: dstBuffer[dstOffset+15] = srcBuffer[15]; + case 15: dstBuffer[dstOffset+14] = srcBuffer[14]; + case 14: dstBuffer[dstOffset+13] = srcBuffer[13]; + case 13: dstBuffer[dstOffset+12] = srcBuffer[12]; + case 12: dstBuffer[dstOffset+11] = srcBuffer[11]; + case 11: dstBuffer[dstOffset+10] = srcBuffer[10]; + case 10: dstBuffer[dstOffset+9] = srcBuffer[9]; + case 9: dstBuffer[dstOffset+8] = srcBuffer[8]; + case 8: dstBuffer[dstOffset+7] = srcBuffer[7]; + case 7: dstBuffer[dstOffset+6] = srcBuffer[6]; + case 6: dstBuffer[dstOffset+5] = srcBuffer[5]; + case 5: dstBuffer[dstOffset+4] = srcBuffer[4]; + case 4: dstBuffer[dstOffset+3] = srcBuffer[3]; + case 3: dstBuffer[dstOffset+2] = srcBuffer[2]; + case 2: dstBuffer[dstOffset+1] = srcBuffer[1]; + case 1: dstBuffer[dstOffset] = srcBuffer[0]; + } +} + +function clone(obj) { + var cloned = {}; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + cloned[k] = obj[k]; + } + } + return cloned; +} + +/** + * Opcode handlers + */ + +var opcodes = { + // text + '1': { + start: function(data) { + var self = this; + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + if (self.maxPayloadExceeded(firstLength)){ + self.error('Maximumpayload exceeded in compressed text message. Aborting...', 1009); + return; + } + opcodes['1'].getData.call(self, firstLength); + } + else if (firstLength == 126) { + self.expectHeader(2, function(data) { + var length = readUInt16BE.call(data, 0); + if (self.maxPayloadExceeded(length)){ + self.error('Maximumpayload exceeded in compressed text message. Aborting...', 1009); + return; + } + opcodes['1'].getData.call(self, length); + }); + } + else if (firstLength == 127) { + self.expectHeader(8, function(data) { + if (readUInt32BE.call(data, 0) != 0) { + self.error('packets with length spanning more than 32 bit is currently not supported', 1008); + return; + } + var length = readUInt32BE.call(data, 4); + if (self.maxPayloadExceeded(length)){ + self.error('Maximumpayload exceeded in compressed text message. Aborting...', 1009); + return; + } + opcodes['1'].getData.call(self, readUInt32BE.call(data, 4)); + }); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['1'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['1'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + var packet = this.unmask(mask, data, true) || new Buffer(0); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.applyExtensions(packet, state.lastFragment, state.compressed, function(err, buffer) { + if (err) { + if(err.type===1009){ + return self.error('Maximumpayload exceeded in compressed text message. Aborting...', 1009); + } + return self.error(err.message, 1007); + } + if (buffer != null) { + if( self.maxPayload==0 || (self.maxPayload > 0 && (self.currentMessageLength + buffer.length) < self.maxPayload) ){ + self.currentMessage.push(buffer); + } + else{ + self.currentMessage=null; + self.currentMessage = []; + self.currentMessageLength = 0; + self.error(new Error('Maximum payload exceeded. maxPayload: '+self.maxPayload), 1009); + return; + } + self.currentMessageLength += buffer.length; + } + if (state.lastFragment) { + var messageBuffer = Buffer.concat(self.currentMessage); + self.currentMessage = []; + self.currentMessageLength = 0; + if (!isValidUTF8(messageBuffer)) { + self.error('invalid utf8 sequence', 1007); + return; + } + self.ontext(messageBuffer.toString('utf8'), {masked: state.masked, buffer: messageBuffer}); + } + callback(); + }); + }); + this.flush(); + this.endPacket(); + } + }, + // binary + '2': { + start: function(data) { + var self = this; + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + if (self.maxPayloadExceeded(firstLength)){ + self.error('Max payload exceeded in compressed text message. Aborting...', 1009); + return; + } + opcodes['2'].getData.call(self, firstLength); + } + else if (firstLength == 126) { + self.expectHeader(2, function(data) { + var length = readUInt16BE.call(data, 0); + if (self.maxPayloadExceeded(length)){ + self.error('Max payload exceeded in compressed text message. Aborting...', 1009); + return; + } + opcodes['2'].getData.call(self, length); + }); + } + else if (firstLength == 127) { + self.expectHeader(8, function(data) { + if (readUInt32BE.call(data, 0) != 0) { + self.error('packets with length spanning more than 32 bit is currently not supported', 1008); + return; + } + var length = readUInt32BE.call(data, 4, true); + if (self.maxPayloadExceeded(length)){ + self.error('Max payload exceeded in compressed text message. Aborting...', 1009); + return; + } + opcodes['2'].getData.call(self, length); + }); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['2'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['2'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + var packet = this.unmask(mask, data, true) || new Buffer(0); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.applyExtensions(packet, state.lastFragment, state.compressed, function(err, buffer) { + if (err) { + if(err.type===1009){ + return self.error('Max payload exceeded in compressed binary message. Aborting...', 1009); + } + return self.error(err.message, 1007); + } + if (buffer != null) { + if( self.maxPayload==0 || (self.maxPayload > 0 && (self.currentMessageLength + buffer.length) < self.maxPayload) ){ + self.currentMessage.push(buffer); + } + else{ + self.currentMessage=null; + self.currentMessage = []; + self.currentMessageLength = 0; + self.error(new Error('Maximum payload exceeded'), 1009); + return; + } + self.currentMessageLength += buffer.length; + } + if (state.lastFragment) { + var messageBuffer = Buffer.concat(self.currentMessage); + self.currentMessage = []; + self.currentMessageLength = 0; + self.onbinary(messageBuffer, {masked: state.masked, buffer: messageBuffer}); + } + callback(); + }); + }); + this.flush(); + this.endPacket(); + } + }, + // close + '8': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented close is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['8'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['8'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['8'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = self.unmask(mask, data, true); + + var state = clone(this.state); + this.messageHandlers.push(function() { + if (data && data.length == 1) { + self.error('close packets with data must be at least two bytes long', 1002); + return; + } + var code = data && data.length > 1 ? readUInt16BE.call(data, 0) : 1000; + if (!ErrorCodes.isValidErrorCode(code)) { + self.error('invalid error code', 1002); + return; + } + var message = ''; + if (data && data.length > 2) { + var messageBuffer = data.slice(2); + if (!isValidUTF8(messageBuffer)) { + self.error('invalid utf8 sequence', 1007); + return; + } + message = messageBuffer.toString('utf8'); + } + self.onclose(code, message, {masked: state.masked}); + self.reset(); + }); + this.flush(); + }, + }, + // ping + '9': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented ping is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['9'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (self.state.masked) { + self.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['9'].finish.call(self, mask, data); + }); + }); + } + else { + self.expectData(length, function(data) { + opcodes['9'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = this.unmask(mask, data, true); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.onping(data, {masked: state.masked, binary: true}); + callback(); + }); + this.flush(); + this.endPacket(); + } + }, + // pong + '10': { + start: function(data) { + var self = this; + if (self.state.lastFragment == false) { + self.error('fragmented pong is not supported', 1002); + return; + } + + // decode length + var firstLength = data[1] & 0x7f; + if (firstLength < 126) { + opcodes['10'].getData.call(self, firstLength); + } + else { + self.error('control frames cannot have more than 125 bytes of data', 1002); + } + }, + getData: function(length) { + var self = this; + if (this.state.masked) { + this.expectHeader(4, function(data) { + var mask = data; + self.expectData(length, function(data) { + opcodes['10'].finish.call(self, mask, data); + }); + }); + } + else { + this.expectData(length, function(data) { + opcodes['10'].finish.call(self, null, data); + }); + } + }, + finish: function(mask, data) { + var self = this; + data = self.unmask(mask, data, true); + var state = clone(this.state); + this.messageHandlers.push(function(callback) { + self.onpong(data, {masked: state.masked, binary: true}); + callback(); + }); + this.flush(); + this.endPacket(); + } + } +} diff --git a/node_modules/ws/lib/Sender.hixie.js b/node_modules/ws/lib/Sender.hixie.js new file mode 100644 index 0000000..b87d9dd --- /dev/null +++ b/node_modules/ws/lib/Sender.hixie.js @@ -0,0 +1,124 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var events = require('events') + , util = require('util') + , EventEmitter = events.EventEmitter; + +/** + * Hixie Sender implementation + */ + +function Sender(socket) { + if (this instanceof Sender === false) { + throw new TypeError("Classes can't be function-called"); + } + + events.EventEmitter.call(this); + + this.socket = socket; + this.continuationFrame = false; + this.isClosed = false; +} + +module.exports = Sender; + +/** + * Inherits from EventEmitter. + */ + +util.inherits(Sender, events.EventEmitter); + +/** + * Frames and writes data. + * + * @api public + */ + +Sender.prototype.send = function(data, options, cb) { + if (this.isClosed) return; + + var isString = typeof data == 'string' + , length = isString ? Buffer.byteLength(data) : data.length + , lengthbytes = (length > 127) ? 2 : 1 // assume less than 2**14 bytes + , writeStartMarker = this.continuationFrame == false + , writeEndMarker = !options || !(typeof options.fin != 'undefined' && !options.fin) + , buffer = new Buffer((writeStartMarker ? ((options && options.binary) ? (1 + lengthbytes) : 1) : 0) + length + ((writeEndMarker && !(options && options.binary)) ? 1 : 0)) + , offset = writeStartMarker ? 1 : 0; + + if (writeStartMarker) { + if (options && options.binary) { + buffer.write('\x80', 'binary'); + // assume length less than 2**14 bytes + if (lengthbytes > 1) + buffer.write(String.fromCharCode(128+length/128), offset++, 'binary'); + buffer.write(String.fromCharCode(length&0x7f), offset++, 'binary'); + } else + buffer.write('\x00', 'binary'); + } + + if (isString) buffer.write(data, offset, 'utf8'); + else data.copy(buffer, offset, 0); + + if (writeEndMarker) { + if (options && options.binary) { + // sending binary, not writing end marker + } else + buffer.write('\xff', offset + length, 'binary'); + this.continuationFrame = false; + } + else this.continuationFrame = true; + + try { + this.socket.write(buffer, 'binary', cb); + } catch (e) { + this.error(e.toString()); + } +}; + +/** + * Sends a close instruction to the remote party. + * + * @api public + */ + +Sender.prototype.close = function(code, data, mask, cb) { + if (this.isClosed) return; + this.isClosed = true; + try { + if (this.continuationFrame) this.socket.write(new Buffer([0xff], 'binary')); + this.socket.write(new Buffer([0xff, 0x00]), 'binary', cb); + } catch (e) { + this.error(e.toString()); + } +}; + +/** + * Sends a ping message to the remote party. Not available for hixie. + * + * @api public + */ + +Sender.prototype.ping = function(data, options) {}; + +/** + * Sends a pong message to the remote party. Not available for hixie. + * + * @api public + */ + +Sender.prototype.pong = function(data, options) {}; + +/** + * Handles an error + * + * @api private + */ + +Sender.prototype.error = function (reason) { + this.emit('error', reason); + return this; +}; diff --git a/node_modules/ws/lib/Sender.js b/node_modules/ws/lib/Sender.js new file mode 100644 index 0000000..9a1e43b --- /dev/null +++ b/node_modules/ws/lib/Sender.js @@ -0,0 +1,310 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var events = require('events') + , util = require('util') + , crypto = require('crypto') + , EventEmitter = events.EventEmitter + , ErrorCodes = require('./ErrorCodes') + , bufferUtil = require('./BufferUtil') + , PerMessageDeflate = require('./PerMessageDeflate'); + +/** + * HyBi Sender implementation + */ + +function Sender(socket, extensions) { + if (this instanceof Sender === false) { + throw new TypeError("Classes can't be function-called"); + } + + events.EventEmitter.call(this); + + this._socket = socket; + this.extensions = extensions || {}; + this.firstFragment = true; + this.compress = false; + this.messageHandlers = []; + this.processing = false; +} + +/** + * Inherits from EventEmitter. + */ + +util.inherits(Sender, events.EventEmitter); + +/** + * Sends a close instruction to the remote party. + * + * @api public + */ + +Sender.prototype.close = function(code, data, mask, cb) { + if (typeof code !== 'undefined') { + if (typeof code !== 'number' || + !ErrorCodes.isValidErrorCode(code)) throw new Error('first argument must be a valid error code number'); + } + code = code || 1000; + var dataBuffer = new Buffer(2 + (data ? Buffer.byteLength(data) : 0)); + writeUInt16BE.call(dataBuffer, code, 0); + if (dataBuffer.length > 2) dataBuffer.write(data, 2); + + var self = this; + this.messageHandlers.push(function() { + self.frameAndSend(0x8, dataBuffer, true, mask); + if (typeof cb == 'function') cb(); + }); + this.flush(); +}; + +/** + * Sends a ping message to the remote party. + * + * @api public + */ + +Sender.prototype.ping = function(data, options) { + var mask = options && options.mask; + var self = this; + this.messageHandlers.push(function() { + self.frameAndSend(0x9, data || '', true, mask); + }); + this.flush(); +}; + +/** + * Sends a pong message to the remote party. + * + * @api public + */ + +Sender.prototype.pong = function(data, options) { + var mask = options && options.mask; + var self = this; + this.messageHandlers.push(function() { + self.frameAndSend(0xa, data || '', true, mask); + }); + this.flush(); +}; + +/** + * Sends text or binary data to the remote party. + * + * @api public + */ + +Sender.prototype.send = function(data, options, cb) { + var finalFragment = options && options.fin === false ? false : true; + var mask = options && options.mask; + var compress = options && options.compress; + var opcode = options && options.binary ? 2 : 1; + if (this.firstFragment === false) { + opcode = 0; + compress = false; + } else { + this.firstFragment = false; + this.compress = compress; + } + if (finalFragment) this.firstFragment = true + + var compressFragment = this.compress; + + var self = this; + this.messageHandlers.push(function() { + if (!data || !compressFragment) { + self.frameAndSend(opcode, data, finalFragment, mask, compress, cb); + return; + } + + self.processing = true; + self.applyExtensions(data, finalFragment, compressFragment, function(err, data) { + if (err) { + if (typeof cb == 'function') cb(err); + else self.emit('error', err); + return; + } + self.frameAndSend(opcode, data, finalFragment, mask, compress, cb); + self.processing = false; + self.flush(); + }); + }); + this.flush(); +}; + +/** + * Frames and sends a piece of data according to the HyBi WebSocket protocol. + * + * @api private + */ + +Sender.prototype.frameAndSend = function(opcode, data, finalFragment, maskData, compressed, cb) { + var canModifyData = false; + + if (!data) { + try { + this._socket.write(new Buffer([opcode | (finalFragment ? 0x80 : 0), 0 | (maskData ? 0x80 : 0)].concat(maskData ? [0, 0, 0, 0] : [])), 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + return; + } + + if (!Buffer.isBuffer(data)) { + canModifyData = true; + if (data && (typeof data.byteLength !== 'undefined' || typeof data.buffer !== 'undefined')) { + data = getArrayBuffer(data); + } else { + // + // If people want to send a number, this would allocate the number in + // bytes as memory size instead of storing the number as buffer value. So + // we need to transform it to string in order to prevent possible + // vulnerabilities / memory attacks. + // + if (typeof data === 'number') data = data.toString(); + + data = new Buffer(data); + } + } + + var dataLength = data.length + , dataOffset = maskData ? 6 : 2 + , secondByte = dataLength; + + if (dataLength >= 65536) { + dataOffset += 8; + secondByte = 127; + } + else if (dataLength > 125) { + dataOffset += 2; + secondByte = 126; + } + + var mergeBuffers = dataLength < 32768 || (maskData && !canModifyData); + var totalLength = mergeBuffers ? dataLength + dataOffset : dataOffset; + var outputBuffer = new Buffer(totalLength); + outputBuffer[0] = finalFragment ? opcode | 0x80 : opcode; + if (compressed) outputBuffer[0] |= 0x40; + + switch (secondByte) { + case 126: + writeUInt16BE.call(outputBuffer, dataLength, 2); + break; + case 127: + writeUInt32BE.call(outputBuffer, 0, 2); + writeUInt32BE.call(outputBuffer, dataLength, 6); + } + + if (maskData) { + outputBuffer[1] = secondByte | 0x80; + var mask = getRandomMask(); + outputBuffer[dataOffset - 4] = mask[0]; + outputBuffer[dataOffset - 3] = mask[1]; + outputBuffer[dataOffset - 2] = mask[2]; + outputBuffer[dataOffset - 1] = mask[3]; + if (mergeBuffers) { + bufferUtil.mask(data, mask, outputBuffer, dataOffset, dataLength); + try { + this._socket.write(outputBuffer, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + else { + bufferUtil.mask(data, mask, data, 0, dataLength); + try { + this._socket.write(outputBuffer, 'binary'); + this._socket.write(data, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + } + else { + outputBuffer[1] = secondByte; + if (mergeBuffers) { + data.copy(outputBuffer, dataOffset); + try { + this._socket.write(outputBuffer, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + else { + try { + this._socket.write(outputBuffer, 'binary'); + this._socket.write(data, 'binary', cb); + } + catch (e) { + if (typeof cb == 'function') cb(e); + else this.emit('error', e); + } + } + } +}; + +/** + * Execute message handler buffers + * + * @api private + */ + +Sender.prototype.flush = function() { + while (!this.processing && this.messageHandlers.length) { + this.messageHandlers.shift()(); + } +}; + +/** + * Apply extensions to message + * + * @api private + */ + +Sender.prototype.applyExtensions = function(data, fin, compress, callback) { + if ((data.buffer || data) instanceof ArrayBuffer) { + data = getArrayBuffer(data); + } + this.extensions[PerMessageDeflate.extensionName].compress(data, fin, callback); +}; + +module.exports = Sender; + +function writeUInt16BE(value, offset) { + this[offset] = (value & 0xff00)>>8; + this[offset+1] = value & 0xff; +} + +function writeUInt32BE(value, offset) { + this[offset] = (value & 0xff000000)>>24; + this[offset+1] = (value & 0xff0000)>>16; + this[offset+2] = (value & 0xff00)>>8; + this[offset+3] = value & 0xff; +} + +function getArrayBuffer(data) { + // data is either an ArrayBuffer or ArrayBufferView. + var array = new Uint8Array(data.buffer || data) + , l = data.byteLength || data.length + , o = data.byteOffset || 0 + , buffer = new Buffer(l); + for (var i = 0; i < l; ++i) { + buffer[i] = array[o+i]; + } + return buffer; +} + +function getRandomMask() { + return crypto.randomBytes(4); +} diff --git a/node_modules/ws/lib/Validation.fallback.js b/node_modules/ws/lib/Validation.fallback.js new file mode 100644 index 0000000..639b0d3 --- /dev/null +++ b/node_modules/ws/lib/Validation.fallback.js @@ -0,0 +1,11 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +exports.Validation = { + isValidUTF8: function(buffer) { + return true; + } +}; diff --git a/node_modules/ws/lib/Validation.js b/node_modules/ws/lib/Validation.js new file mode 100644 index 0000000..0adace5 --- /dev/null +++ b/node_modules/ws/lib/Validation.js @@ -0,0 +1,19 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var isValidUTF8; + +try { + isValidUTF8 = require('utf-8-validate'); +} catch (e) { + isValidUTF8 = require('./Validation.fallback'); +} + +module.exports = typeof isValidUTF8 === 'object' + ? isValidUTF8.Validation.isValidUTF8 + : isValidUTF8; diff --git a/node_modules/ws/lib/WebSocket.js b/node_modules/ws/lib/WebSocket.js new file mode 100644 index 0000000..bb09e85 --- /dev/null +++ b/node_modules/ws/lib/WebSocket.js @@ -0,0 +1,987 @@ +'use strict'; + +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var url = require('url') + , util = require('util') + , http = require('http') + , https = require('https') + , crypto = require('crypto') + , stream = require('stream') + , Ultron = require('ultron') + , Options = require('options') + , Sender = require('./Sender') + , Receiver = require('./Receiver') + , SenderHixie = require('./Sender.hixie') + , ReceiverHixie = require('./Receiver.hixie') + , Extensions = require('./Extensions') + , PerMessageDeflate = require('./PerMessageDeflate') + , EventEmitter = require('events').EventEmitter; + +/** + * Constants + */ + +// Default protocol version + +var protocolVersion = 13; + +// Close timeout + +var closeTimeout = 30 * 1000; // Allow 30 seconds to terminate the connection cleanly + +/** + * WebSocket implementation + * + * @constructor + * @param {String} address Connection address. + * @param {String|Array} protocols WebSocket protocols. + * @param {Object} options Additional connection options. + * @api public + */ +function WebSocket(address, protocols, options) { + if (this instanceof WebSocket === false) { + return new WebSocket(address, protocols, options); + } + + EventEmitter.call(this); + + if (protocols && !Array.isArray(protocols) && 'object' === typeof protocols) { + // accept the "options" Object as the 2nd argument + options = protocols; + protocols = null; + } + + if ('string' === typeof protocols) { + protocols = [ protocols ]; + } + + if (!Array.isArray(protocols)) { + protocols = []; + } + + this._socket = null; + this._ultron = null; + this._closeReceived = false; + this.bytesReceived = 0; + this.readyState = null; + this.supports = {}; + this.extensions = {}; + this._binaryType = 'nodebuffer'; + + if (Array.isArray(address)) { + initAsServerClient.apply(this, address.concat(options)); + } else { + initAsClient.apply(this, [address, protocols, options]); + } +} + +/** + * Inherits from EventEmitter. + */ +util.inherits(WebSocket, EventEmitter); + +/** + * Ready States + */ +["CONNECTING", "OPEN", "CLOSING", "CLOSED"].forEach(function each(state, index) { + WebSocket.prototype[state] = WebSocket[state] = index; +}); + +/** + * Gracefully closes the connection, after sending a description message to the server + * + * @param {Object} data to be sent to the server + * @api public + */ +WebSocket.prototype.close = function close(code, data) { + if (this.readyState === WebSocket.CLOSED) return; + + if (this.readyState === WebSocket.CONNECTING) { + this.readyState = WebSocket.CLOSED; + return; + } + + if (this.readyState === WebSocket.CLOSING) { + if (this._closeReceived && this._isServer) { + this.terminate(); + } + return; + } + + var self = this; + try { + this.readyState = WebSocket.CLOSING; + this._closeCode = code; + this._closeMessage = data; + var mask = !this._isServer; + this._sender.close(code, data, mask, function(err) { + if (err) self.emit('error', err); + + if (self._closeReceived && self._isServer) { + self.terminate(); + } else { + // ensure that the connection is cleaned up even when no response of closing handshake. + clearTimeout(self._closeTimer); + self._closeTimer = setTimeout(cleanupWebsocketResources.bind(self, true), closeTimeout); + } + }); + } catch (e) { + this.emit('error', e); + } +}; + +/** + * Pause the client stream + * + * @api public + */ +WebSocket.prototype.pause = function pauser() { + if (this.readyState !== WebSocket.OPEN) throw new Error('not opened'); + + return this._socket.pause(); +}; + +/** + * Sends a ping + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean + * @param {boolean} dontFailWhenClosed indicates whether or not to throw if the connection isnt open + * @api public + */ +WebSocket.prototype.ping = function ping(data, options, dontFailWhenClosed) { + if (this.readyState !== WebSocket.OPEN) { + if (dontFailWhenClosed === true) return; + throw new Error('not opened'); + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + + this._sender.ping(data, options); +}; + +/** + * Sends a pong + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean + * @param {boolean} dontFailWhenClosed indicates whether or not to throw if the connection isnt open + * @api public + */ +WebSocket.prototype.pong = function(data, options, dontFailWhenClosed) { + if (this.readyState !== WebSocket.OPEN) { + if (dontFailWhenClosed === true) return; + throw new Error('not opened'); + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + + this._sender.pong(data, options); +}; + +/** + * Resume the client stream + * + * @api public + */ +WebSocket.prototype.resume = function resume() { + if (this.readyState !== WebSocket.OPEN) throw new Error('not opened'); + + return this._socket.resume(); +}; + +/** + * Sends a piece of data + * + * @param {Object} data to be sent to the server + * @param {Object} Members - mask: boolean, binary: boolean, compress: boolean + * @param {function} Optional callback which is executed after the send completes + * @api public + */ + +WebSocket.prototype.send = function send(data, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + if (this.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else throw new Error('not opened'); + return; + } + + if (!data) data = ''; + if (this._queue) { + var self = this; + this._queue.push(function() { self.send(data, options, cb); }); + return; + } + + options = options || {}; + options.fin = true; + + if (typeof options.binary === 'undefined') { + options.binary = (data instanceof ArrayBuffer || data instanceof Buffer || + data instanceof Uint8Array || + data instanceof Uint16Array || + data instanceof Uint32Array || + data instanceof Int8Array || + data instanceof Int16Array || + data instanceof Int32Array || + data instanceof Float32Array || + data instanceof Float64Array); + } + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + if (typeof options.compress === 'undefined') options.compress = true; + if (!this.extensions[PerMessageDeflate.extensionName]) { + options.compress = false; + } + + var readable = typeof stream.Readable === 'function' + ? stream.Readable + : stream.Stream; + + if (data instanceof readable) { + startQueue(this); + var self = this; + + sendStream(this, data, options, function send(error) { + process.nextTick(function tock() { + executeQueueSends(self); + }); + + if (typeof cb === 'function') cb(error); + }); + } else { + this._sender.send(data, options, cb); + } +}; + +/** + * Streams data through calls to a user supplied function + * + * @param {Object} Members - mask: boolean, binary: boolean, compress: boolean + * @param {function} 'function (error, send)' which is executed on successive ticks of which send is 'function (data, final)'. + * @api public + */ +WebSocket.prototype.stream = function stream(options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + var self = this; + + if (typeof cb !== 'function') throw new Error('callback must be provided'); + + if (this.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else throw new Error('not opened'); + return; + } + + if (this._queue) { + this._queue.push(function () { self.stream(options, cb); }); + return; + } + + options = options || {}; + + if (typeof options.mask === 'undefined') options.mask = !this._isServer; + if (typeof options.compress === 'undefined') options.compress = true; + if (!this.extensions[PerMessageDeflate.extensionName]) { + options.compress = false; + } + + startQueue(this); + + function send(data, final) { + try { + if (self.readyState !== WebSocket.OPEN) throw new Error('not opened'); + options.fin = final === true; + self._sender.send(data, options); + if (!final) process.nextTick(cb.bind(null, null, send)); + else executeQueueSends(self); + } catch (e) { + if (typeof cb === 'function') cb(e); + else { + delete self._queue; + self.emit('error', e); + } + } + } + + process.nextTick(cb.bind(null, null, send)); +}; + +/** + * Immediately shuts down the connection + * + * @api public + */ +WebSocket.prototype.terminate = function terminate() { + if (this.readyState === WebSocket.CLOSED) return; + + if (this._socket) { + this.readyState = WebSocket.CLOSING; + + // End the connection + try { this._socket.end(); } + catch (e) { + // Socket error during end() call, so just destroy it right now + cleanupWebsocketResources.call(this, true); + return; + } + + // Add a timeout to ensure that the connection is completely + // cleaned up within 30 seconds, even if the clean close procedure + // fails for whatever reason + // First cleanup any pre-existing timeout from an earlier "terminate" call, + // if one exists. Otherwise terminate calls in quick succession will leak timeouts + // and hold the program open for `closeTimout` time. + if (this._closeTimer) { clearTimeout(this._closeTimer); } + this._closeTimer = setTimeout(cleanupWebsocketResources.bind(this, true), closeTimeout); + } else if (this.readyState === WebSocket.CONNECTING) { + cleanupWebsocketResources.call(this, true); + } +}; + +/** + * Expose bufferedAmount + * + * @api public + */ +Object.defineProperty(WebSocket.prototype, 'bufferedAmount', { + get: function get() { + var amount = 0; + if (this._socket) { + amount = this._socket.bufferSize || 0; + } + return amount; + } +}); + +/** + * Expose binaryType + * + * This deviates from the W3C interface since ws doesn't support the required + * default "blob" type (instead we define a custom "nodebuffer" type). + * + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +Object.defineProperty(WebSocket.prototype, 'binaryType', { + get: function get() { + return this._binaryType; + }, + set: function set(type) { + if (type === 'arraybuffer' || type === 'nodebuffer') + this._binaryType = type; + else + throw new SyntaxError('unsupported binaryType: must be either "nodebuffer" or "arraybuffer"'); + } +}); + +/** + * Emulates the W3C Browser based WebSocket interface using function members. + * + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +['open', 'error', 'close', 'message'].forEach(function(method) { + Object.defineProperty(WebSocket.prototype, 'on' + method, { + /** + * Returns the current listener + * + * @returns {Mixed} the set function or undefined + * @api public + */ + get: function get() { + var listener = this.listeners(method)[0]; + return listener ? (listener._listener ? listener._listener : listener) : undefined; + }, + + /** + * Start listening for events + * + * @param {Function} listener the listener + * @returns {Mixed} the set function or undefined + * @api public + */ + set: function set(listener) { + this.removeAllListeners(method); + this.addEventListener(method, listener); + } + }); +}); + +/** + * Emulates the W3C Browser based WebSocket interface using addEventListener. + * + * @see https://developer.mozilla.org/en/DOM/element.addEventListener + * @see http://dev.w3.org/html5/websockets/#the-websocket-interface + * @api public + */ +WebSocket.prototype.addEventListener = function(method, listener) { + var target = this; + + function onMessage (data, flags) { + if (flags.binary && this.binaryType === 'arraybuffer') + data = new Uint8Array(data).buffer; + listener.call(target, new MessageEvent(data, !!flags.binary, target)); + } + + function onClose (code, message) { + listener.call(target, new CloseEvent(code, message, target)); + } + + function onError (event) { + event.type = 'error'; + event.target = target; + listener.call(target, event); + } + + function onOpen () { + listener.call(target, new OpenEvent(target)); + } + + if (typeof listener === 'function') { + if (method === 'message') { + // store a reference so we can return the original function from the + // addEventListener hook + onMessage._listener = listener; + this.on(method, onMessage); + } else if (method === 'close') { + // store a reference so we can return the original function from the + // addEventListener hook + onClose._listener = listener; + this.on(method, onClose); + } else if (method === 'error') { + // store a reference so we can return the original function from the + // addEventListener hook + onError._listener = listener; + this.on(method, onError); + } else if (method === 'open') { + // store a reference so we can return the original function from the + // addEventListener hook + onOpen._listener = listener; + this.on(method, onOpen); + } else { + this.on(method, listener); + } + } +}; + +module.exports = WebSocket; +module.exports.buildHostHeader = buildHostHeader + +/** + * W3C MessageEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function MessageEvent(dataArg, isBinary, target) { + this.type = 'message'; + this.data = dataArg; + this.target = target; + this.binary = isBinary; // non-standard. +} + +/** + * W3C CloseEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function CloseEvent(code, reason, target) { + this.type = 'close'; + this.wasClean = (typeof code === 'undefined' || code === 1000); + this.code = code; + this.reason = reason; + this.target = target; +} + +/** + * W3C OpenEvent + * + * @see http://www.w3.org/TR/html5/comms.html + * @constructor + * @api private + */ +function OpenEvent(target) { + this.type = 'open'; + this.target = target; +} + +// Append port number to Host header, only if specified in the url +// and non-default +function buildHostHeader(isSecure, hostname, port) { + var headerHost = hostname; + if (hostname) { + if ((isSecure && (port != 443)) || (!isSecure && (port != 80))){ + headerHost = headerHost + ':' + port; + } + } + return headerHost; +} + +/** + * Entirely private apis, + * which may or may not be bound to a sepcific WebSocket instance. + */ +function initAsServerClient(req, socket, upgradeHead, options) { + options = new Options({ + protocolVersion: protocolVersion, + protocol: null, + extensions: {}, + maxPayload: 0 + }).merge(options); + + // expose state properties + this.protocol = options.value.protocol; + this.protocolVersion = options.value.protocolVersion; + this.extensions = options.value.extensions; + this.supports.binary = (this.protocolVersion !== 'hixie-76'); + this.upgradeReq = req; + this.readyState = WebSocket.CONNECTING; + this._isServer = true; + this.maxPayload = options.value.maxPayload; + // establish connection + if (options.value.protocolVersion === 'hixie-76') { + establishConnection.call(this, ReceiverHixie, SenderHixie, socket, upgradeHead); + } else { + establishConnection.call(this, Receiver, Sender, socket, upgradeHead); + } +} + +function initAsClient(address, protocols, options) { + options = new Options({ + origin: null, + protocolVersion: protocolVersion, + host: null, + headers: null, + protocol: protocols.join(','), + agent: null, + + // ssl-related options + pfx: null, + key: null, + passphrase: null, + cert: null, + ca: null, + ciphers: null, + rejectUnauthorized: null, + perMessageDeflate: true, + localAddress: null + }).merge(options); + + if (options.value.protocolVersion !== 8 && options.value.protocolVersion !== 13) { + throw new Error('unsupported protocol version'); + } + + // verify URL and establish http class + var serverUrl = url.parse(address); + var isUnixSocket = serverUrl.protocol === 'ws+unix:'; + if (!serverUrl.host && !isUnixSocket) throw new Error('invalid url'); + var isSecure = serverUrl.protocol === 'wss:' || serverUrl.protocol === 'https:'; + var httpObj = isSecure ? https : http; + var port = serverUrl.port || (isSecure ? 443 : 80); + var auth = serverUrl.auth; + + // prepare extensions + var extensionsOffer = {}; + var perMessageDeflate; + if (options.value.perMessageDeflate) { + perMessageDeflate = new PerMessageDeflate(typeof options.value.perMessageDeflate !== true ? options.value.perMessageDeflate : {}, false); + extensionsOffer[PerMessageDeflate.extensionName] = perMessageDeflate.offer(); + } + + // expose state properties + this._isServer = false; + this.url = address; + this.protocolVersion = options.value.protocolVersion; + this.supports.binary = (this.protocolVersion !== 'hixie-76'); + + // begin handshake + var key = new Buffer(options.value.protocolVersion + '-' + Date.now()).toString('base64'); + var shasum = crypto.createHash('sha1'); + shasum.update(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'); + var expectedServerKey = shasum.digest('base64'); + + var agent = options.value.agent; + + var headerHost = buildHostHeader(isSecure, serverUrl.hostname, port) + + var requestOptions = { + port: port, + host: serverUrl.hostname, + headers: { + 'Connection': 'Upgrade', + 'Upgrade': 'websocket', + 'Host': headerHost, + 'Sec-WebSocket-Version': options.value.protocolVersion, + 'Sec-WebSocket-Key': key + } + }; + + // If we have basic auth. + if (auth) { + requestOptions.headers.Authorization = 'Basic ' + new Buffer(auth).toString('base64'); + } + + if (options.value.protocol) { + requestOptions.headers['Sec-WebSocket-Protocol'] = options.value.protocol; + } + + if (options.value.host) { + requestOptions.headers.Host = options.value.host; + } + + if (options.value.headers) { + for (var header in options.value.headers) { + if (options.value.headers.hasOwnProperty(header)) { + requestOptions.headers[header] = options.value.headers[header]; + } + } + } + + if (Object.keys(extensionsOffer).length) { + requestOptions.headers['Sec-WebSocket-Extensions'] = Extensions.format(extensionsOffer); + } + + if (options.isDefinedAndNonNull('pfx') + || options.isDefinedAndNonNull('key') + || options.isDefinedAndNonNull('passphrase') + || options.isDefinedAndNonNull('cert') + || options.isDefinedAndNonNull('ca') + || options.isDefinedAndNonNull('ciphers') + || options.isDefinedAndNonNull('rejectUnauthorized')) { + + if (options.isDefinedAndNonNull('pfx')) requestOptions.pfx = options.value.pfx; + if (options.isDefinedAndNonNull('key')) requestOptions.key = options.value.key; + if (options.isDefinedAndNonNull('passphrase')) requestOptions.passphrase = options.value.passphrase; + if (options.isDefinedAndNonNull('cert')) requestOptions.cert = options.value.cert; + if (options.isDefinedAndNonNull('ca')) requestOptions.ca = options.value.ca; + if (options.isDefinedAndNonNull('ciphers')) requestOptions.ciphers = options.value.ciphers; + if (options.isDefinedAndNonNull('rejectUnauthorized')) requestOptions.rejectUnauthorized = options.value.rejectUnauthorized; + + if (!agent) { + // global agent ignores client side certificates + agent = new httpObj.Agent(requestOptions); + } + } + + requestOptions.path = serverUrl.path || '/'; + + if (agent) { + requestOptions.agent = agent; + } + + if (isUnixSocket) { + requestOptions.socketPath = serverUrl.pathname; + } + + if (options.value.localAddress) { + requestOptions.localAddress = options.value.localAddress; + } + + if (options.value.origin) { + if (options.value.protocolVersion < 13) requestOptions.headers['Sec-WebSocket-Origin'] = options.value.origin; + else requestOptions.headers.Origin = options.value.origin; + } + + var self = this; + var req = httpObj.request(requestOptions); + + req.on('error', function onerror(error) { + self.emit('error', error); + cleanupWebsocketResources.call(self, error); + }); + + req.once('response', function response(res) { + var error; + + if (!self.emit('unexpected-response', req, res)) { + error = new Error('unexpected server response (' + res.statusCode + ')'); + req.abort(); + self.emit('error', error); + } + + cleanupWebsocketResources.call(self, error); + }); + + req.once('upgrade', function upgrade(res, socket, upgradeHead) { + if (self.readyState === WebSocket.CLOSED) { + // client closed before server accepted connection + self.emit('close'); + self.removeAllListeners(); + socket.end(); + return; + } + + var serverKey = res.headers['sec-websocket-accept']; + if (typeof serverKey === 'undefined' || serverKey !== expectedServerKey) { + self.emit('error', 'invalid server key'); + self.removeAllListeners(); + socket.end(); + return; + } + + var serverProt = res.headers['sec-websocket-protocol']; + var protList = (options.value.protocol || "").split(/, */); + var protError = null; + + if (!options.value.protocol && serverProt) { + protError = 'server sent a subprotocol even though none requested'; + } else if (options.value.protocol && !serverProt) { + protError = 'server sent no subprotocol even though requested'; + } else if (serverProt && protList.indexOf(serverProt) === -1) { + protError = 'server responded with an invalid protocol'; + } + + if (protError) { + self.emit('error', protError); + self.removeAllListeners(); + socket.end(); + return; + } else if (serverProt) { + self.protocol = serverProt; + } + + var serverExtensions = Extensions.parse(res.headers['sec-websocket-extensions']); + if (perMessageDeflate && serverExtensions[PerMessageDeflate.extensionName]) { + try { + perMessageDeflate.accept(serverExtensions[PerMessageDeflate.extensionName]); + } catch (err) { + self.emit('error', 'invalid extension parameter'); + self.removeAllListeners(); + socket.end(); + return; + } + self.extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + + establishConnection.call(self, Receiver, Sender, socket, upgradeHead); + + // perform cleanup on http resources + req.removeAllListeners(); + req = null; + agent = null; + }); + + req.end(); + this.readyState = WebSocket.CONNECTING; +} + +function establishConnection(ReceiverClass, SenderClass, socket, upgradeHead) { + var ultron = this._ultron = new Ultron(socket) + , called = false + , self = this; + + socket.setTimeout(0); + socket.setNoDelay(true); + + this._receiver = new ReceiverClass(this.extensions,this.maxPayload); + this._socket = socket; + + // socket cleanup handlers + ultron.on('end', cleanupWebsocketResources.bind(this)); + ultron.on('close', cleanupWebsocketResources.bind(this)); + ultron.on('error', cleanupWebsocketResources.bind(this)); + + // ensure that the upgradeHead is added to the receiver + function firstHandler(data) { + if (called || self.readyState === WebSocket.CLOSED) return; + + called = true; + socket.removeListener('data', firstHandler); + ultron.on('data', realHandler); + + if (upgradeHead && upgradeHead.length > 0) { + realHandler(upgradeHead); + upgradeHead = null; + } + + if (data) realHandler(data); + } + + // subsequent packets are pushed straight to the receiver + function realHandler(data) { + self.bytesReceived += data.length; + self._receiver.add(data); + } + + ultron.on('data', firstHandler); + + // if data was passed along with the http upgrade, + // this will schedule a push of that on to the receiver. + // this has to be done on next tick, since the caller + // hasn't had a chance to set event handlers on this client + // object yet. + process.nextTick(firstHandler); + + // receiver event handlers + self._receiver.ontext = function ontext(data, flags) { + flags = flags || {}; + + self.emit('message', data, flags); + }; + + self._receiver.onbinary = function onbinary(data, flags) { + flags = flags || {}; + + flags.binary = true; + self.emit('message', data, flags); + }; + + self._receiver.onping = function onping(data, flags) { + flags = flags || {}; + + self.pong(data, { + mask: !self._isServer, + binary: flags.binary === true + }, true); + + self.emit('ping', data, flags); + }; + + self._receiver.onpong = function onpong(data, flags) { + self.emit('pong', data, flags || {}); + }; + + self._receiver.onclose = function onclose(code, data, flags) { + flags = flags || {}; + + self._closeReceived = true; + self.close(code, data); + }; + + self._receiver.onerror = function onerror(reason, errorCode) { + // close the connection when the receiver reports a HyBi error code + self.close(typeof errorCode !== 'undefined' ? errorCode : 1002, ''); + self.emit('error', (reason instanceof Error) ? reason : (new Error(reason))); + }; + + // finalize the client + this._sender = new SenderClass(socket, this.extensions); + this._sender.on('error', function onerror(error) { + self.close(1002, ''); + self.emit('error', error); + }); + + this.readyState = WebSocket.OPEN; + this.emit('open'); +} + +function startQueue(instance) { + instance._queue = instance._queue || []; +} + +function executeQueueSends(instance) { + var queue = instance._queue; + if (typeof queue === 'undefined') return; + + delete instance._queue; + for (var i = 0, l = queue.length; i < l; ++i) { + queue[i](); + } +} + +function sendStream(instance, stream, options, cb) { + stream.on('data', function incoming(data) { + if (instance.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else { + delete instance._queue; + instance.emit('error', new Error('not opened')); + } + return; + } + + options.fin = false; + instance._sender.send(data, options); + }); + + stream.on('end', function end() { + if (instance.readyState !== WebSocket.OPEN) { + if (typeof cb === 'function') cb(new Error('not opened')); + else { + delete instance._queue; + instance.emit('error', new Error('not opened')); + } + return; + } + + options.fin = true; + instance._sender.send(null, options); + + if (typeof cb === 'function') cb(null); + }); +} + +function cleanupWebsocketResources(error) { + if (this.readyState === WebSocket.CLOSED) return; + + this.readyState = WebSocket.CLOSED; + + clearTimeout(this._closeTimer); + this._closeTimer = null; + + // If the connection was closed abnormally (with an error), or if + // the close control frame was not received then the close code + // must default to 1006. + if (error || !this._closeReceived) { + this._closeCode = 1006; + } + this.emit('close', this._closeCode || 1000, this._closeMessage || ''); + + if (this._socket) { + if (this._ultron) this._ultron.destroy(); + this._socket.on('error', function onerror() { + try { this.destroy(); } + catch (e) {} + }); + + try { + if (!error) this._socket.end(); + else this._socket.destroy(); + } catch (e) { /* Ignore termination errors */ } + + this._socket = null; + this._ultron = null; + } + + if (this._sender) { + this._sender.removeAllListeners(); + this._sender = null; + } + + if (this._receiver) { + this._receiver.cleanup(); + this._receiver = null; + } + + if (this.extensions[PerMessageDeflate.extensionName]) { + this.extensions[PerMessageDeflate.extensionName].cleanup(); + } + + this.extensions = null; + + this.removeAllListeners(); + this.on('error', function onerror() {}); // catch all errors after this + delete this._queue; +} diff --git a/node_modules/ws/lib/WebSocketServer.js b/node_modules/ws/lib/WebSocketServer.js new file mode 100644 index 0000000..92077cd --- /dev/null +++ b/node_modules/ws/lib/WebSocketServer.js @@ -0,0 +1,554 @@ +/*! + * ws: a node.js websocket client + * Copyright(c) 2011 Einar Otto Stangvik + * MIT Licensed + */ + +var util = require('util') + , events = require('events') + , http = require('http') + , crypto = require('crypto') + , Options = require('options') + , WebSocket = require('./WebSocket') + , Extensions = require('./Extensions') + , PerMessageDeflate = require('./PerMessageDeflate') + , tls = require('tls') + , url = require('url'); + +/** + * WebSocket Server implementation + */ + +function WebSocketServer(options, callback) { + if (this instanceof WebSocketServer === false) { + return new WebSocketServer(options, callback); + } + + events.EventEmitter.call(this); + + options = new Options({ + host: '0.0.0.0', + port: null, + server: null, + verifyClient: null, + handleProtocols: null, + path: null, + noServer: false, + disableHixie: false, + clientTracking: true, + perMessageDeflate: true, + maxPayload: 100 * 1024 * 1024 + }).merge(options); + + if (!options.isDefinedAndNonNull('port') && !options.isDefinedAndNonNull('server') && !options.value.noServer) { + throw new TypeError('`port` or a `server` must be provided'); + } + + var self = this; + + if (options.isDefinedAndNonNull('port')) { + this._server = http.createServer(function (req, res) { + var body = http.STATUS_CODES[426]; + res.writeHead(426, { + 'Content-Length': body.length, + 'Content-Type': 'text/plain' + }); + res.end(body); + }); + this._server.allowHalfOpen = false; + this._server.listen(options.value.port, options.value.host, callback); + this._closeServer = function() { if (self._server) self._server.close(); }; + } + else if (options.value.server) { + this._server = options.value.server; + if (options.value.path) { + // take note of the path, to avoid collisions when multiple websocket servers are + // listening on the same http server + if (this._server._webSocketPaths && options.value.server._webSocketPaths[options.value.path]) { + throw new Error('two instances of WebSocketServer cannot listen on the same http server path'); + } + if (typeof this._server._webSocketPaths !== 'object') { + this._server._webSocketPaths = {}; + } + this._server._webSocketPaths[options.value.path] = 1; + } + } + if (this._server) { + this._onceServerListening = function() { self.emit('listening'); }; + this._server.once('listening', this._onceServerListening); + } + + if (typeof this._server != 'undefined') { + this._onServerError = function(error) { self.emit('error', error) }; + this._server.on('error', this._onServerError); + this._onServerUpgrade = function(req, socket, upgradeHead) { + //copy upgradeHead to avoid retention of large slab buffers used in node core + var head = new Buffer(upgradeHead.length); + upgradeHead.copy(head); + + self.handleUpgrade(req, socket, head, function(client) { + self.emit('connection'+req.url, client); + self.emit('connection', client); + }); + }; + this._server.on('upgrade', this._onServerUpgrade); + } + + this.options = options.value; + this.path = options.value.path; + this.clients = []; +} + +/** + * Inherits from EventEmitter. + */ + +util.inherits(WebSocketServer, events.EventEmitter); + +/** + * Immediately shuts down the connection. + * + * @api public + */ + +WebSocketServer.prototype.close = function(callback) { + // terminate all associated clients + var error = null; + try { + for (var i = 0, l = this.clients.length; i < l; ++i) { + this.clients[i].terminate(); + } + } + catch (e) { + error = e; + } + + // remove path descriptor, if any + if (this.path && this._server._webSocketPaths) { + delete this._server._webSocketPaths[this.path]; + if (Object.keys(this._server._webSocketPaths).length == 0) { + delete this._server._webSocketPaths; + } + } + + // close the http server if it was internally created + try { + if (typeof this._closeServer !== 'undefined') { + this._closeServer(); + } + } + finally { + if (this._server) { + this._server.removeListener('listening', this._onceServerListening); + this._server.removeListener('error', this._onServerError); + this._server.removeListener('upgrade', this._onServerUpgrade); + } + delete this._server; + } + if(callback) + callback(error); + else if(error) + throw error; +} + +/** + * Handle a HTTP Upgrade request. + * + * @api public + */ + +WebSocketServer.prototype.handleUpgrade = function(req, socket, upgradeHead, cb) { + // check for wrong path + if (this.options.path) { + var u = url.parse(req.url); + if (u && u.pathname !== this.options.path) return; + } + + if (typeof req.headers.upgrade === 'undefined' || req.headers.upgrade.toLowerCase() !== 'websocket') { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + if (req.headers['sec-websocket-key1']) handleHixieUpgrade.apply(this, arguments); + else handleHybiUpgrade.apply(this, arguments); +} + +module.exports = WebSocketServer; + +/** + * Entirely private apis, + * which may or may not be bound to a sepcific WebSocket instance. + */ + +function handleHybiUpgrade(req, socket, upgradeHead, cb) { + // handle premature socket errors + var errorHandler = function() { + try { socket.destroy(); } catch (e) {} + } + socket.on('error', errorHandler); + + // verify key presence + if (!req.headers['sec-websocket-key']) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + // verify version + var version = parseInt(req.headers['sec-websocket-version']); + if ([8, 13].indexOf(version) === -1) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + // verify protocol + var protocols = req.headers['sec-websocket-protocol']; + + // verify client + var origin = version < 13 ? + req.headers['sec-websocket-origin'] : + req.headers['origin']; + + // handle extensions offer + var extensionsOffer = Extensions.parse(req.headers['sec-websocket-extensions']); + + // handler to call when the connection sequence completes + var self = this; + var completeHybiUpgrade2 = function(protocol) { + + // calc key + var key = req.headers['sec-websocket-key']; + var shasum = crypto.createHash('sha1'); + shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); + key = shasum.digest('base64'); + + var headers = [ + 'HTTP/1.1 101 Switching Protocols' + , 'Upgrade: websocket' + , 'Connection: Upgrade' + , 'Sec-WebSocket-Accept: ' + key + ]; + + if (typeof protocol != 'undefined') { + headers.push('Sec-WebSocket-Protocol: ' + protocol); + } + + var extensions = {}; + try { + extensions = acceptExtensions.call(self, extensionsOffer); + } catch (err) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + if (Object.keys(extensions).length) { + var serverExtensions = {}; + Object.keys(extensions).forEach(function(token) { + serverExtensions[token] = [extensions[token].params] + }); + headers.push('Sec-WebSocket-Extensions: ' + Extensions.format(serverExtensions)); + } + + // allows external modification/inspection of handshake headers + self.emit('headers', headers); + + socket.setTimeout(0); + socket.setNoDelay(true); + try { + socket.write(headers.concat('', '').join('\r\n')); + } + catch (e) { + // if the upgrade write fails, shut the connection down hard + try { socket.destroy(); } catch (e) {} + return; + } + + var client = new WebSocket([req, socket, upgradeHead], { + protocolVersion: version, + protocol: protocol, + extensions: extensions, + maxPayload: self.options.maxPayload + }); + + if (self.options.clientTracking) { + self.clients.push(client); + client.on('close', function() { + var index = self.clients.indexOf(client); + if (index != -1) { + self.clients.splice(index, 1); + } + }); + } + + // signal upgrade complete + socket.removeListener('error', errorHandler); + cb(client); + } + + // optionally call external protocol selection handler before + // calling completeHybiUpgrade2 + var completeHybiUpgrade1 = function() { + // choose from the sub-protocols + if (typeof self.options.handleProtocols == 'function') { + var protList = (protocols || "").split(/, */); + var callbackCalled = false; + var res = self.options.handleProtocols(protList, function(result, protocol) { + callbackCalled = true; + if (!result) abortConnection(socket, 401, 'Unauthorized'); + else completeHybiUpgrade2(protocol); + }); + if (!callbackCalled) { + // the handleProtocols handler never called our callback + abortConnection(socket, 501, 'Could not process protocols'); + } + return; + } else { + if (typeof protocols !== 'undefined') { + completeHybiUpgrade2(protocols.split(/, */)[0]); + } + else { + completeHybiUpgrade2(); + } + } + } + + // optionally call external client verification handler + if (typeof this.options.verifyClient == 'function') { + var info = { + origin: origin, + secure: typeof req.connection.authorized !== 'undefined' || typeof req.connection.encrypted !== 'undefined', + req: req + }; + if (this.options.verifyClient.length == 2) { + this.options.verifyClient(info, function(result, code, name) { + if (typeof code === 'undefined') code = 401; + if (typeof name === 'undefined') name = http.STATUS_CODES[code]; + + if (!result) abortConnection(socket, code, name); + else completeHybiUpgrade1(); + }); + return; + } + else if (!this.options.verifyClient(info)) { + abortConnection(socket, 401, 'Unauthorized'); + return; + } + } + + completeHybiUpgrade1(); +} + +function handleHixieUpgrade(req, socket, upgradeHead, cb) { + // handle premature socket errors + var errorHandler = function() { + try { socket.destroy(); } catch (e) {} + } + socket.on('error', errorHandler); + + // bail if options prevent hixie + if (this.options.disableHixie) { + abortConnection(socket, 401, 'Hixie support disabled'); + return; + } + + // verify key presence + if (!req.headers['sec-websocket-key2']) { + abortConnection(socket, 400, 'Bad Request'); + return; + } + + var origin = req.headers['origin'] + , self = this; + + // setup handshake completion to run after client has been verified + var onClientVerified = function() { + var wshost; + if (!req.headers['x-forwarded-host']) + wshost = req.headers.host; + else + wshost = req.headers['x-forwarded-host']; + var location = ((req.headers['x-forwarded-proto'] === 'https' || socket.encrypted) ? 'wss' : 'ws') + '://' + wshost + req.url + , protocol = req.headers['sec-websocket-protocol']; + + // build the response header and return a Buffer + var buildResponseHeader = function() { + var headers = [ + 'HTTP/1.1 101 Switching Protocols' + , 'Upgrade: WebSocket' + , 'Connection: Upgrade' + , 'Sec-WebSocket-Location: ' + location + ]; + if (typeof protocol != 'undefined') headers.push('Sec-WebSocket-Protocol: ' + protocol); + if (typeof origin != 'undefined') headers.push('Sec-WebSocket-Origin: ' + origin); + + return new Buffer(headers.concat('', '').join('\r\n')); + }; + + // send handshake response before receiving the nonce + var handshakeResponse = function() { + + socket.setTimeout(0); + socket.setNoDelay(true); + + var headerBuffer = buildResponseHeader(); + + try { + socket.write(headerBuffer, 'binary', function(err) { + // remove listener if there was an error + if (err) socket.removeListener('data', handler); + return; + }); + } catch (e) { + try { socket.destroy(); } catch (e) {} + return; + }; + }; + + // handshake completion code to run once nonce has been successfully retrieved + var completeHandshake = function(nonce, rest, headerBuffer) { + // calculate key + var k1 = req.headers['sec-websocket-key1'] + , k2 = req.headers['sec-websocket-key2'] + , md5 = crypto.createHash('md5'); + + [k1, k2].forEach(function (k) { + var n = parseInt(k.replace(/[^\d]/g, '')) + , spaces = k.replace(/[^ ]/g, '').length; + if (spaces === 0 || n % spaces !== 0){ + abortConnection(socket, 400, 'Bad Request'); + return; + } + n /= spaces; + md5.update(String.fromCharCode( + n >> 24 & 0xFF, + n >> 16 & 0xFF, + n >> 8 & 0xFF, + n & 0xFF)); + }); + md5.update(nonce.toString('binary')); + + socket.setTimeout(0); + socket.setNoDelay(true); + + try { + var hashBuffer = new Buffer(md5.digest('binary'), 'binary'); + var handshakeBuffer = new Buffer(headerBuffer.length + hashBuffer.length); + headerBuffer.copy(handshakeBuffer, 0); + hashBuffer.copy(handshakeBuffer, headerBuffer.length); + + // do a single write, which - upon success - causes a new client websocket to be setup + socket.write(handshakeBuffer, 'binary', function(err) { + if (err) return; // do not create client if an error happens + var client = new WebSocket([req, socket, rest], { + protocolVersion: 'hixie-76', + protocol: protocol + }); + if (self.options.clientTracking) { + self.clients.push(client); + client.on('close', function() { + var index = self.clients.indexOf(client); + if (index != -1) { + self.clients.splice(index, 1); + } + }); + } + + // signal upgrade complete + socket.removeListener('error', errorHandler); + cb(client); + }); + } + catch (e) { + try { socket.destroy(); } catch (e) {} + return; + } + } + + // retrieve nonce + var nonceLength = 8; + if (upgradeHead && upgradeHead.length >= nonceLength) { + var nonce = upgradeHead.slice(0, nonceLength); + var rest = upgradeHead.length > nonceLength ? upgradeHead.slice(nonceLength) : null; + completeHandshake.call(self, nonce, rest, buildResponseHeader()); + } + else { + // nonce not present in upgradeHead + var nonce = new Buffer(nonceLength); + upgradeHead.copy(nonce, 0); + var received = upgradeHead.length; + var rest = null; + var handler = function (data) { + var toRead = Math.min(data.length, nonceLength - received); + if (toRead === 0) return; + data.copy(nonce, received, 0, toRead); + received += toRead; + if (received == nonceLength) { + socket.removeListener('data', handler); + if (toRead < data.length) rest = data.slice(toRead); + + // complete the handshake but send empty buffer for headers since they have already been sent + completeHandshake.call(self, nonce, rest, new Buffer(0)); + } + } + + // handle additional data as we receive it + socket.on('data', handler); + + // send header response before we have the nonce to fix haproxy buffering + handshakeResponse(); + } + } + + // verify client + if (typeof this.options.verifyClient == 'function') { + var info = { + origin: origin, + secure: typeof req.connection.authorized !== 'undefined' || typeof req.connection.encrypted !== 'undefined', + req: req + }; + if (this.options.verifyClient.length == 2) { + var self = this; + this.options.verifyClient(info, function(result, code, name) { + if (typeof code === 'undefined') code = 401; + if (typeof name === 'undefined') name = http.STATUS_CODES[code]; + + if (!result) abortConnection(socket, code, name); + else onClientVerified.apply(self); + }); + return; + } + else if (!this.options.verifyClient(info)) { + abortConnection(socket, 401, 'Unauthorized'); + return; + } + } + + // no client verification required + onClientVerified(); +} + +function acceptExtensions(offer) { + var extensions = {}; + var options = this.options.perMessageDeflate; + var maxPayload = this.options.maxPayload; + if (options && offer[PerMessageDeflate.extensionName]) { + var perMessageDeflate = new PerMessageDeflate(options !== true ? options : {}, true, maxPayload); + perMessageDeflate.accept(offer[PerMessageDeflate.extensionName]); + extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + return extensions; +} + +function abortConnection(socket, code, name) { + try { + var response = [ + 'HTTP/1.1 ' + code + ' ' + name, + 'Content-type: text/html' + ]; + socket.write(response.concat('', '').join('\r\n')); + } + catch (e) { /* ignore errors - we've aborted this connection */ } + finally { + // ensure that an early aborted connection is shut down completely + try { socket.destroy(); } catch (e) {} + } +} diff --git a/node_modules/ws/package.json b/node_modules/ws/package.json new file mode 100644 index 0000000..2775a99 --- /dev/null +++ b/node_modules/ws/package.json @@ -0,0 +1,120 @@ +{ + "_args": [ + [ + { + "raw": "ws@^1.1.1", + "scope": null, + "escapedName": "ws", + "name": "ws", + "rawSpec": "^1.1.1", + "spec": ">=1.1.1 <2.0.0", + "type": "range" + }, + "/home/burchettm/statsbot/node_modules/discordie" + ] + ], + "_from": "ws@>=1.1.1 <2.0.0", + "_id": "ws@1.1.4", + "_inCache": true, + "_location": "/ws", + "_nodeVersion": "7.7.2", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/ws-1.1.4.tgz_1489230923644_0.4469207131769508" + }, + "_npmUser": { + "name": "lpinca", + "email": "luigipinca@gmail.com" + }, + "_npmVersion": "4.1.2", + "_phantomChildren": {}, + "_requested": { + "raw": "ws@^1.1.1", + "scope": null, + "escapedName": "ws", + "name": "ws", + "rawSpec": "^1.1.1", + "spec": ">=1.1.1 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/discordie" + ], + "_resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", + "_shasum": "57f40d036832e5f5055662a397c4de76ed66bf61", + "_shrinkwrap": null, + "_spec": "ws@^1.1.1", + "_where": "/home/burchettm/statsbot/node_modules/discordie", + "author": { + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com", + "url": "http://2x.io" + }, + "bugs": { + "url": "https://github.com/websockets/ws/issues" + }, + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + }, + "description": "simple to use, blazing fast and thoroughly tested websocket client, server and console for node.js, up-to-date against RFC-6455", + "devDependencies": { + "ansi": "0.3.x", + "benchmark": "0.3.x", + "bufferutil": "1.2.x", + "expect.js": "0.3.x", + "istanbul": "^0.4.1", + "mocha": "2.3.x", + "should": "8.0.x", + "tinycolor": "0.0.x", + "utf-8-validate": "1.2.x" + }, + "directories": {}, + "dist": { + "shasum": "57f40d036832e5f5055662a397c4de76ed66bf61", + "tarball": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz" + }, + "gitHead": "19106a14d1782bed6f3b12a612e1a73a4970fdbe", + "gypfile": true, + "homepage": "https://github.com/websockets/ws#readme", + "keywords": [ + "Hixie", + "HyBi", + "Push", + "RFC-6455", + "WebSocket", + "WebSockets", + "real-time" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "3rdeden", + "email": "npm@3rd-Eden.com" + }, + { + "name": "einaros", + "email": "einaros@gmail.com" + }, + { + "name": "lpinca", + "email": "luigipinca@gmail.com" + }, + { + "name": "v1", + "email": "npm@3rd-Eden.com" + } + ], + "name": "ws", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/websockets/ws.git" + }, + "scripts": { + "test": "make test" + }, + "version": "1.1.4" +}